《单片机原理及接口技术结课报告——键盘输入及显示》由会员分享,可在线阅读,更多相关《单片机原理及接口技术结课报告——键盘输入及显示(18页珍藏版)》请在金锄头文库上搜索。
1、单片机原理及接口技术结课报告键盘输入及显示小组成员:第一章 总体设计原理本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个 AT89C51 单片机芯片,一个八位共阳极的数码管,一个 4*4 的键盘,一个排阻(10K)做 P0 口的上拉电阻,它可以实现结果低于 65535 的加、减、乘、除运算。显示部分:采用动态显示,由八位共阳极数码管通过 P0 口,P2 口与单片机相连,数码管的 A,B,C,D,E,F,G,DP 分别依次与单片机的 P0.0P0.7 相连,P0口做为单片机的字码控制端,数码管的 1,2,3,4,5,6,7,8 各引脚分别与单片机的 P2.0P2.7 相连,
2、P2 口作为数码管的位控制端。按键部分:采用 4*4 键盘。采用软件识别键值并执行相应的操作,键盘的第 0 行到第 3 行依次与单片机的 P3.4P3.7 管脚相连,键盘的第 0 列到第 3 列依次与单片机的 P1.0P1.3 管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个 0,等待按键按下,在进入按键扫描程序。执行过程:开机即显示 0,等待键入数值,当键入数字,将通过数码管显示出来,在键入、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当在键入数值后将显示键入
3、的数值,按等号就会在数码管上输出运算结果。注:结果不能超出 65535。按键控制显示电路系统的总体原理框图为:第二章 硬件设计 2.1 系统所选芯片介绍矩阵键盘输入LED 按键监控单片机提取转换数码管显示数字AT89C51 芯 片 是 一 种 带 有 4K 字 节 闪 存 的 低 电 压 、 高 性 能 CMOS 8 位 微处 理 器 , 俗 称 单片机。 单 片 机 的 可 擦 除 只 读 存 储 器 可 以 反 复 擦 除 1000 次 。AT89C51 单片机模块是整个电路的核心,时钟信号与复位信号的产生以及程序的处理等任务都是由单片机来完成的。时钟信号用来提供单片机片内各种微操作的时间
4、基准,复位信后用来初始化单片机内部的某些特殊功能寄存器,使CPU 及系统各部件处于确定的初始状态,并从初始状态开始正常工作。图 1 AT89C51 单片机2.2 显示器介绍LED(Light Emiting Diode)是发光二极管的缩写。通常所说的 LED 显示器由 7 个发光二极管组成,因此也称为七段 LED 显示器,其排列形状如下图所示。显示器还有一个圆点型发光二极管(图中 dp) ,用于显示小数点。通过其个发光二极管亮暗的不同组合,就可以显示多种数字、字母以及其他符号。其中发光二极管有两种接法:共阳极接法(低电平导通点亮)和共阴极接法(高电平导通点亮),数码表的字形编码表如下。LED
5、显示器的字形代码正好是一个字节。各代码的对应关系如表 1,2 所示,数码管结构如图 1 所示:表 1 数码表的字形编码表代码位 D7 D6 D5 D4 D3 D2 D1 D0显示段 dp g f e d c b a表 2 字符对应编码键码 键值 键码 键值EE 7 BE 1 ED 8 BD 2 EB 9 BB 3 E7 / B7 - DE 4 7E CL DD 5 7D 0 DB 6 7B = D7 * 77 + 图 2 LED 数码管结构2.3 系统工作原理图及实现方法图 3 系统工作原理图单片机选择 AT89C51,数码管选择共阳机八位数码管,键盘 5*4 矩阵键盘,P0 口接上拉电阻,数
6、码管的 A,B,C,D,E,F,G,DP 分别依次与单片机的 P0.0P0.7 管脚相连,P0 口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8 各引脚分别与单片机的 P2.0P2.7 管脚相连,键盘的第 0 行到第 4 行依次与单片机的 P3.3P3.7,键盘的第 0 列到第 3 列依次与单片机的 P1.0P1.3,AT89C51 接 12MHZ 晶振。P3.2 接风鸣器。第三章 软件设计3.1 本系统的主要功能模块设计及其对应流程图3.1.1 显示程序设计(1)显示程序具有通用性,在不进行输入时显示 0,输入时显示输入的数字或运算结果,而且要使 8 个数码管同时显示不同的数
7、字,选用动态显示。将30H-37H 单元设置成数码管显示缓冲区,分别存放数码管各个位要显示的数据,40H 单元作为输入数据的计数单元。因为运算结果超出范围时应报错,使数码 管显示“ERROR”即可,将数码管的 09 的代码和“ERROR”代码存于 LABLE1列表中。当调用显示程序时,显示程序根据 40H 单元的记录的个数决定数码管显示的位数。如果输入错误将在数码管上显示“ERROR”。显示程序的入口:30H-37H,依次存放个位千万位。40H,存放输出的数字位数。出口:数码管,P0 输出字段码 P2 输出位选码。(2)流程图见附录 1:3.1.2 键盘识别程序设计(1)将 P3 口送 0FO
8、H,将 P1 口先送 1 在读 P1 口的数据当 P1 口低四位全一时说明没有键按下,在扫描下一行,如果 P1 口不全一,则有键按下,将 P3 口高四位与 P1 口低四位组合成一个字节,放入 R5 寄存器中,按键去抖,判键是否松开,如松开则将得到的键值判别是哪个键,如果是数字键则首先将其对应的数字(按键代码对应如下表)放入缓冲区 30H,同时将将键值放入结果缓冲区,并调用显示程序,显示键值,在调用扫描键盘程序,如果在有键值输入则将原来的数值在数码管显示缓冲区向高位依次移一位,将刚键入的数值放入最低位,并将原来的数值乘十加上刚键入的数放人结果缓冲区,然后调用显示程序,如果是运算符,则记录运算符标
9、志,加法用 01H 表示,减法用 02H 表示,并将结果缓冲区的数转移到中间结果缓冲区,将结果缓冲区清零,等待输入运算数据,当按等号时,根据记录的运算符标志,判断是那种运算,执行运算将结果依次除 10 取余数放入结果显示缓冲区,调用显示程序。依次循环执行。(2)流程图附录 2:3.1.3 运算程序设计1)运算程序分两个模块,即加、减。分别采用两字节运算,因此运算结果不能超出两字节,否则会溢出。溢出时显示 ERROR。加法程序:入口:R0 被加数低位字节地址指针,R1 加数低位字节地址指针,R3 字节数。出口:R0 和值地位字节地址指针,R3 和值字节数。运算时用 R0,R1 间接寻址,从低字节
10、算起,高字节采用带进位加(ADDC),计算结果回送到 R0 所指的单元中,并将和字节数放入 R3 单元中,如果 R3 大于等于 3 说明溢出。减法程序:入口:R0 被减数低位字节地址指针,R1 减数低位字节地址指针,R3 字节数。出口:R0 和值地位字节地址指针,R3 和值字节数。只是判断溢出是通过CY 位,如果运算后 CY 位有借位,则将 07H 位置 1,否则置 0。2)流程图见附录 33.2 本系统的总体程序设 30H-37H 单元为八个数码管从地位到高位所显示的内容,38H 3FH 单元结果缓冲区。40H 单元输入数据个数,41H 单元加减标志位 ,50H54H 单元行地址。42H 单
11、元放运算符次数标志位。具体源程序代码见附录 4第四章 Proteus 软件仿真1运行显示 0,等待键入数值。2键入被加数 600,显示 600。键入“+”显示原来键入的数值,等待键入加数。键入加数 500,显示 500。键入“”显示结果,1100。3键入清零键“CL” 。4键入被减数 900,显示 900。键入“”显示上次键入的值,等待键入减数键入减数 100,显示 100。键入等号“”显示结果 800。5清零后键入被乘数 600,显示 600。键入乘号“*” ,显示上一次键入的数,等待键入乘数,键入乘数“3”显示 3。键入等号“”显示结果 18000。6清零后键入被除数 1500,显示 15
12、00。键入除号“/”显示上次键入的数,等待键入除数,键入除数 100,显示 100。键入等号“”显示结果 15。7当运算的数值超出范围时将出现的信息。如:输入 70000,后在按“+”时显示 EEROR因为 7000065535 所以报错,显示: “ERROR”。附 录附 录 1 数码管显示流程图数码管显示判断显示是否完毕返回否是初始化 R0 缓冲区指针, R1 位控制,R5 循环控制次数R0=30H,R1=#80H,R5=40H开始附 录 2 键盘扫描流程图 Y开始扫描第一行是否有键按下N扫描第二行是否有键按下N扫描第三行是否有键按下N扫描第四行是否有键按下N扫描第五行是否有键按下N判断键值
13、数字键放入显示缓存区运算符修改标志调用显示程序显示进行运算运算结果放入显示缓存区 附录 3 运算程序流程图开始得到键值判断是否是第一个数 Y将数值直接转移到结果缓冲区,38H 单元开始的四个单元里N数否按过运算符将上次的数值乘 10 加上本次输入放入结果缓冲区(38H 单元开始)NY判断是是哪种运算符标志位记录运算种类如:加法 41H=#01H减法 41H=#02H将第一次键入的数( 在 38H 起始的单元)转移到中间结果缓冲区自 3CH 开始的单元是否键入第二次数值NY等待键入数值将数值放入结果缓冲区38H 其实单元里输入等号将运算结果放入缓冲区并调用显示程序显示结果 附录 4 系统的总体程
14、序设 30H-37H 单元为八个数码管从地位到高位所显示的内容.383FH 结果缓冲区。40H 输入数据个数,41H 加减乘除标志位 5053 行地址。42 单元放运算符次数标志位。ORG 0000H LJMP STARTORG 0030HSTART:MOV 30H,#00H MOV 38H,#00HMOV 39H,#00HMOV 3AH,#00HMOV 3BH,#00HMOV 3CH,#00HMOV 3DH,#00HMOV 3EH,#00HMOV 3FH,#00HMOV 40H,#00HMOV 41H,#00HMOV 42H,#00HMOV 43H,#00H MOV 44H,#00HMOV
15、50H,#0E0H MOV 51H,#0D0HMOV 52H,#0B0HMOV 53H,#70HLOOP3: ACALL DISPLAYMOV R0,#50H MOV R7,#04H LOOP1:MOV A,R0 MOV P3,A MOV A,#0FFH MOV P1,A MOV A,P1 ANL A,#0FHMOV R5,A CJNE A,#0FH,LOOP2 INC R0DJNZ R7,LOOP1 JMP LOOP3 LOOP2:MOV R4,#0A0H TFF:ACALL DELAY1mS DJNZ R4,TFFSS: MOV A,#0FFH MOV P1,A MOV A,P1 ANL A,#0FHCJNE A,#0FH,SS MOV A,42H CJNE A,#01H,NEXT1 MOV 40H,#00HMOV 42H,#00HNEXT1: CJNE R0,#0E0H,ROW2KEY