数字钟

[复制链接]
 楼主| 奔跑着的水 发表于 2012-12-9 11:58 | 显示全部楼层 |阅读模式
帮我看看啊!!路过的朋友,进来看看,不知道怎么会出现这样的问题,
#include<reg52.h>
#include<intrins.h>//移位指令
#define uchar  unsigned char
sbit  KEY0=P3^0;
sbit  KEY1=P3^1;
sbit  KEY2=P3^2;
sbit  led=P3^7;
uchar  miao,fen,shi;
uchar  aa=0xfe;
uchar m,i=0,k,j;
int n;
uchar shuju[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//0到9+消隐的
uchar disbuf[10]={0,0,11,0,0,11,0,0};
//
void  delay(uchar n)
{
for(j=0;j<n;j++)
    for(k=0;k<110;k++);
}
void  key()
{
if(KEY0==0)
    {
      delay(10);
   if(KEY0==0)
      {
        miao++;
     if(miao==60)miao=0;
     while(!KEY0);
      }
    }
  if(KEY1==0)
    {
      delay(10);
   if(KEY1==0)
      {
        fen++;
     if(fen==60)fen=0;
     while(!KEY1);
      }
    }
  if(KEY2==0)
    {
      delay(10);
   if(KEY2==0)
      {
        shi++;
     if(shi==60)shi=0;
     while(!KEY2);
      }
    }

}
void main()
{
  
  TMOD=0X22;//定时器计数器T0工作方式2;
  TL0=0X06;
  TH0=0X06;
  TL1=0x06;TH1=0x06;
  ET1=1;
  ET0=1;
  EA=1;
  TR0=1;
  TR1=1;
  while(1)
     {key();}  
}
void  TO_time() interrupt 1
{
   m++;
   if(m==8)//2Ms扫描一次
      {
     m=0;
     P1=shuju[disbuf[i]];
     P2=aa;
     aa=_crol_(aa,1);
     i++;
     if(i==8)
       {i=0;}
   }
}
void T1_time() interrupt 3
{      
  n++;
   if(n==4000)
      {
     led=~led;  //led1秒亮灭//
     n=0;
      miao++;
     if(miao==60)
        {
      miao=0;
        fen++;
       if(fen==60)
         {
        fen=0;
          shi++;
         if(shi==24)
            {shi=0;}
      }
     }
    }
    disbuf[0]=miao%10;
    disbuf[1]=miao/10;
    disbuf[3]=fen%10;
    disbuf[4]=fen/10;
    disbuf[6]=shi%10;
    disbuf[7]=shi/10;
   
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
NE5532 发表于 2012-12-9 12:11 | 显示全部楼层
不要把程序写完了再来调,要学会分模块处理,详见《程序调试黑宝书》
uet_cache 发表于 2012-12-9 12:12 | 显示全部楼层
你的时分秒变量应该赋什初值为0. 不然 if(miao==60)中=号改成>=,分时也一样。
uet_cache 发表于 2012-12-9 12:14 | 显示全部楼层
还可以把秒和分的显示数码管位置互换一下,看是什么问题。这解决办法多了.
1638574407 发表于 2012-12-9 12:35 | 显示全部楼层
没有用过proteus,但是好像数码管上有两个管脚有问题!
东北小辉辉 发表于 2012-12-9 13:24 | 显示全部楼层
我用过这个数码管 显示的不是很好 不知道是proteus的问题还是怎么回事 建议楼主把显示部分换成液晶试试 如果正常显示就是显示模块的问题  
 楼主| 奔跑着的水 发表于 2012-12-9 15:44 | 显示全部楼层
东北小辉辉 发表于 2012-12-9 13:24
我用过这个数码管 显示的不是很好 不知道是proteus的问题还是怎么回事 建议楼主把显示部分换成液晶试试 如 ...

谢谢
 楼主| 奔跑着的水 发表于 2012-12-9 15:57 | 显示全部楼层
uet_cache 发表于 2012-12-9 12:14
还可以把秒和分的显示数码管位置互换一下,看是什么问题。这解决办法多了. ...

朋友,我试过你说的方法,还是没解决问题,请问有更好的方法么、、?
uet_cache 发表于 2012-12-9 16:51 | 显示全部楼层
你要讲是什么两句
uet_cache 发表于 2012-12-9 16:52 | 显示全部楼层
现象
 楼主| 奔跑着的水 发表于 2012-12-9 21:29 | 显示全部楼层
感谢各位朋友的好心帮助,终于成功了,是在程序p1=shuju[disuf[i]]前面加P2=0xff;消隐信号,刽造成乱码!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部