搜索
bottom↓
回复: 4

求助:我想设计一个电子表,可以调时间的,可是一天了...

[复制链接]

出0入0汤圆

发表于 2012-7-19 00:35:16 | 显示全部楼层 |阅读模式
没做完,做的我头好疼,可能我按这个想法走感觉很复杂,是否有好一点的方法呢,求高手帮帮解决。谢谢
代码是:#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void delayms(uchar a);
void shanshuo();
void jiashu();
void jianshu();
void init();
void display();
uchar i=0,t=0,n=0,m=0,s=0;

sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;

//位选
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//段选(共阳极0123456789-)
uchar duan[]={
0xC0,0xF9, 0xA4,0xB0,0x99, 0x92, 0x82,0xF8,0x80,0x90,0xbf};               
        
void main()
{
        while(1)
        {
           init();
           shanshuo();
        }
}

void delayms(uchar a)
{
   uchar w;
   while(a--)
   for(w=0;w<120;w++);
}

//下杠左右移闪烁函数
void shanshuo()
{       
    uchar s,k;
        while(1)
        {
        display();
        if(k7==0) //右移键
        {       
           TR1=1;//停止计数   
           delayms(0); //消抖
           if(k7==0)
           {  
                  for(k=10;k>0;k--)         //闪烁的次数
                  {
              P2=wei[s];
                  P0=0xf7;
          delayms(5000);delayms(5000);         
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                   if(k5==0)        //在闪烁过程中如果按键k5按一下数加一
                          {                            
                                delayms(0);//消抖
                                if(k5==0)
                                 {                                  
                                    jiashu();  //加数函数
                                 }
                          }
                          else if(k6==0) //在闪烁过程中如果按键k6按一下数减一
                          {
                                  delayms(0);//消抖
                                if(k6==0)
                                 {                                  
                                  jianshu();   //减数函数
                                 }
                          }
                  }
              if(s>=8)
                  {
                  s=0;                     
                  }
           }s++;
        }
        else if(k8==0)//左移键
        {
           TR1=0;//停止计数       
           if(s==0)
            {
                 s=7;                     
                }
           delayms(0); //消抖
           if(k8==0)
           {  
                  for(k=10;k>0;k--)         //闪烁的次数
                  {
              P2=wei[s];
                  P0=0xf7;
          delayms(5000);delayms(5000);         
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                          if(k5==0)                 //在闪烁过程中如果按键k5按一下数加一
                          {                            
                                delayms(0);//消抖
                                if(k5==0)
                                 {                                  
                                    jiashu();  //加数函数
                                 }
                          }
                          else if(k6==0)  //在闪烁过程中如果按键k6按一下数减一
                          {
                                   delayms(0); //消抖
                                if(k6==0)
                                 {                                  
                                  jianshu();   //减数函数
                                 }
                          }
                  }
           }s--;
        }
  }  
}

void jiashu()//加数函数
{

}
void jianshu()//减数函数
{

}

void init()
{  
   TMOD=0x10;
   EA=1;
   EX0=1;IT0=0;          //外部中断0
   EX1=1;IT1=0;          //外部中断1
      
   ET1=1;            //定时计数器
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   TR1=1;
}

void wzd0() interrupt 0//外部中断0
{

}

void wzd1() interrupt 2//外部中断1
{

}

void t1() interrupt 3
{
   i++;
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   if(i>=20)
   {
            i=0;
         t++;
         if(t>=60)
         {
                 t=0;
                n++;
                if(n>=60)
                {
                   n=0;
                   m++;
                   if(m>=24)
                   {
                            m=0;
                   }
                }
         }
   }
}
void display()
{
   uchar d;
   uchar table[8];
   table[0]=duan[m/10];table[1]=duan[m%10];table[2]=duan[10];
   table[3]=duan[n/10];table[4]=duan[n%10];
   table[5]=duan[10];table[6]=duan[t/10];table[7]=duan[t%10];
   for(d=0;d<8;d++)
   {
   P2=wei[d];
   P0=table[d];
   delayms(2);
   }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出145入215汤圆

发表于 2012-7-19 16:25:50 来自手机 | 显示全部楼层
先画好程序流程图,然后写功能子程序,并逐一调试好,最后组合在一起,调试

出0入0汤圆

发表于 2012-7-20 12:30:52 | 显示全部楼层
对!其实这个应该比较容易的!

出0入0汤圆

发表于 2012-7-20 12:39:56 | 显示全部楼层
网上资料一搜一大把

出0入0汤圆

 楼主| 发表于 2012-7-22 21:02:14 | 显示全部楼层
谢谢了,我一定会实施的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 17:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表