大神们求指教下,下面这段单片机代码先是我自己慢慢编出来,之后结合郭老师的视频讲解改了改,就是学习《单片机十天征服我》的那个学习视频。中让LED按1秒闪烁,数码管用中断2秒来变化。
我最初使用的是TL0 = 0xD7; ,那数码管显示的老快了。看着就是8,灯到没问题,这张图片就是显示的很快,这又是为什么了。这TL0和TH0都是通过STC-isp算出来的呀。没道理错瑟
TH0 = 0xFD;
当我使用TL0=(65536-50000)%256;就完全能实现。
TH0=(65536-50000)/256;
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define ut unsigned int
#define ur unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
ut num=0,t=0;
ur a=0,temp=0;
ur code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(ut z) //延迟保持不变,大约Z=1000为1s
{
ut x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{ TMOD=0x01;
/*TL0=(65536-50000)%256;
TH0=(65536-50000)/256;*/
TL0 = 0xD7; TH0 = 0xFD;//50ms的初值
EA=1; //总中断开
ET0=1; //定时0中断开
TR0=1; //启动定时器0开,开始断点
wela=1;P0=0xe0;wela=0; //位选,所有的数码管
dula=1;P0=0x3f;dula=1; //段选让数码管的初值为0
a=0xfe; //让发光二极管间隔1s循环闪烁,没问题
while(1){P1=a;
temp=a;
temp=_crol_(temp,1);
a=temp;
delay(1000);
}
}
void zd0() interrupt 1 //中断有问题
{ /*TL0=(65536-50000)%256;
TH0=(65536-50000)/256;*/TL0 = 0xD7; TH0 = 0xFD;
t++;
if(t==40)
{t=0;num++;
dula=1;P0=table[num%16];dula=0;
}
}
|