kaola_robert 2016-10-03 04:16 采纳率: 0%
浏览 1146
已结题

关于AT89C51的中断实现4*4键盘输入显示的问题,大神们进来看看呀(~ ̄▽ ̄)~

#include

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--);
}

不知道为什么,中断函数跳不进去,不能赋值0XF0。
图片说明
![图片说明](https://img-ask.csdn.net/upload/201610/03/1475468158_284909.png)图片说明

  • 写回答

2条回答 默认 最新

  • kaola_robert 2016-10-03 04:18
    关注

    我是一个菜鸟,求好心人帮忙看看这个程序,弄了一天了不知问题出在哪里

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料