不知道为什么,中断函数跳不进去,不能赋值0XF0。
已经弄了一天了,濒临崩溃,大神快来看看
#include<reg51.h>
sbit stl0=P2^0;
sbit stl1=P2^1;
sbit stl2=P2^2;
sbit enabled=P2^3; //控制锁存器管脚
unsigned char code DIG_CODE[17]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//0-F共阳极方式
unsigned char keystate=0;
unsigned char fix=0;
void configuration();
void delay1ms();
void main()
{
configuration();
stl0=0; //选中第一个数码管
stl1=0;
stl2=0;
while(1)
{
if(fix==1)
{
enabled=1; //锁存器解锁
P0=DIG_CODE[keystate];
enabled=0; //锁存器加锁
fix=0;
}
}
}
void checkout()
{
char a=0;
P1=0X0f;
// TR0=0;
ET0=0;
if(P1!=0X0f)
{
delay1ms();
// P1=0X0f;
if(P1!=0x0f)
{
fix=1;
switch(P1)
{
case (0x0e): keystate=0; break;
case (0x0d): keystate=1; break;
case (0x0b): keystate=2; break;
case (0x07): keystate=3; break;
default: break;
}
P1=0xf0;
delay1ms();
switch(P1)
{
case (0xe0): keystate+=0; break;
case (0xd0): keystate+=4; break;
case (0xb0): keystate+=8; break;
case (0x70): keystate+=12; break;
default: break;
}
ET0=1;
while(P1==0xf0&&a<=100)
{
a++;
delay1ms();
}
a=0;
}
}
// ET0=1;
// TH0=0XFC;
// TL0=0X18;
// TR0=1;
}
void configuration() //初始化函数
{
TMOD=0X02;//选择为定时器0模式,工作方式2
TH0=0X9C; //计时100us
TL0=0X9C;
// TMOD=0x01; //定时1ms,使用方式1,这个是我自己写的
// TH0=0XFC;
// TL0=0X18;
ET0=1;
EA=1;
TR0=1;
}
void set0() interrupt 1 //中断函数
{
checkout();
}
void delay1ms() //延时1ms
{
unsigned char a1,b1;
for(a1=50;a1>=0;a1--)
for(b1=10;b1>=0;b1--);
} |