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编辑过]
作者: daixiaoxiao3824 时间: 2011-10-2 01:17
javascript:;
作者: daixiaoxiao3824 时间: 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编辑过]
作者: 独孤半球 时间: 2011-11-4 19:32
2可能是数码管个位和十位接反了
3检查一下位码输出是否正确,如果正确可能是数码管应该选共阳极的。
我也刚学,可能不对,你试一下吧!
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |