关于数码管显示、中断以及delay()函数的一些困惑
时间:10-02
整理:3721RD
点击:
今晚编写如下程序,想用中断来实现数码管一秒钟显示一个数,循环显示。但是发现数码管显示一秒钟换一个数字的时间并不是由中断函数控制的。因为程序中无意留下了上次编程的delay()函数。窃以为时间是由中断函数控制的,就把delay()函数全删了。但发现数码管无法正常显示成为一团模糊的红色。这是怎么回事?难道中断函数没有起作用?如果加上一个delay()函数,数码管换数时间短;再加上一个delay()函数,时间变长;这时在if判断条件中改变tt的大小却丝毫不影响数码管换数的时间(从感官上)?怎么回事?求大神解答?还有就是delay()函数的功能到底是干嘛的?是去除数码管余晖影响吗?在这个程序中不用delay只用中断函数怎么实现一秒换数?求大神!谢谢啦!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num,tt;
void delay(uint z);
void main()
{
num=0;
tt=0;
P2=0x7f;
P0=table[num];
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
if(tt=20)
{
tt=0;
num++;
if(num==10)
num=0;
P2=0x7f;
P0=table[num];
delay(500);
//delay(500);
P0=0xff;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
你既然用中断来计时,那么就没必要用到delay函数,主函数写的不对,你试下下面程序
P0 = 0XFF;
while(1)
{
if(tt==20) //注意此地方
{
tt=0;
P0=table[num];
num = (num + 1) % 10;
}
}
还是不行啊!数码管一直显示8。根本没有循环显示啊!
if(tt=20),这个地方错了,应该是if(tt==20),如果按你原来的意思,那if语句一直都是成立的,所以是后面的delay函数起计时的作用,而不是中断函数
哈哈,谢谢啦!问题解决了。的确是那样。粗心大意造成的麻烦不小啊
因为我之前也犯过同样的错误。
不好意思,if那个地方我都疏忽了
没事的,都是对我有帮助的。有时候bug不是一个人能找出来的。还是感谢啦
感谢感谢,十分感谢!
f(tt=20),这个地方错了,应该是if(tt==20),如果按你原来的意思,那if语句一直都是成立的,所以是后面的delay函数起计时的作用,而不是中断函数