//调试程序成功,只是不知什么原因,显示不正常
//预期目的:按键显示键值
#include<reg51.h>
#include<stdio.h>
#include<absacc.h>
#define unchar unsigned char
#define unint unsigned int
unchar code LEDSEG[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unchar temp,i,j;
unchar dis_buf[]={16,16,16,0}; //显示3个空格和一个0
void display(void);
void keyscan(void);
unchar testkey(unchar);
void delay(void);
//===============================================================================
void main(void)
{IT0=1; //外部中断0初始化
EX0=1;
EA=1;
P2=0xff;
P0=0xff;
while(1)
{display();}
}
//********************************************************************************
void key_int(void) interrupt 0
{
unchar temp_h,temp_l,keynum; //行码 列码 键值
unchar code_h,code_l;
if(testkey(0xf0))
{
temp_l=0;
temp_h=0; //功能:扫描键盘并更新显示缓冲区
code_l=0xfe;
while(temp_l<0x04)
{
if(testkey(code_l)==1)
{
code_h=P2;
if(P2^4==0) temp_h=0x00;
else if(P2^5==0)temp_h=0x04;
else if(P2^6==0)temp_h=0x08;
else temp_h=0x0c;
while(testkey(0xf0)){;} //等待按键放开
break;
}
else{code_l=code_l<<1|0x01;
temp_l++;
}
}
keynum=temp_h+temp_l; //更新显示缓冲区
dis_buf[0]=dis_buf[1];
dis_buf[1]=dis_buf[2];
dis_buf[2]=dis_buf[3];
dis_buf[3]=keynum;
}
}
//----------------------------------------
unchar testkey(unchar scan_code ) //测试是否有键按下,scan_code是扫描码,返回1说明有键按下
{
unchar temp;
P2=scan_code;
delay(); //延时1ms防抖 //1ms不够,最好是20ms !!!!!!!!!!!!!!!!!
temp=P2;
if((~temp)&0xf0) return (1);
else return (0);
}
//********************************************************************************
void display(void) //显示4位数
{
unchar i,disbit;
disbit=0xfe;
for(i=0;i<4;i++)
{
//P0=LEDSEG[dis_buf[i]];
P2=disbit; //选中要显示的管
P0=LEDSEG[dis_buf[i]]; //要先选中,才能输出显示数据!!!!!!!!!!!
delay();
disbit=disbit<<1; //改变位码
disbit++;
}
}
//================================================================================
/*void delay(void) //
{EA=1;
ET0=1;
TMOD=0x01;
TH0=0xFC;
TL0=0x18;
TR0=1;
while(!TF0);
TF0=0;
} */
void delay(void) // 延时1ms
{
int a=0;
for(a=0;a<1000;a++);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Protues仿真实例-51单片机-4X4矩阵键盘
共13个文件
lnp:1个
c:1个
dbk:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 124 浏览量
2021-04-28
10:03:58
上传
评论 3
收藏 44KB RAR 举报
温馨提示
Protues仿真实例-51单片机-4X4矩阵键盘
资源推荐
资源详情
资源评论
收起资源包目录
Protues仿真实例-51单片机-4X4矩阵键盘.rar (13个子文件)
Protues仿真实例(8051)-4X4矩阵键盘
my16key_c
my16keyc 6KB
my16keyc.plg 20KB
my16keyc.Uv2 2KB
16key_c.c 2KB
my16keyc.Opt 2KB
my16keyc.hex 1KB
TESTkey.PWI 806B
my16keyc.lnp 32B
TESTkey.DSN 99KB
my16keyc.M51 7KB
16key_c.OBJ 6KB
Last Loaded TESTkey.DBK 99KB
16key_c.LST 5KB
共 13 条
- 1
资源评论
- ylh3299582022-06-16用户下载后在一定时间内未进行评价,系统默认好评。
- wsnbb_20232023-06-07总算找到了想要的资源,搞定遇到的大问题,赞赞赞!
- 浮生未春2023-04-28资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
- m0_624850082022-05-25用户下载后在一定时间内未进行评价,系统默认好评。
阿巴乾
- 粉丝: 2574
- 资源: 89
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功