标题:
关于AT89C52单片机外部中断时执行完中断子程序后无法回到主函数
[打印本页]
作者:
嘎威尚
时间:
2021-12-27 00:23
标题:
关于AT89C52单片机外部中断时执行完中断子程序后无法回到主函数
程序是这样的
#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
#define GPI_DIG=P0;
#define GPI_KEY=P1;
u8 Keynum;
u8 code smgduan[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(u16 i)
{
while(i--);
}
void Keydown()
{
u8 Keynum;
GPI_KEY=0x0f;
if(GPI_KEY!=0x0f)
{
delay(1000);
if(GPI_KEY!=0x0f)
{
u8 a;
GPI_KEY=0x0f;
switch(GPI_KEY)
{
case(0x0e):Keynum=0; break;
case(0x0d):Keynum=4; break;
case(0x0b):Keynum=8; break;
case(0x07):Keynum=12;break;//na yi hang
}
GPI_KEY=0xf0;
switch(GPI_KEY)
{
case(0xe0):Keynum=Keynum; break;
case(0xd0):Keynum=Keynum+1;break;
case(0xb0):Keynum=Keynum+2;break;
case(0x70):Keynum=Keynum+3;break;//na yi lie
}
while((a<50)&&(GPI_KEY!=0xf0)
{
delay(500);
a++;
}
}
}
}
void main()
{
GPI_DIG=0;
while(1)
{
LSA=0;
LSB=0;
LSC=0;
Keydown();
GPI_DIG=smgduan[Keynum];
}
}
作者:
嘎威尚
时间:
2021-12-27 00:24
不对打错了
作者:
13205495918
时间:
2021-12-27 09:30
没看见你的中断程序哎???
作者:
npn
时间:
2021-12-27 19:50
你程序发错了吧,中断寄存器和入口都不见踪影。
作者:
seaup2011
时间:
2021-12-28 08:43
你这个是你自己敲上去的,还是复制的,错误很多,首先宏定义“#define GPI_DIG=P0;”中,空格键代替等号,分号去掉。还有 “while((a<50)&&(GPI_KEY!=0xf0))”之前少一个括号,请注意。void delay(u16 i);
void Keydown();需要在前面定义一下。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1