单片机5按键功能的实现_第1页
单片机5按键功能的实现_第2页
单片机5按键功能的实现_第3页
单片机5按键功能的实现_第4页
单片机5按键功能的实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验5 按键功能的实现一、实验目的1、理解按键电路的作用;2、学习按键功能的编程方法;3、熟悉单片机I/O口连接独立式按键的编程应用方法。二、实验说明按键在单片机应用系统中实现向单片机输入数据、传送命令等功能,是人工干预单片机工作的主要手段。如果需要较多数量的按键,可以采用按键矩阵和专门的接口器件扩展按键。实际的单片机应用系统中,用到的按键数量一般不多,通常采用单片机I/O口和独立式按键即能满足需要。实验箱核心板上有 4 个按键,其一端全部与地线相连,另一端顺次与 P1.4P1.7 相连。本实验需要用到核心板上的 3 个按键、3 个指示灯和 6 个数码管,所用到的实验电路原理如图 3.1.6

2、所示。本实验中 3 个按键设计的功能,是一个实用的简单温度控制系统的按键功能,要求通过按键设定一个温度上限值和一个温度下限值。本实验只涉及按键和显示功能,在今后的实验中,将进一步增加硬件和软件功能,利用单片机实现实际的温度控制系统,使温度维持在上、下限值之间。 “功能”键:在内存数据区定义一个名称为“KBM”的字节,存放功能编号,共有 3 种功能,分别对应编号为 0,1,2。每按一次“功能”键,“KBM”中的值在这三个数字中循环改变一次。与三种功能对应,设计三个 LED(发光二极管)指示灯,由单片机 P3 口控制,当处于某种功能状态时,相应的指示灯亮。本实验的内容,实际上是后面进一步做温度测量

3、控制系统的一部分。三种功能的含义如下: 功能号 0:显示测量的温度值; 功能号 1:对温度上限值进行修改; 功能号 2:对温度下限值进行修改。 “”键:每按一次“”键,内存数据区中指定变量单元的值增 1,持续按住则连续增 1。“”键:与“”键对应,每按一次“”,内存数据区中指定变量单元的值减 1,持续按住则连续减 1。 功能号为 0 时,数码管显示被测温度值,此时按另外两个按键不起作用。功能号为 1 时,数码管显示设定温度的上限值,按另外两个按键可以修改温度上限值。功能号为 2 时,数码管显示设定温度的下限值,此时按另外两个按键可以修改温度下限值。3、实验任务1、理解单片机I/O口与按键、指示

4、灯和LED数码管的综合使用方法;2、理解图3.1.6所示的电路,读懂参考程序;3、自行设计按键显示功能(比如将6位数码管分成三组,分别显示上限、下限、测量值),并编程实现所设计的功能。4、程序流程图及代码分析D_DAT0EQU60HD_DAT1EQUD_DAT0+1D_DAT2EQUD_DAT1+1D_DAT3EQUD_DAT2+1D_DAT4EQUD_DAT3+1D_DAT5EQUD_DAT4+1;定义显示数据单元LIGHTEQUD_DAT5+1H_DAT0EQULIGHT+1H_DAT1EQUH_DAT0+1KBMEQUH_DAT1+1;定义按键功能号存放单元D_MAXEQUKBM+1;定

5、义上限值存放单元D_MINEQUD_MAX+1;定义下限值存放单元T_DAT0EQUD_MIN+1T_DAT1EQUT_DAT0+1;定义测量值存放单元ORG0000HAJMPSTARTORG0030HSTART:MOVSP,#30H;初始化堆栈指针MOVD_DAT0, #0MOVD_DAT1, #0MOVD_DAT2, #0MOVD_DAT3, #0MOV D_DAT4, #0MOV D_DAT5,#0;初始化显示数据MOVLIGHT, #80HCLRP1.0CLRP1.1CLRP1.2CLRP1.3;初始化有关I/O口MOVR0,#D_DAT0;初始化数据指针,R0指向第一位显示数字MOV

6、R1,#01H;初始化需点亮数码管位置代码MOVKBM,#0;初始化功能号MOVD_MAX, #80MOVD_MIN, #70;初始化上、下限值MOVT_DAT0, #66MOVT_DAT1,#0;目前人为赋给测量值一个值,将来有实际测量值就存放在此 MOVH_DAT0, T_DAT0MOVH_DAT1, T_DAT1LCALLHTD;将测量值二进制数转换为十进制数MAIN:LCALLDISP;刷新显示LCALLDELAY;显示、延时子程序同前;*;按键处理程序;*JBP1.7,KEY1;查询K0,若K0未按下则跳转LCALLDISPLCALLDELAY;延时去抖动,顺便刷新显示JBP1.7,

7、KEY1;若K0未真正按下则跳转INCKBM;K0真正按下,功能号增1MOVA,KBMCJNEA,#3,KEY01MOVKBM,#0;若功能号为3,则清0 KEY01:NOPAJMPKEND;跳转至按键结束处理程序KEY1:JBP1.6,KEY2;查询K1LCALLDISPLCALLDELAYJBP1.6,KEY2MOVA,KBMCJNEA,#1,KEY11;功能号不为1则跳转INCD_MAX;功能号1,上限值加1AJMPKENDKEY11:CJNEA,#2,KEY12;功能号不为2则跳转INCD_MIN;功能号2,下限值加1KEY12:AJMPKEND;跳转至按键结束处理程序KEY2:JBP

