键盘控制数码管显示与流水灯
- 格式:docx
- 大小:473.48 KB
- 文档页数:24
如何实现键盘自由控制二极管流水灯#include//流水灯从上到下点亮然后熄灭; 再从下到上点亮然后熄灭sbit Key1=P2;//启动停止定时器T0sbit Key2=P2;//停止定时器T0, 通过键盘实现流水灯从上到下点亮然后熄灭sbit Key3=P2 ; //停止定时器T0, 通过键盘实现流水灯从下到上点亮然后熄灭unsigned char t=0;unsigned char i=0;void Delay(unsigned int i) //延时{ unsigned char j; for( ; i>0; i--) for(j=110; j>0; j--);}void LED_UP() // 二极管向上逐渐点亮{ unsigned char n; P0=0xff; for(n=1; n>1; Delay(1000); } P0=0xff; }void LED_Down()// 二极管向下逐渐点亮{ unsigned char n; P0=0xff; for(n=1; n<=8; n++) { P0=P0<<1; Delay(1000); } P0=0xff; }void Keycan() // 检测键盘是否被按下{ if(Key1==0) //启动停止定时器T0 { Delay(10); if(Key1==0) { TR0=~TR0; } while(!Key1); } if(TR0==0) //定时器T0 停止, Key2, Key3 键被按下才有作用{if(Key2==0) //{ Delay(10); if(Key2==0) { LED_UP(); // 二极管向上逐渐点亮} while(!Key2);}if(Key3==0) // { Delay(10); if(Key3==0) { LED_Down(); // 二极管向下逐渐点亮} while(!Key3);} } //end if(TR0==0)} void main(){ TMOD=0x01; // EA=1; // ET0=1; TR0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1) { Keycan(); if(t==20) { t=0; LED_UP(); LED_Down(); } }}void TimerLED() interrupt 1 using 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++;}tips:感谢大家的阅读,本文由我司收集整编。
北京科技大学微型计算机原理实验报告学院:____自动化学院________________专业、年级:_自动化1101_ ______________ 姓名:__廖文骏_ ________________学号:_ 20111002124 ____________ 指导教师:___ _____王粉花____________2013年12 月综合实验一按键控制流水灯实验(查询方式)实验学时:2学时一、实验目的1.掌握ATmega16 I/O口操作相关寄存器2.掌握CodeVision AVR软件的使用3. 复习C语言,总结单片机C语言的特点二、实验内容1. 设计一个简单控制程序,功能是8个LED逐一循环发光0.5s,构成“流水灯”。
2. 用两个按键K1和K2控制流水灯(中断方式):(1)当按下K1时,流水灯从左向右流动;(2)当按下K2时,流水灯从右向左流动。
三、实验所用仪表及设备硬件:PC机一台、AVR_StudyV1.1实验板软件:CodeVision AVR集成开发软件、SLISP下载软件四、实验原理ATmega16芯片有PORTA、PORTB、PORTC、PORTD(简称PA、PB、PC、PD)4组8位,共32路通用I/O接口,分别对应于芯片上32根I/O引脚。
所有这些I/O口都是双(有的为3)功能复用的。
其中第一功能均作为数字通用I/O接口使用,而复用功能则分别用于中断、时钟/计数器、USRAT、I2C和SPI串行通信、模拟比较、捕捉等应用。
这些I/O口同外围电路的有机组合,构成各式各样的单片机嵌入式系统的前向、后向通道接口,人机交互接口和数据通信接口,形成和实现了千变万化的应用。
每组I/O口配备三个8位寄存器,它们分别是方向控制寄存器DDRx,数据寄存器PORTx,和输入引脚寄存器PINx(x=A\B\C\D)。
I/O口的工作方式和表现特征由这3个I/O口寄存器控制。
AVR通用I/O端口的引脚配置情况:I/O口引脚配置表表中的PUD为寄存器SFIOR中的一位,它的作用相当AVR全部I/O口内部上拉电阻的总开关。
;************************************************** ; 平凡单片机工作室;作者:周坚;功能描述:;P3.2:开始,按此键则灯开始流动(由上而下);P3.3:停止,按此键则停止流动,所有灯为暗;P3.4:上,按此键则灯由上向下流动;P3.5:下,按此键则灯由下向上流动;本例可用TOP51-2005/TOPA V-2008单片机开发平台验证;**************************************************UpDown EQU 00H ;上下行标志StartEnd EQU 01H ;起动及停止标志LAMPCODE EQU 21H ;存放流动的数据代码ORG 0000HAJMP MAINORG 30HMAIN:MOV SP,#5FHMOV P1,#0FFHCLR UpDown ;启动时处于向上的状态CLR StartEnd ;启动时处于停止状态MOV LAMPCODE,#0FEH ;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下,则继续ACALL KEYPROC ;否则调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环,主程序到此结束;---------------------------------------DELAY:MOV R7,#10D1: MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;---------延时程序,键盘处理中调用KEYPROC:MOV A,B ;从B寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码,某位被按下,则该位为1 JB ACC.3,KeyOverJB ACC.4,KeyUpJB ACC.5,KeyDownAJMP KEY_RETKeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RETKeyOver:CLR StartEnd ;第二个键按下后的处理AJMP KEY_RETKeyUp:SETB UpDown ;第三个键按下后的处理AJMP KEY_RETKeyDown:CLR UpDown ;第四个键按下后的处理KEY_RET:RETKEY:CLR F0 ;清F0,表示无键按下。
按键控制流水灯系统设计摘要本设计旨在于通过所学知识,设计一个简单的按键控制流水灯系统,满足一些基本控制功能。
本设计选用80C51芯片作为核心硬件,组合74LS138译码芯片,4×4键盘,74LS273锁存芯片以及其他必要元器件实现对8个发光二极管和2个数码管显示屏的功能控制。
控制过程中用到了51单片机的定时/计数器和中断技术。
本次设计旨在于在理论学习单片机的基础上,通过实际系统的搭建,提高对所学知识的实际应用能力。
设计中,我们主要做了方案设计,电路搭建,程序编写,控制仿真,报告撰写等一系列工作。
方案设计说明设计要求:(1)利用按键控制流水灯的显示。
(2)利用3×3或者4×4键盘,控制数码管的显示。
(3)利用到定时/计数器。
(4)利用到中断技术。
设计功能:(1)按键0—7键为普通亮灭控制键,对应8个发光二极管,每个按键按一下,对应的灯亮,再按一次,对应的灯熄灭。
(2)按键8,12,13,14号键为功能控制键。
1)8键:按一下,8个灯逐个点亮,熄灭,循环左移三次。
2)12键:按一下,灯全部点亮,闪烁20次,返回原来状态。
3)13键:按一下,从左至右,每次点亮一个灯并保持,至灯全部点亮,再逐个熄灭。
4)14键:左右两侧灯逐对向中间点亮,熄灭,当灯对相遇后,向相反方向进行,循环两次返回。
(3)数码管显示为两位,一号为按键显示(显示被按下的键号),二号为功能号显示(显示执行的功能,从0—4分别对应1—7号键,8号键,12号键,13号键,14号键的功能)功能实现方案:51单片机的P0口(P0.0—P0.7)为低位地址总线,兼做数据总线,连接74LS273锁存器,输出的数据通过其锁存。
单片机P1口(P1.0—P1.7)用作通用I/O口,与键盘连接,其中,高四位(P1.4—P1.7)接为列控制线,低四位(P1.0—P1.3)接行控制线。
单片机P2口(P2.0—P2.5)为高位地址线,接外部74LS138译码芯片。
按键控制数码管和流水灯设计报告实验报告摘要单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。
本设计选用msp430f249芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。
通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。
用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。
在硬件电路的基础上加上软件程序的控制来实现本设计。
其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。
关键字:单片机、流水灯、数码管、控制系统SCM since the nineteen seventies, with its high price, and a convenient compact attention and great concern. Thisdesign uses msp430f249 chip as the control chip, to realize the control of the LED digital tube display matrix keyboard. Through the internal control single chip to realize the hardware design of the circuit, so as to re alize the detection and recognition of 4*4 matrix keyboard. 4 * 4 matrix keyboard connected with the MCU P3 port, and the MCU P3.0 P3.3 port for a keyboard input, MCU P3.4P3.7 port as the lines of keyboard input, and then use theP0.0 P0.7 as the output line, by a pull-up resistor display different characters "0F on display". Control with software programs based on the hardware circuit to realize the design. The working process is: first to determine whether a key is pressed, if no key is pressed, it will continue to test the whole procedure, if a key is pressed, the Keywords: SCM, water lights, digital tubes, control system键盘控制流水灯和数码管实验报告目录一设计的目的 (2)二任务描述及方案设计 (3)1. 任务描述 (3)2. 方案设计 (3)三硬件设计方案 (3)1. Msp430f149单片机的功能说明 (3)2. 显示器功能 (4)3. 复位电路 (4)4. 按键的部分 (4)5. 74HC573的特点 (4)6. 流水灯和数码管电路原理图 (4)7. 元器件清单 (4)四程序设计方案 (5)1. 用IAR Embedded Workbench软件编程序 (5)2. 仿真电路图 (6)五实物实验 (7)1. 实物图 (7)2. 测试结果与分析 (7)六结论 (11)八参考文献 (16)一、设计目的1、进一步巩固和加深学生所学一门或几门相关专业课理论知识,培养学生设计、计算、绘画、计算机应用、文献查阅、报告撰写等基本技能;2、培养学生实践动手能力及独立分析和解决工程实践问题能力;3、培养学生的团队协作精神、创新意思、严肃认真的治学态度和严谨求实的工作作风。
按键控制数码管显示试验1:首先打开keil 4软件,如下图新建一个工程
2:输入工程名称后点保存
3:选择你用的单片机型号后点OK
4:我的是89C52所以如下选择后点OK
5:然后新建一个组
6:输入组名称,注意一定和工程名一致,且后缀名为asm
7:然后在将组加进来
8:如下选择刚保存的组然后点加入
9:然后设置频率12M
10:照图上挨个点上勾
11:debug为最后项,照图点上勾,然后OK
12然后编写程序,写好检查后点击运行
机等待烧录软件提示给单片机上电。
14:效果图:
总结:这次试验是按键控制数码管显示数字0~9的增减、以及流水灯的闪烁。
通过大家的努力实现。
感谢本组每位组员的努力。
本组成员【王思琪、熊飞、孔恩、李云彬、王鹏碧】。
课程设计任务书题目键盘控制数码管显示及 LED点亮学院(部)__________ 电子与控制工程 ______________专业____________ 建筑设施智能技术 ___________班级________________ 320601 ________________学生姓名_____________________________学号________________5_月日至 _5_月_22_日指导教师_______________2014年5月22日目录一、 .............................................. 摘要 2二、 .......................................... 设计要求 2三、 ...................................... 方案设计说明 2四、 ........................................ 程序流程图 4五、 .......................................... 模块介绍 41)8051CPU (4)2)数码管显示 (5)3) (4X)4键盘输入 (5)4)流水灯显示 (6)六、源程序 (7)程序执行结果 (11)七、主要元器件介绍 (13)1) ..................................................................................................8051 (13)2) .................................................................................................. 共阴极数码管 (15)八、参考书籍 (17)一、摘要单片机是单片微型计算机,它是针对控制与检测应用而设计的,也称为微控制器。
它具有芯片体积小、集成度高、功能强、抗干扰能力强、性价比高等特点,被广泛的应用在工业自动化、仪器仪表、航天航空、消费电子、电力电子、汽车电子、计算机外设等领域。
自 20 世纪80年代MCS-51系列单片机问世以来,经历了三十多年的发展,在共享 Inter 公司 8051 内核技术的基础上,众多的半导体公司经过不断的技术更新,推出了庞大的系列兼容产品,使MCS-51系列单片机依然在各个应用领域扮演着重要的角色。
学习单片机的最有效方法就是理论与实践并重,需要更深的去了解单片机的很多功能,努力的去查找资料,当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
本课程通过应用单片机技术完成了流程灯、数码管显示以及4X4键盘的识别等功能。
二、设计要求(1)利用按键控制流水灯的显示。
(2)利用3X 3或者4X4键盘,控制数码管的显示。
(3)利用到定时 /计数器。
4)利用到中断技术。
三、方案设计说明根据要求我们所采用的方案为:主程序为4X4键盘的扫描程序,通过 P1 口输入所按键的键值,将扫描到的键值“0~F”中的一位通过P0 口在数码管上显示,并检测按键是否为“LED--- ”,如果不是,将回到程序继续扫描,如果是“LED- --”,则跳到LED循环点亮。
LED循环点亮:一共八盏灯,一盏灯亮,另七盏灯灭,从左到右循环点亮,在其中运用定时器TO工作在MODEL1,对其点亮时间进行控制点亮1s,对其定时器溢出中断次数进行统计,当溢出中断次数达到10次后,返回主程序开始四、程序流程图五、模块介绍(1)8051CPUP10 1■P11 2p12 3/P13 4附4 5p15 6fP16 7p17 8P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393735343221222325272810P3011P3112P3213P33P341415P3516P3617P37P3[O..7]甲-4-U2A0 B0A1 B1A2 B2A3 B3A4 B4A5 B5A7 B7AB/BA/4LS245U3A0 BOA1A2 B2A3 B3A5 B5卒B6A^ B7AB/BA____ |XTAL1U119XTAI2P1.2LED--- P1.3P1.4P12P1.780C51P11」10P1.5P1.6P1.0P1.1123568RESPA K-81614 *13 F11 出18 L117 L216 L32314 L513 L612 L711 L8467194678919P1.3~P1.0分别连接4X 4键盘的第一行 到第四行;P1.7~P1.4分别连接4X 4键盘的 第一列到第四列;P2 口分别接8个LED 灯; P0 口接1个共阴极数码管。
如图,MCS-51系列单片机的40只引脚按功能能可分为四类: ① 电源引脚电源引脚提供芯片的工作电源,MCS-51系列单片机采用单一的直 流5V 电源供电。
(1) Vcc (引脚 40)——+5V 。
(2) GND (引脚20)——地。
② 晶体振荡器信号输入和输出引脚晶体振荡器信号输入输出引脚外接振荡器或时钟源,为单片机提 供时钟信号。
(1) XTAL1 (引脚19)――振荡器信号输入。
(2) XTAL2 (引脚18)――振荡器信号输出。
③ I/O 口线引脚P0 口 (39~32脚):P0.0~P0.7统称为P0 口。
在不接片外存储器 与不扩展I/O 口时,可作为准双向输入/输出口。
在接有片外存P5EN ALEP2 I/A9 田刁㈣1 P2JZJK12 P2SA13 P26/A14 P2 7^15P1.01 ps(/r-nP1.2 p.3 z/im P1J3 P3 ^INTl P1.4 Pl 山 TOP1 5 F3&niP1 £Pl.?F3心口U412_3 IZ 壬-4?dAL2RSI储器或扩展I/O 口时,P0 口分时复用为低8位地址总线和双向数据总线。
P1 口(1~8脚):P1.0~P1.7统称为P1 口,可作为准双向I/O口使用。
对于52子系列,P1.0与P1.1还有第二功能:P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/ 计数器2的外部控制端T2EX。
P2口(21~28脚):P2.0~P2.7统称为P2 口,一般可作为准双向I/O 口使用;在接有片外存储器或扩展I/O 口且寻址范围超过256 字节时,P2 口用作高8位地址总线。
P3 口(10~17脚):P3.0~P3.7统称为P3 口。
除作为准双向I/O 口使用外,还可以将每一位用于第二功能,而且 P3 口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
P3 口的第二功能如表1-1所示。
表1-1④控制信号线ALE(引脚30)――地址锁存控信号,输出。
PSEN(引脚29)――外部程序存储器读选通信号,输出EA (引脚31)――内、外程序存储器选择控制端,输入RESET(引脚9)――复位信号。
(2)数码管显示! o D u Li-lb h2P 5 5 Li 采用共阴极8位数码管来显示键盘输入的键值。
数码管字型编码表宇符显云共萨槻敌砖共阳极段码亞示孚袴共隕极段磋共圧极袈码03IH€0H c C6106EI F9H d ALII5BH A4H79H66114PH E0f T1H S^H 4如99H P73H&2H56DJJ g;H11J LH C1H67DH82H r31H CEH707H F®H y6EH91HS7FH KUH8.ttH OUM9f讣H90H OOH FFHA88Hb7 CH(3) 4X4键盘输入键盘输入有“ 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F” 这些键值,“A”键的功能是流水灯循环显示。
键盘所有键的特征码按键特征码键值按键特征码键值0 7700 87D08F E 、i 1 d* 白片D >i-i ■c 、J—i .1 P13 >i |—d &—i 1 ] i 由01^TEXT*8 J=L* 1—O' a―i詢F1<TEXT>91_1 .<TEXT*8J=L»I p■_0 Q- -1P12 / i 1-- 0 o—1l |- O O---- 1«TfXT>7 r~i . L JuTEX"61严—<TEXT>5 -l=L.i [ Cl & i<TEXT>4■ L —'PH y^TEXT> 3r~i .H TEXT A21l~I .uTEXTnE_1 «P1Q /|——o 1L 4L匚|—^0 4 uTKCTn uTEXTn <TEKT> uTEXTn1! 1 12化“&丄>P1盘760C51 |g1 B7 01 9 BD 092 D7 02 A DD 0A3 E7 03 B ED 0B4 7B 04 C 7E 0C5 BB 05 D BE 0D6DB06E DE 0E7 EB 07 F EE 0F(4)流水灯显示六、源程序;------- 键盘控制数码管显示及LED点亮程序 --------------org OOOOhajmp mai n流水灯显示方式:开始全部点亮,按下“ LED---键后,点亮第一个LED,然后从左向右依次循环点亮。
ORG 0BHJMP TIM0 main:mov dptr,#tab ; mov30h,#0ffh ;mov 31h,#0ffh ;mov 32h,#0ffh ;mov 33h,#0ffh mov34h,#0ffh ;mov 35h,#0ffhmov 36h,#0ffhmov 37h,#0ffh mov39h,#0ffh ;loop: jb f0,kk1 ;f0mov 39h,#00h kk2:lcall display ;lcall keycpl a ; jz loop;mov a,38h ; cjnea,#0ah,norp ;setb f0 ;将表头位置送入 DPT 将30 显示单元清零将 30 显示单元清零将 30 显示单元清零将 30 显示单元清零将 30 显示单元清零若等于一则跳到KK1处调用显示程序; 调用键盘描程序将 A 的值取反无键按下则返回有键按下将键值送入 ACC若A键未按下则返回到LOOPL若A键按下则将F0值1jmp LEDmov p3,#00hIjmp loop ; 返回LOOP处不断的循环LED: MOV TMOD,#00000001BMOV TH0,#10000MOV TL0,#10000SETB TR0MOV IE,#10000010B ;MOV R5,#10MOV P3,#01Hjmp loopTIM0: PUSH ACCPUSH PSWMOV TH0,#10000MOV TL0,#10000DJNZ R5,LOOP1MOV R5,#10MOV A,P3RL AMOV P3,ALOOP1: POP PSWPOP ACCRETIkk1: inc 39hmov a,39h 将 39H 向上加一 将 39H 中的值送入 ACCcjnea,#10,kk2 ;ACC 中的值与 10 相等则跳转至 KK2mov 39h,#00h cpl 00h ajmp kk2 norp: mov 37h,36hmov 36h,35h若ACG 等于零则将35H 清零 将00H 位取反 跳转至KK2处mov 35h,34h mov33h,32h; 将32H 显示单元的内容送入33H mov 32h,31h ; 将31H 显示单元的内容送入32Hmov a,38h mov 30h,a ljmploopdisplay: mov p2,#0ffh将键值送入 ACC 将ACC 的值送入30H 返回主程序循环将 P2 口置高电平 dd1: jnbOOh,dd1d ; 若 00H 等 0 跳至 DD1Dajmp ddlb ;若00H 等于1则跳转至DD1Bmov 34h,33h mov 31h,30h ;将30H 单元的内容送入31H mov r7,#100; 软件计数器赋值dd1d:mov a,30h ; 将显示缓冲区30H中的值送入ACCmovc a,@a+dptr; 查表取要显示的数并把查表的结果送入 ACC mov p0,a ; 将要显示的数送入P0 口开个位显示单元clr p2.7 ;lcall延时 100USdelay100us ;setb p2.7 ; 关个位显示单ajmp dd1cdd1b: mov a,30h ; 将显示缓冲区30H中的值送入ACC movc a,@a+dptr; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开个位显示单元setb p2.7 ;lcall延时 100USdelay100us ;开个位显示单元setb p2.7 ;dd1c: mov a,31h ; 将显示缓冲区别31H中的值送入A movc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开十位显示单元clr p2.6 ;lcall延时 100USdelay100us ;关十位显示单元setb p2.6 ;mov a,32h ; 将显示缓冲区32H中的值送入ACCmovc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACCmov p0,a ; 将要显示的数送入P0 口开百位显示单元 延时 100US 关百位显示单元将显示缓冲区33H 中的值送入ACC查表取要显示的数并把查表的结果送入 ACC 将要显示的数送入P0 口 开千位显示单元 延时 100US将显示缓冲区34H 中的值送入ACC 查表取要显示的数并把查表的结果送入 ACC 将要显示的数送入P0 口 开万位显示单元 延时 100US将显示缓冲区35H 中的值送入ACC 查表取要显示的数并把查表的结果送入 ACC将要显示的数送入P0 口 开十万位显示单元 延时 100US将显示缓冲区36H 中的值送入ACCclr p2.5 ; lcall delay100us ; setb p2.5;mov a,33h ; movca,@a+dptr ; mov p0,a ;clr p2.4 ; lcalldelay100us ; setb p2.4 mov a,34h ;movc a,@a+dptr ; mov p0,a;clr p2.3 ; lcall delay100us ; setb p2.3 mov a,35h;movc a,@a+dptr ; mov p0,a ;clr p2.2 ; lcalldelay100us ; setb p2.2 mov a,36h ;movc a,@a+dptr ; 查表取要显示的数并把查表的结果送入 ACC mov p0,a ; 将要显示的数送入 P0 口 clr p2.1; 开百万位显示单元lcall delay100us ; 延时 100US setb p2.1 mov a,37h; 将显示缓冲区37H 中的值送入ACCmovc a,@a+dptr ; 查表取要显示的数并把查表的结果送入开千万显示单元 延时 100US 关千万位显示单元不等于0返回至DD1处 等于 0 子程序返回 调用检测按键子程序有键按下继续 ;无键按下退出KEY 子程序 返回继续检测有无按键按下有键按下继续延时去抖动再一次调用检测按键程序;无键按下退出KEY 子程序K2: MOV R2,#0efH将扫描值送入 R2 暂存ACCmov p0,a ; clr p2.0 ;lcall delay100us ; setb p2.0 ; djnz r7,dd1 ;R7 ret;R7KEY: LCALL KS JNZ K1 ;ljmp key_exitK1: LCALL delay4ms LCALL delay4ms LCALL KS;JNZ K2 ;ljmp key_exit将要显示的数送入P0 口MOV R4,#00H;将第一列的列值00H送入R4暂存,R4用于存放列K3: MOV P1,R2 L6: JB P1.0,L15;P1.0将R2的值送入P1 口等于 1 跳转到 L1MOV A,#00H 5将第一行的行值00H送入ACCAJMP LK 5跳转到键值处理程序L1: JB P1.1,L2;P1.1等于 1 跳转到 L2 MOV A,#04H 5将第二行的行值04H送入ACC AJMP LK 5跳转到键值理程序进行键值处理L2: JB P1.2,L3 ;P1.2 等于 1 跳转到 L3 MOV A,#08H 5将第三行的行值08H送入ACCAJMP LK 5跳转到键值处理程序L3: JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0cH 5将第四行的行值0CH送入ACC LK: ADD A,R4 ; 行值与列值相加后的键值送入 Amov 38h,a5将A中的值送入34h暂存K4: lcall display 5调用动态显示子程序LCALL KSJNZ K45按键没有松开继续返回检测RET5按键松开返回NEXT:INC R45将列值加一MOV A,R2将R2的值送入AJNB ACC.7,key_exit; 扫描完成跳至KEY处进行下一回合的扫描RL A ; 扫描未完成将A中的值右移一位进行下一列的扫描MOV R2,A ; 将ACC的值送入R2暂存AJMP K3 ; 跳转到K3继续key_exit:mov a,#Offh ; 无键按下则将A赋成OFFHretKS: MOV P1,#0FH ; 将P1 口高四位置0低四位值1 MOV A,P1 ; 读 P1 口XRL A,#0FH ; 将A中的值与A中的值相异或RET ; 子程序返回delay4ms: ;4ms 延时MOV R5,#08HL7: MOV R6,#0FAHL8: DJNZ R6,L8DJNZ R5,L7RETdelay100us: ;100us 延时mov r5,#50djnz r5,$rettab:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7' DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'DB 3EH, 50H, 40H, 08H, 00H ;'U, r,—,-, BLANKEND程序执行结果按键0按下显示结果按键LED---按下结果(输入位闪烁)D '■■©B■4Tft--fLE&—,1^4刘',3"■ET、■4tW--24产耐丿上他1Ft■/他i讯I 陀」佃」Ff-MCibg」■中斗怦皿1rgwtiw F\” 褂 2rr加F-id-點晦F-iJ砌」TTPIP PMFHJMhJ・u二ixblaua^u-少-盂I4TP皿Fi.UFlJ-Pi-E附■FINPdJflTT«*M4£按键D按下显示结果(d)按键B按下显示结果(b)■■i- vtiyjyJI•叫ui-avj-JI•叫WHS 七、主要元器件介绍 1) 805151系列是基本型,包括8051、8751、8031、8951.这四个机种区别,仅在于片内程序储存器。