使用单片机实现一键多功能按键识别的设计实验说明

1.实验任务
如图所示,开关sp1接在p3.7/rd管脚上,在at89s51单片机的p1端口接有四个发光二极管,上电的时候,l1接在p1.0管脚上的发光二极管在闪烁,当每一次按下开关sp1的时候,l2接在p1.1管脚上的发光二极管在闪烁,再按下开关sp1的时候,l3接在p1.2管脚上的发光二极管在闪烁,再按下开关sp1的时候,l4接在p1.3管脚上的发光二极管在闪烁,再按下开关sp1的时候,又轮到l1在闪烁了,如此轮流下去。
2.电路原理图
图4.9.1
3.系统板上硬件连线
(1. 把“单片机系统”区域中的p3.7/rd端口连接到“独立式键盘”区域中的sp1端口上;
(2. 把“单片机系统”区域中的p1.0-p1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“l1-l8”端口上;要求,p1.0连接到l1,p1.1连接到l2,p1.2连接到l3,p1.3连接到l4上。
4.程序设计方法
(1. 设计思想由来
在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的id号标识,这样,每按下一次按键,id的值是不相同的,所以单片机就很容易识别不同功能的身份了。
(2. 设计方法
从上面的要求我们可以看出,l1到l4发光二极管在每个时刻的闪烁的时间是受开关sp1来控制,我们给l1到l4闪烁的时段定义出不同的id号,当l1在闪烁时,id=0;当l2在闪烁时,id=1;当l3在闪烁时,id=2;当l4在闪烁时,id=3;很显然,只要每次按下开关k1时,分别给出不同的id号我们就能够完成上面的任务了。下面给出有关程序设计的框图。
5.程序框图
图4.9.2
6.汇编源程序
id equ 30h
sp1 bit p3.7
l1 bit p1.0
l2 bit p1.1
l3 bit p1.2
l4 bit p1.3
org 0
mov id,#00h
start: jb k1,rel
lcall delay10ms
jb k1,rel
inc id
mov a,id
cjne a,#04,rel
mov id,#00h
rel: jnb k1,$
mov a,id
cjne a,#00h,is0
cpl l1
lcall delay
sjmp start
is0: cjne a,#01h,is1
cpl l2
lcall delay
sjmp start
is1: cjne a,#02h,is2
cpl l3
lcall delay
sjmp start
is2: cjne a,#03h,is3
cpl l4
lcall delay
sjmp start
is3: ljmp start
delay10ms: mov r6,#20
loop1: mov r7,#248
djnz r7,$
djnz r6,loop1
ret
delay: mov r5,#20
loop2: lcall delay10ms
djnz r5,loop2
ret
end
7.c语言源程序
#include 《at89x51.h》
unsigned char id;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i》0;i--)
for(j=248;j》0;j--);
}
void delay02s(void)
{
unsigned char i;
for(i=20;i》0;i--)
{delay10ms();
}
}
void main(void)
{ while(1)
{ if(p3_7==0)
{delay10ms();
if(p3_7==0)
{
id++;
if(id==4)
{
id=0;
}
while(p3_7==0);
}
}
switch(id)
{ case 0:
p1_0=~p1_0;
delay02s();
break;
case 1:
p1_1=~p1_1;
delay02s();
break;
case 2:
p1_2=~p1_2;
delay02s();
break;
case 3:
p1_3=~p1_3;
delay02s();
break;
}
}

多用户电表的作用和用途
SNR G106.3+2.7成为银河系候选的“拍电子伏特宇宙线加速器”
行业 | 英特尔已经计划出售基带芯片业务,但苹果已放弃?
乐华车间工位机数字化工厂的应用
Maxim最新Go-IO平台将智能化推向数字工厂前沿
使用单片机实现一键多功能按键识别的设计实验说明
芯慌遇上造车热,国产芯片的机会到了?
走在技术前沿,百度将亮相 GOTC 2023
谷歌秘密测试6GHz网络频谱,以提供可靠的宽带连接
简化您的EV接线盒设计
python中怎么使用HTTP代理
亚马逊在英国成立无人驾驶配送技术团队
OpenHarmony高校技术俱乐部计划发布
国产手机选哪个品牌?华为p10闪存门了!小米6重启门了!然而oppo却置身事外咯
温补振荡器的温度补偿原理及未来方向
线路充电保护原理 线路充电保护的作用
华为存储逆势高速增长,支持众多行业开展数字化转型
曝谷歌将于9月3日推出针对Pixel系列的AndroidQ正式版安全更新
Vega游戏显卡月底发布!为游戏而生 不用担心矿工跟你抢!
FPGA编程技巧系列之输入输出偏移约束详解