单片机一个程序中断带循环的问题,谢谢啦!
发布网友
发布时间:2022-04-20 09:09
我来回答
共4个回答
热心网友
时间:2023-06-27 13:05
#include<reg52.h>
unsigned char code seg[] = {
0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,
0xe7,0x0f,0xf0,0x00,0xff};
unsigned char num = 0, i = 0, KeyPressFlag = 0;
void delayms(unsigned int xms)
{
unsigned int x, j;
for(x=xms;x>0;x--) for(j=110;j>0;j--);
}
void keyscan(void)
{
TR0 = 0;
P0 = 0x55;
delayms(5000);
P0 = seg[i]; //恢复原来的显示内容
TR0 = 1;
}
main()
{
TMOD = 0x01;
TH0 = (65536 - 45872) / 256;
TL0 = (65536 - 45872) % 256; //不是TH1
TR0 = 1;
ET0 = 1;
EX0 = 1;
IT0 = 1;
EA = 1;
while(1) {
if(num >= 20) {
num = 0;
P0 = seg[i];
i++;
if(i == 11) i = 0;
}
if(KeyPressFlag) {
KeyPressFlag = 0;
keyscan();
}
}
}
void ISR_INT0(void) interrupt 0
{
KeyPressFlag = 1;
}
void Timer0_isr(void) interrupt 1
{
TH0 = (65536 - 45872) / 256;
TL0 = (65536 - 45872) % 256; //不是TH1
num++;
}
已经可以了。
热心网友
时间:2023-06-27 13:05
这样改比较好理解:这几行:
if(i==11)
{
i=0;
}
i++;
将i++;移到前面,改成这样
i++;
if(i==11)
{
i=0;
}
i 先加1,再判断等于11,否则先判后加1,i 就不会有0了。
热心网友
时间:2023-06-27 13:06
//你这个程序i除了第一次外,以后都不会有0这个值。修改如下。
while(1)
{
if(num==20)
{
num=0;
P0=seg[i];
i++;
i%=11;
}
追问对的,谢谢了。
热心网友
时间:2023-06-27 13:06
第二次循环之前没有清零追问额,好像不是这个问题,二楼帮忙解决了,但还是谢谢你的回答。
追答我现在不知道你原理图怎么样的,你大致的工作原理怎么样?你先把if i=11改成10