sbit Key_CLK = P3^2 //使用中断
bit BF = 0
bit Shift /颂兆/定义上档键标志
bit Key_UP //定野拆租义通码断码标志
unsigned char KeyV
unsigned char IntNum
unsigned char DisNum
void Keyboard_out(void) interrupt 0
{
if ((IntNum >0) &&(IntNum <9)) {
……
不全。
网上搜来的,希望对你有帮助。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit psdata=P3^7
sbit psclk=P3^2
uchar a[3]
uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
uchar numbit,keyv,n,m,i
void delay(uint t)
{
uchar i
while(t--)
for(i=0i<125i++)
}
void main()
{
IT0=1
EX0=1
EA=1
while(1)
{
if(i==3)
{
i=0
n=a[0]/16
败链旁m=a[0]%16
}
P0=duan[n]//十位
P2=1
delay(1)
P0=duan[m]//个位
P2=0
delay(1)
}
}
void int0() interrupt 0
{
if((numbit>0)&&察橡(numbit<9))
{
keyv=keyv>>1//低唤凯位开始传
if(psdata)//判断数据上有没有数据收到
{
keyv=keyv|0x80
}
}
numbit++
if(numbit>10)
{
numbit=0
a[i]=keyv
i++
}
}
key_scan_output=scan[col]rowkey=~(_key_scan_output&0x0f)//这里之后rowkey只能取0xf1,0xf2,0xf4,0xf8这几个值了,
if(rowkey!=0)//所以这里州昌是一直为真的
{
if(rowkey==0x01) row=0
else if(rowkey==0x02) row=1
else if(rowkey==0x03) row=2
else if(rowkey==0x04) row=3
key_value=4*col+row//而这里的值只会是4*col+0,row 始终是0
while(rowkey!=0)//这里是不是松手检测啊,如果是的话,下面这样就好了
/困迹亏/汪神while((_key_scan_output&0x0f)!=0x0f)//等待按键松手
rowkey=~(_key_scan_output&0x0f)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)