单片机 按键扫描 输入学号 数码管显示 汇编程序
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
单片机键盘扫描及数码管显示

单片机键盘扫描及数码管显示 2018-08-19 09:32***********************************。
MCS-51单片机汇编程序语言基本模型************************************。
LED_D EQU 6 ORG 0000H 。
显示模块数LJMP START 。
复位后程序计数器 PC=0000H b5E2RGbCAPORG 0003H LJMP MY INTO 。
外部中断0入口ORG 000BH LJMP MY T0 。
定时器中断0入口ORG 0013H LJMP MY INT1 。
外部中断1入口ORG 001BH LJMP MY T1 。
定时器中断1入口ORG 0023H LJMP MY TX 。
串行口中断入口ORG 002BH LJMP MY T2 。
定时器中断 2 入口 <8032/8052 ) plEanqFDPwORG 0030HSTART: 。
程序开始。
设置堆栈指针。
EA - ET2 ES ET1 EX1 ET0 EX0MOV SP,#50H。
MOV IE,#10000001BSETB EA。
总中断允许SETB EX0。
外部中断0允许 MOV P1,#0FH 。
键盘中断条件MOV 30H,#0MOV 31H,#16。
16=空值 MOV 32H,#16 MOV 33H,#16 MOV 34H,#16 MOV 35H,#16 LCALL LED_OUTLCALL DELAY。
延时子程序MAIN:Icall keyIcall led_outLCALL DELAY 。
延时子程序LJMP MAIN 。
程序结束。
---------------------------------------------------------- MY_INT0: 。
外部中断0服务子程序LCALL KEY DXDiTa9E3dLJMP GO_TOINT0_END:LCALL LED_OUT。
单片机数码管动态扫描显示课件

在选择数码管时,需要根据实际需求选择合适的型号和规格,如显示位数、尺寸、亮度等。
为了控制数码管显示不同的数字或字母,需要将相应的二进制编码信号输入到数码管的各个LED段上。
编码方式
常见的数码管编码方式有BCD码、2421码、5421码等,不同的编码方式对应不同的编码表。
编码表
03
CHAPTER
总结词
数码管的亮度过高或过低都会影响显示的清晰度。如果亮度过高,会导致显示过于刺眼;如果亮度过低,则会导致显示不清晰。
详细描述
根据实际情况调整数码管的亮度,使其达到合适的显示效果。
解决方案
总结词
单片机资源占用过多可能会导致系统运行缓慢或崩溃。
THANKS
感谢您的观看。
开发环境
数据处理
将需要显示的数据(如数字、字母等)转换为数码管显示的编码,常用的编码方式有7段数码管编码和点阵编码。
数据传输
通过单片机的I/O口将处理后的数据显示到数码管上,根据数码管的连接方式和单片机型号选择合适的I/O口和传输方式。
05
CHAPTER
实际应用案例分析
VS
该设计通过单片机控制LCD显示屏,实现文字、图像等多种信息的显示。
单片机具有体积小、重量轻、价格低廉、可靠性高等优点,因此在自动化控制、智能仪表、家用电器等领域得到广泛应用。
特点
定义
单片机可以用于各种工业控制系统中,如自动化生产线、智能仪表等。
工业控制
智能家居
通信领域
单片机可以用于智能家居系统中,实现家电的远程控制、智能调节等功能。
单片机可以用于通信设备中,如调制解调器、路由器等。
单片机数码管动态扫描显示课件
目录
单片机基础知识数码管显示原理单片机数码管动态扫描显示原理单片机数码管动态扫描显示程序编写实际应用案例分析常见问题与解决方案
数码管显示和键盘扫描实验资料

数码管显示和键盘扫描实验资料实验三LED数码管动态显示及4 X4 键盘控制实验一、实验目的1.巩固多位数码管动态显示方法。
2.掌握行扫描法矩阵式按键的处理方法。
3.熟练应用AT89S52学习板实验装置,进一步掌握keil C51的使用方法。
二、实验内容使用AT89S52学习板上的4位LED数码管和4 X 4矩阵键盘阵列做多位数码管动态显示及行扫描法键盘处理功能实验。
用P0口做数据输出,利用P1做锁存器74HC573的锁存允许控制,编写程序使4位LED数码管按照动态显示方式显示一定的数字;按照行扫描法编写程序对4 X 4矩阵键盘阵列进行定期扫描,计算键值并在数码管上显示。
三、实验系统组成及工作原理1.4位LED数码管和4 X 4矩阵键盘阵列电路原理图2.多位数码管动态显示方式说明4位共阴极LED动态显示3456数字的工作过程首先由I/O口(1)送出数字3的段选码4FH即数据01001111到4个LED共同的段选线上,接着由I/O口(2)送出位选码××××0111到位选线上,其中数据的高4位为无效的×,唯有送入左边第一个LED的COM端D3为低电平“0”,因此只有该LED的发光管因阳极接受到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点亮;显示一定时间后,再由I/O口(1)送出数字4的段选码66H即01100110到段选线上,接着由I/O 口(2)送出点亮左边第二个LED的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就是显示出数字4,而其余3位LED不亮;如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个LED,使4个LED从左至右依次显示3、4、5、6。
单片机数码管程序编写 -回复

单片机数码管程序编写-回复什么是单片机数码管?单片机数码管是一种显示设备,用于在单片机系统中显示数字、字符等信息。
它由多个发光二极管(LED)组成,每个发光二极管可以独立地发光。
常见的数码管有7段共阳数码管和8段共阴数码管两种。
7段共阳数码管是指有7个发光二极管组成每个数字可显示0-9。
而8段共阴数码管则多了一个额外的发光二极管,可以用于显示字母和特殊字符。
单片机数码管也可以按照位数进行分类,如4位数码管、8位数码管等。
不同位数的数码管用于显示不同范围的数字。
编写单片机数码管程序的基本步骤如下:1. 硬件准备:a. 连接数码管:将数码管与单片机进行连接。
具体连接方法取决于使用的数码管类型和单片机型号。
b. 设置数码管电源:确保数码管接收到足够的电源供应。
这可以通过连接适当的电源电压和接地线来完成。
2. 确定显示内容:a. 决定要在数码管上显示的内容,如数字、字母、特殊符号等。
b. 根据需要,确定要显示的位数。
3. 编写数码管驱动程序:a. 引入相关的头文件,包括单片机与数码管通信所需的寄存器定义和相关函数。
b. 定义变量,用于存储要显示的内容。
c. 编写初始化函数,用于初始化数码管的相关设置,如设置数码管为输出模式、选择数码管类型等。
d. 编写显示函数,用于在数码管上显示内容。
这包括将要显示的内容转换为对应的数码管码值,并通过设置相应的端口输出来控制数码管的亮灭。
e. 如果需要实现动态显示,可以使用定时器中断的方式来刷新显示内容。
4. 编写主程序:a. 调用初始化函数,初始化数码管的相关设置。
b. 在一个循环中,调用显示函数,以指定的时间间隔刷新显示内容。
5. 调试和测试:a. 将编写的程序下载到单片机上。
b. 检查连接是否正确,并观察数码管是否显示出预期的内容。
c. 根据实际需求进行调试和测试,修正可能存在的问题。
6. 优化和扩展:a. 对程序进行优化,尽量减少资源占用和提高性能。
b. 如果需要,可以扩展程序功能,增加显示内容的种类和方式。
数码管显示和键盘扫描实验资料

实验三LED数码管动态显示及4 X4 键盘控制实验一、实验目的1.巩固多位数码管动态显示方法。
2.掌握行扫描法矩阵式按键的处理方法。
3.熟练应用AT89S52学习板实验装置,进一步掌握keil C51的使用方法。
二、实验内容使用AT89S52学习板上的4位LED数码管和4 X 4矩阵键盘阵列做多位数码管动态显示及行扫描法键盘处理功能实验。
用P0口做数据输出,利用P1做锁存器74HC573的锁存允许控制,编写程序使4位LED数码管按照动态显示方式显示一定的数字;按照行扫描法编写程序对4 X 4矩阵键盘阵列进行定期扫描,计算键值并在数码管上显示。
三、实验系统组成及工作原理1.4位LED数码管和4 X 4矩阵键盘阵列电路原理图2.多位数码管动态显示方式a b c d e f g dp com a b c d e f g dpcoma b c d e f g dpcoma b c d e f g dpcomD0IO(2)IO(1)说明4位共阴极LED动态显示3456数字的工作过程首先由I/O口(1)送出数字3的段选码4FH即数据01001111到4个LED共同的段选线上,接着由I/O口(2)送出位选码××××0111到位选线上,其中数据的高4位为无效的×,唯有送入左边第一个LED的COM端D3为低电平“0”,因此只有该LED的发光管因阳极接受到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点亮;显示一定时间后,再由I/O口(1)送出数字4的段选码66H即01100110到段选线上,接着由I/O 口(2)送出点亮左边第二个LED的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就是显示出数字4,而其余3位LED不亮;如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个LED,使4个LED从左至右依次显示3、4、5、6。
按键输入和LED数码管扫描显示实验

按键输入和LED数码管扫描显示实验设计内容:给8个按键键盘的每个键定义一个功能,从左到右按键一次按下时,分别显示数字1-8,当有两个及以上的按键按下时,显示数字9。
LCD初始显示个人学号,当有按键按下时,最后一位显示对应的数字。
实验程序:#include <reg51.h>sbit key=P0^6; //键盘公共线,见原理图sbit ls1=P0^2; //千位公共极sbit ls2=P0^3; //百位公共极sbit ls3=P0^4; //十位公共极sbit ls4=P0^5; //个位公共极unsigned char keyval; //读取的键值#define Dat P1 //数据输出端char a;char b[4]={0,3,3,0}; //初始值为学号后四位unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时----------------------------Delay(unsigned int t){ while(t--); }//显示----------------------------void Display(unsigned char mun){ unsigned char j;for(j=0;j<50;j++){ Dat=a;Dat=tab[b[0]]; //把得到7段显示码数据送P1端口ls1=0; //点亮千位Delay(100); //显示一会ls1=1; //关闭,显示下一位Dat=tab[b[1]];ls2=0; //点亮百位Delay(100);ls2=1;Dat=tab[b[2]];ls3=0; //点亮十位Delay(100);ls3=1; //个位Dat=tab[b[3]];ls4=0;Delay(100);ls4=1;}}Dat=0xff; //P1恢复为0xff}//--键盘扫描程序-------------------------------------- Scankey(){ unsigned char i;key=0; //拉低键盘公共线if(Dat!=0xff) //有键按下{ Delay(1000); //消抖动if(Dat!=0xff) //有键按下{ i=~Dat;a=Dat; //读取键盘状态,switch(i){ case 0x01: keyval=0x01;break; //K1case 0x02: keyval=0x02;break; //K2case 0x04: keyval=0x03;break; //K3case 0x08: keyval=0x04;break; //K4case 0x10: keyval=0x05;break; //K5case 0x20: keyval=0x06;break; //K6case 0x40: keyval=0x07;break; //K7case 0x80: keyval=0x08;break; //K8default: keyval=0x09;break; } //其它双键按下不处理,均为9 b[3]=b[2];b[2]=b[1];b[1]=b[0];b[0]=keyval;while(Dat!=0xff){key=1; //暂时关闭键盘,不干扰显示Display(keyval); //等待按键抬起key=0; //开启键盘检测}}}key=1; //释放键盘公共线}//--主程序--------------------------------------------------------- main(){while(1){ Display(keyval); //显示Scankey(); //键盘扫描}}。
51单片机键盘数码管显示(带程序)

期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。
它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。
A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
按键扫描显示
STC89C52|
;==================================================== ====
;微机原理实验课【实验一】
;按键扫描显示学号
;==================================================== ====
ORG 0000H
AJMP START ;跳过中断入口地址
ORG 0100H
START: MOV 30H,#16;清除显存
MOV 31H,#16
MOV 32H,#16
MOV 33H,#16
MOV 34H,#16
MOV 35H,#16
MOV 36H,#16
MOV 37H,#16
MOV DPTR,#TAB ;段选码表首地址CLR P1.4
AJMP MAIN
MAIN:
CALL DISPLAY ;调用显示函数CALL KEY ;按键扫描函数AJMP MAIN ;循环回去
KEY: MOV P2,#0FH
MOV R5,P2
CJNE R5,#0FH,KEYSCAN
RET
KEYSCAN:
MOV A,R5
MOV P2,#0F0H
MOV R5,P2
ORL A,R5
MOV R6,A
KEY0: CJNE R6,#0EEH,KEY1 MOV R7,#16
AJMP KEYOUT
KEY1: CJNE R6,#0EDH,KEY2 MOV R7,#7
AJMP KEYOUT
KEY2: CJNE R6,#0EBH,KEY3 MOV R7,#4
AJMP KEYOUT
KEY3: CJNE R6,#0E7H,KEY4 MOV R7,#1H
AJMP KEYOUT
KEY4: CJNE R6,#0DEH,KEY5 MOV R7,#0
AJMP KEYOUT
KEY5: CJNE R6,#0DDH,KEY6 MOV R7,#8
AJMP KEYOUT
KEY6: CJNE R6,#0DBH,KEY7 MOV R7,#5H
AJMP KEYOUT
KEY7: CJNE R6,#0D7H,KEY8 MOV R7,#2H
AJMP KEYOUT
KEY8: CJNE R6,#0BEH,KEY9 MOV R7,#16
AJMP KEYOUT
KEY9: CJNE R6,#0BDH,KEYA MOV R7,#9
AJMP KEYOUT
KEYA: CJNE R6,#0BBH,KEYB MOV R7,#6H
AJMP KEYOUT
KEYB: CJNE R6,#0B7H,KEYC MOV R7,#3H
AJMP KEYOUT
KEYC: CJNE R6,#07EH,KEYD MOV R7,#0DH
AJMP KEYOUT
KEYD: CJNE R6,#07DH,KEYE MOV R7,#0CH
AJMP KEYOUT
KEYE: CJNE R6,#07BH,KEYF MOV R7,#0BH
AJMP KEYOUT
KEYF: CJNE R6,#077H,KEYOUT
MOV R7,#0AH
KEYOUT: MOV 37H,36H
MOV 36H,35H
MOV 35H,34H
MOV 34H,33H
MOV 33H,32H
MOV 32H,31H
MOV 31H,30H
MOV 30H,R7
AJMP KEYOUT1
KEYOUT1:
CALL DISPLAY
MOV P2,#0FH
MOV R5,P2
CJNE R5,#0FH,KEYOUT1 RET
DISPLAY:
MOV R0,#30H ;数据缓冲区首址
MOV R1,#01H ;初始位选码MOV R2,#8 ;数码管个数LOOP:
MOV A,@R0 ;取待显示数据MOVC A,@A+DPTR ;查段选码
SETB P1.3 ;换锁存器
CLR P1.2
MOV P0,#0FFH
MOV P0,A ;送出段选码
SETB P1.2 ;换锁存器
CLR P1.3
MOV P0,R1 ;送出位选码
CLR P1.2 ;关锁存器
CLR P1.3
LCALL DELAY
INC R0 ;修改缓冲取地址指针
MOV A,R1
RL A
MOV R1,A
DJNZ R2,LOOP
RET
;
DELAY: MOV R4,#13
K1: MOV R3,#100
DJNZ R3,$
DJNZ R4,K1
RET
ORG 0400H
/*********************共阳数码管码表********************/
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H
DB 82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH /*TAB:
DB 3fH,06H,5bH,4fH,66H,6dH
DB 7dH,07H,7fH,6fH,77H,7CH,39H,5EH,79H,71H,00H*/ END。