打印

数字钟

[复制链接]
2151|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
帮我看看啊!!路过的朋友,进来看看,不知道怎么会出现这样的问题,
#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;
   
}

QQ截图20130108115708.jpg (122.85 KB )

QQ截图20130108115708.jpg

QQ截图20130108115708.jpg (122.85 KB )

QQ截图20130108115708.jpg

相关帖子

沙发
NE5532| | 2012-12-9 12:11 | 只看该作者
不要把程序写完了再来调,要学会分模块处理,详见《程序调试黑宝书》

使用特权

评论回复
板凳
uet_cache| | 2012-12-9 12:12 | 只看该作者
你的时分秒变量应该赋什初值为0. 不然 if(miao==60)中=号改成>=,分时也一样。

使用特权

评论回复
地板
uet_cache| | 2012-12-9 12:14 | 只看该作者
还可以把秒和分的显示数码管位置互换一下,看是什么问题。这解决办法多了.

使用特权

评论回复
5
1638574407| | 2012-12-9 12:35 | 只看该作者
没有用过proteus,但是好像数码管上有两个管脚有问题!

使用特权

评论回复
6
东北小辉辉| | 2012-12-9 13:24 | 只看该作者
我用过这个数码管 显示的不是很好 不知道是proteus的问题还是怎么回事 建议楼主把显示部分换成液晶试试 如果正常显示就是显示模块的问题  

使用特权

评论回复
7
奔跑着的水|  楼主 | 2012-12-9 15:44 | 只看该作者
东北小辉辉 发表于 2012-12-9 13:24
我用过这个数码管 显示的不是很好 不知道是proteus的问题还是怎么回事 建议楼主把显示部分换成液晶试试 如 ...

谢谢

使用特权

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

朋友,我试过你说的方法,还是没解决问题,请问有更好的方法么、、?

使用特权

评论回复
9
uet_cache| | 2012-12-9 16:51 | 只看该作者
你要讲是什么两句

使用特权

评论回复
10
uet_cache| | 2012-12-9 16:52 | 只看该作者
现象

使用特权

评论回复
11
奔跑着的水|  楼主 | 2012-12-9 21:29 | 只看该作者
感谢各位朋友的好心帮助,终于成功了,是在程序p1=shuju[disuf[i]]前面加P2=0xff;消隐信号,刽造成乱码!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

55

帖子

0

粉丝