你的程序有问题哦!
#include <reg51h>
#include <mathh>
#include <intrinsh>
#define uchar unsigned char
#define TURE 1
#define FALSE 0
int key;
int del;
void Tkey(void);
/主 程序/
void main(void)
{
void tkey(void);
void delay(int);
SCON=0x00;
TI=0;
while(TURE)
{
Tkey();
delay(2000);
} //这是一个死循环
}
void Tkey(void)
{
uchar readkey;//rereadkey;
uchar x_temp,y_temp;
/你给出的程序提示你的键盘是4X4的/
P1=0x0f; //给行送高电平,列送低电平
x_temp=P1&0x0f; //读回行的状态
if(x_temp==0x0f) goto keyout; /若行中有低电平也即不等于0x0f,
/表示有键按下
P1=0xf0; //给给列送高电平,行送低电平
y_temp=P1&0xf0; //读回列状态
readkey=x_temp|y_temp; //行状态列状态并起代表一个按键
readkey=~readkey; //取反
switch(readkey) //判定按键代码
{
case 0x11:key=0; break;
case 0x21:key=1; break;
case 0x41:key=2; break;
case 0x81:key=3; break;
case 0x12:key=4; break;
case 0x22:key=5; break;
case 0x42:key=6; break;
case 0x82:key=7; break;
case 0x14:key=8; break;
case 0x24:key=9; break;
case 0x44:key=10;break;
case 0x84:key=11;break;
case 0x18:key=12;break;
case 0x28:key=13;break;
case 0x48:key=14;break;
case 0x88:key=15;break;
default: key=16;break;
}
keyout:_nop_();
}
/延时程序/
void delay(del)
{
for(del;del>0;del--);
}
下面是一个我机子上调试好的8255程序、希望对你有所帮助。、 祝你好运~~~ 8255扫描键盘、显示程序 利用8255可编程并行口做一个扫描键盘实验, 把按键输入的键码,显示在由8279控制的七段数码管上。 8255PA口做键盘输入线,PB口作扫描线
1、读键程序:读P1。
内容对应+、-、TH/TL。
计次数识别TH/TL的长按和短按。
还需要考虑一个设定结束的考虑。
或者长时间无按键,视为设定完成。
2、显示程序:建议另一个定时中断中显示TH、TL的被设定值。
3、定时中断程序:通过IO指示灯翻转
以上就是关于这个键盘扫描程序怎么理解(急急急急急!!!!)全部的内容,包括:这个键盘扫描程序怎么理解(急急急急急!!!!)、用8255的C口做键盘扫描,怎么写程序、如何设计2个按键同时按的键盘扫描C程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)