找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4113|回复: 3
收起左侧

[求助]求助:为什么我的时钟有如下问题?

[复制链接]
ID:31953 发表于 2011-10-2 01:10 | 显示全部楼层 |阅读模式
参考资料写的时钟程序,6位共阴数码管,P2口接段,P3口接位,在中断中计数并将数分配到显示缓冲中,主程序扫描键盘。 发现 1 定时器无论初值是多少,都是一样的速度,刷新很慢,只有每秒几次,可以看到一个个字显示,是我哪里写错了? 2 本来是最后一位是秒个位,现在倒过来了,最末一位是时十位。 3 每次上电,总是从秒十位开始显示。就是从第二位,这本来该显示时个位的。 请各位指正啊!改了好几天了没有效果啊!!!!! 程序如下: #define uint unsigned int #define uchar unsigned char #include uint i,j; uint WZ=0;//位指示 uint hour=12;//时初值为12 uint minute=0; uint second=0; sbit P00=P0^1; sbit P01=P0^2; sbit P02=P0^3; static uchar t; uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9 uchar code table2[]={0x01,0x02,0x04,0x08,0x10,0x20};//6个位 uchar disbuf[]={0,0,0,0,2,1};//显示缓冲 void main(void) { TMOD=0x01; TH0=0xec;//初值5ms TL0=0x77; TR0=1; ET0=1; EA=1; while(1) //按键扫描 { if(P00==0) //秒 { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P00==0) { second++; if(second==60) { second=0; } disbuf[0]=second%10; disbuf[1]=second/10; while(P00==0); } } if(P01==0) //分 { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P01==0) { minute++; if(minute==60) { minute=0; } disbuf[2]=minute%10; disbuf[3]=minute/10; while(P01==0); } } if(P02==0) //时 { for(i=5;i>0;i--) for(j=248;j>0;j--); if(P02==0) { hour++; if(hour==24) { hour=0; } disbuf[4]=hour%10; disbuf[5]=hour/10; while(P02==0); } } } } timer0() interrupt 1 { T0=0xec77; P2=table1[disbuf[WZ]];//依位显示段 P3=table2[WZ];//显示位 WZ++; if(WZ==6)//共6位 { WZ=0; } t++; if(t==2000) { t=0; second++; if(second==60) { second=0; minute++; if(minute==60) { minute=0; hour++; if(hour==13) { hour=0; } } } } disbuf[0]=second%10; disbuf[1]=second/10; disbuf[2]=minute%10; disbuf[3]=minute/10; disbuf[4]=hour%10; disbuf[5]=hour/10; }
[此贴子已经被作者于2011-10-2 13:16:50编辑过]
回复

使用道具 举报

ID:31953 发表于 2011-10-2 01:17 | 显示全部楼层
javascript:;
回复

使用道具 举报

ID:31953 发表于 2011-10-2 13:18 | 显示全部楼层
以下是引用daixiaoxiao3824在2011-10-2 1:17:22的发言:
javascript:;

再试下程序可不可以正常显示。 #define uint unsigned int #define uchar unsigned char #include }
[此贴子已经被作者于2011-10-2 13:19:16编辑过]
回复

使用道具 举报

ID:31898 发表于 2011-11-4 19:32 | 显示全部楼层

2可能是数码管个位和十位接反了

3检查一下位码输出是否正确,如果正确可能是数码管应该选共阳极的。

我也刚学,可能不对,你试一下吧!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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