单片机C语言实验及实践教程2文档格式.doc
- 文档编号:13165478
- 上传时间:2022-10-07
- 格式:DOC
- 页数:33
- 大小:314.50KB
单片机C语言实验及实践教程2文档格式.doc
《单片机C语言实验及实践教程2文档格式.doc》由会员分享,可在线阅读,更多相关《单片机C语言实验及实践教程2文档格式.doc(33页珍藏版)》请在冰豆网上搜索。
要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。
具体的一个按键从按下到释放的全过程的信号图如上图所示:
从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。
从而提高了系统的可靠性。
由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。
对于按键识别的指令,我们依然选择如下指令JB BIT,REL指令是用来检测BIT是否为高电平,若BIT=1,则程序转向REL处执行程序,否则就继续向下执行程序。
或者是 JNB BIT,REL指令是用来检测BIT是否为低电平,若BIT=0,则程序转向REL处执行程序,否则就继续向下执行程序。
但对程序设计过程中按键识别过程的框图如右图所示:
图4.8.3
5.程序框图
图4.8.4
6.汇编源程序
ORG0
START:
MOVR1,#00H ;
初始化R7为0,表示从0开始计数
MOVA,R1 ;
CPLA ;
取反指令
MOVP1,A ;
送出P1端口由发光二极管显示
REL:
JNBP3.7,REL ;
判断SP1是否按下
LCALLDELAY10MS ;
若按下,则延时10ms左右
JNBP3.7,REL ;
再判断SP1是否真得按下
INCR7 ;
若真得按下,则进行按键处理,使
MOVA,R7 ;
计数内容加1,并送出P1端口由
发光二极管显示
JNBP3.7,$ ;
等待SP1释放
SJMPREL ;
继续对K1按键扫描
DELAY10MS:
MOVR6,#20 ;
延时10ms子程序
L1:
MOVR7,#248
DJNZR7,$
DJNZR6,L1
RET
END
7.C语言源程序
#include<
AT89X51.H>
unsignedcharcount;
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;
i>
0;
i--)
for(j=248;
j>
j--);
}
voidmain(void)
while
(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
count++;
if(count==16)
{
count=0;
}
P1=~count;
while(P3_7==0);
}
}
}
9.
一键多功能按键识别技术
1.实验任务
如图4.9.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.系统板上硬件连线
4.程序设计方法
设计思想由来
在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;
那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。
设计方法
从上面的要求我们可以看出,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 EQU30H
SP1 BITP3.7
L1 BITP1.0
L2 BITP1.1
L3 BITP1.2
L4 BITP1.3
MOVID,#00H
JBK1,REL
LCALLDELAY10MS
JBK1,REL
INCID
MOVA,ID
CJNEA,#04,REL
JNBK1,$
CJNEA,#00H,IS0
CPLL1
LCALLDELAY
SJMPSTART
IS0:
CJNEA,#01H,IS1
CPLL2
IS1:
CJNEA,#02H,IS2
CPLL3
IS2:
CJNEA,#03H,IS3
CPLL4
IS3:
LJMPSTART
MOVR6,#20
LOOP1:
MOVR7,#248
DJNZR6,LOOP1
DELAY:
MOVR5,#20
LOOP2:
LCALLDELAY10MS
DJNZR5,LOOP2
7.C语言源程序
unsignedcharID;
voiddelay02s(void)
unsignedchari;
{delay10ms();
{while
(1)
{if(P3_7==0)
{delay10ms();
ID++;
if(ID==4)
ID=0;
switch(ID)
{case0:
P1_0=~P1_0;
delay02s();
break;
case1:
P1_1=~P1_1;
case2:
P1_2=~P1_2;
case3:
P1_3=~P1_3;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言 实验 实践 教程