登录
首页 单片机论坛
回帖 发帖
正文

主题:定时器t0,t1的首次应用

点击:707 回复:1

不太了解定时/计数器的用法,但是还是用了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
10-08-16 21:49
不太了解就做试验,取得感性认识。
先不管三七二十一,能得出结果就行;然后回头再看,就清楚多了。

10-08-17 13:20

工控新闻

更多新闻资讯