8、1.5,KEND;查询K2LCALLDISPLCALLDELAYJBP1.5,KENDMOVA,KBMCJNEA,#1,KEY21DECD_MAX;功能号1,上限值减1AJMPKENDKEY21:CJNEA,#2,KENDDECD_MIN;功能号2,下限值减1KEND:NOP;以下程序根据功能号显示不同内容MOVA, KBMCJNEA, #0, KEND1MOVH_DAT0, T_DAT0MOVH_DAT1,T_DAT1;功能号0,准备显示测量数据MOVLIGHT,#0BFH;点亮相应指示灯AJMPKEND3;跳转到刷新显示处KEND1:NOPCJNEA, #1, KEND2MOVH_DAT0

9、, D_MAXMOVH_DAT1,#0;功能号1,准备显示上限值MOVLIGHT,#7FH;点亮相应指示灯AJMPKEND3;跳转到刷新显示处KEND2:NOPCJNEA, #2,KEND3MOVH_DAT0, D_MINMOVH_DAT1,#0;功能号2,准备显示下限值MOVLIGHT,#0DFH;点亮相应指示灯KEND3:MOVP0, LIGHTSETBP1.0NOPCLRP1.0;产生一个指示灯输出锁存脉冲LCALLHTD;将需显示数据转换成4个十进制数MOVR4, #80HKEND4:LCALLDISPLCALLDELAY;刷新显示,延时DJNZR4,KEND4;此处循环延时是为了避免

10、按键多次重入LJMPMAIN;跳转到主程序开始处循环执行;*;通过595显示4位数字子程序;*DISP:MOVA,R1;取位代码数据MOVR2,#8DISP1:CLRCRLCAMOVP1.3,C; 位代码送到SER的输入端SETBP1.1NOPCLRP1.1;产生一个输入锁存脉冲DJNZR2,DISP1;依次将8位位代码移入,实际只有6位有用MOVA,R0;取需显示的数字MOVDPTR,#DISPD;笔画编码表同前MOVCA,A+DPTR;取需显示数字笔画代码MOVR2, #8DISP2:CLRCRLCAMOVP1.3,C;笔画代码送到SER的输入端SETBP1.1NOPCLRP1.1;产生一

11、个输入锁存脉冲DJNZR2,DISP2;依次将8位笔画代码(段代码)移入INCR0;R0增1指向下一个需显示数字MOVA,R1RLAMOVR1,A;R1中的值左移1位,指向下一位数码管CJNER1,#40H,DISP3;R0中不为70H则继续MOVR0, #D_DAT0MOVR1,#01H;R0中为70H,循环完一轮;重新赋初值DISP3:SETBP1.2CLRP1.2RET;数字笔画代码表; 0 1 2 3 4 5 6 7 8 9 熄DISPD: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0;*;延时子程序;*DELAY:MOVR7,#2DELY1

12、:MOVR6,#0FFHDELY2:DJNZR6,$;$代表当前行(与DJNZ R6,DELY2相同)DJNZR7, DELY1RET;二进制转换十进制子程序HTD:MOVD_DAT5,#00H;将结果千位清0MOVD_DAT4, #00HMOVD_DAT3, #00HMOVD_DAT2, #00HH1000:CLRC;进位位C清0MOVA,H_DAT0;源数据低位装载到累加器A中MOVR6,A;备份源数值低位到寄存器R6中SUBBA,#0E8H;源数值低位减去1000的低位0E8HMOVH_DAT0,A;余数存回到源数值低位存储单元MOVA,H_DAT1;源数值高位装载到累加器A中MOVR7

13、,A;备份源数值高位到寄存器R7中SUBBA,#03H;源数值高位带借位减1000的高位03HMOVH_DAT1,A;余数存回到源数值低位存储单元INCD_DAT2;千位增1JNCH1000;如果没有借位则利用余数循环再减;有借位表明为最后一次无效减;程序顺序执行,应还原最后一次修改值MOVH_DAT0,R6MOVH_DAT1,R7;用备份值作为新的源数值(余数)DECD_DAT2;千位数减1,去掉最后一次无效减的影响H100:MOVA,H_DAT0;源数值低位装载到累加器A中MOVR6,A;备份源数值低位到寄存器R6中CLRC;清0进位位CSUBBA,#100;减去100MOVH_DAT0,

14、A;存回余数低位MOVA,H_DAT1;取源数值高位SUBBA,#00H;减100的高位0,实际上是减去借位位MOVH_DAT1,A;存回余数高位JCH10;有借位则跳到下一步继续运算INCD_DAT3;没有借位,百位增1AJMPH100;没有借位继续减;注意本轮循环中最后一次减时百位未增1;所以不存在还原的问题;进入下一轮时,源数值(余数)都在R6中H10:CLRCMOVA,R6;源数值(低位)装载到累加器A中;到此源数值高位已经为0,不用再参加计算MOVD_DAT5,A;存回源数值低位;如果是最后一次减,则此值即为个位SUBBA,#10;减去10MOVR6,A;保存余数JCH1;有借位,运算结束INCD_DAT4;没有借位,十位增1LJMPH10;没有借位继续减H1:RET;子程序返回END5、实验现象数码管能正确显示,能正确实现按键的功能。6、实验小结本实验重在掌握按键电路的实现,实验程序较为复杂,需要多花功夫理解。思考题:1、 实验程序如下:MOV A,#12HMOV P0,AMAIN:JNB P1.4,K1JNB P1.5,K2JNB P1.6,K3JNB P1.7,K4AJMP MAINK1: INC AMOV P0,ALCALL DELAYLOOP1:JNB P1.4,LOOP1AJMP MAINK2: DEC AMOV P0,ALCA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论