发表于:2010/8/16 21:49:29
#0楼
不太了解定时/计数器的用法,但是还是用了t0和t1稀里糊涂的弄出一个时钟来,也不知道哪些语句是比必须的哪些是不必须的。哈哈,先打个记号,有错再回来改。
还是p2的位选,p0的段选。共8个数码管。本来想用intrins.h里面的一个循环移位程序的,但是想了半天没得出接过来,还希望会的指点下哈
程序
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0123456789-
uchar count0,count1,second,minute,hour=12;
void delay1ms(uint z)//延时用来刷心数码管的间隙不明白为什么不要这个延时不行
{
uint x,y;
{
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
}
void t0() interrupt 1
{
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
count0++;
if(count0==20)
{
count0=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
void t1() interrupt 3 //这个定时器1,不明白初值的设置长短有什么用,貌似没起作用
{
th1=(65536-1000)/256;
tl1=(65536-1000)%256;
p2=0x7f;
p0=table[second%10];
delay1ms(1);
p2=0xbf;
p0=table[second/10];
delay1ms(1);
p2=0xdf;
p0=table[10];
delay1ms(1);
p2=0xef;
p0=table[minute%10];
delay1ms(1);
p2=0xf7;
p0=table[minute/10];
delay1ms(1);
p2=0xfb;
p0=table[10];
delay1ms(1);
p2=0xfd;
p0=table[hour%10];
delay1ms(1);
p2=0xfe;
p0=table[hour/10];
delay1ms(1);
}
void main()
{
tmod=0x11;
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
th1=(65536-1000)/256;
tl1=(65536-1000)%256;
et0=1;
et1=1;
tr0=1;
tr1=1;
ea=1;
while(1)
{
}
}
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=121392&Name=h661005
还是p2的位选,p0的段选。共8个数码管。本来想用intrins.h里面的一个循环移位程序的,但是想了半天没得出接过来,还希望会的指点下哈
程序
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0123456789-
uchar count0,count1,second,minute,hour=12;
void delay1ms(uint z)//延时用来刷心数码管的间隙不明白为什么不要这个延时不行
{
uint x,y;
{
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
}
void t0() interrupt 1
{
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
count0++;
if(count0==20)
{
count0=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
}
void t1() interrupt 3 //这个定时器1,不明白初值的设置长短有什么用,貌似没起作用
{
th1=(65536-1000)/256;
tl1=(65536-1000)%256;
p2=0x7f;
p0=table[second%10];
delay1ms(1);
p2=0xbf;
p0=table[second/10];
delay1ms(1);
p2=0xdf;
p0=table[10];
delay1ms(1);
p2=0xef;
p0=table[minute%10];
delay1ms(1);
p2=0xf7;
p0=table[minute/10];
delay1ms(1);
p2=0xfb;
p0=table[10];
delay1ms(1);
p2=0xfd;
p0=table[hour%10];
delay1ms(1);
p2=0xfe;
p0=table[hour/10];
delay1ms(1);
}
void main()
{
tmod=0x11;
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
th1=(65536-1000)/256;
tl1=(65536-1000)%256;
et0=1;
et1=1;
tr0=1;
tr1=1;
ea=1;
while(1)
{
}
}
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=121392&Name=h661005