实验五 键盘按键与数码管显示(汇编与微机原理)

这篇具有很好参考价值的文章主要介绍了实验五 键盘按键与数码管显示(汇编与微机原理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  键盘按键与数码管显示

实验目的:

熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。

掌握矩阵式键盘的工作原理及识别键盘按键的方法。

掌握8段数码管显示数字或字符的工作原理和它的使用方法。

掌握用8255扫描键盘及用8255刷新数码管显示的方法。

实验:

      在(2行*8列)小键盘上任意按下某个按键,该键的键值将同时显示在8个数码管上。按键松开时显示上一次的按键值。

(2行*8列)小键盘:

     实验箱上2行*8列小键盘上当某个按键被按下时,该键所在行的行线值为0、所在列的列线值也为0。根据这个特点结合上述原理图采用“列扫描法”可以识别出当前被按下的按键。

8个数码管:

     实验箱上8个8段数码管。每个数码管有8个笔段,按逆时针方向依次称为a段、b段、c段、d段、e段、f段、g段、dp段,8个段接收来自外部的一个8位二进制数(D7—D0),并且笔段a 对应数据位D0……..笔段dp 对应数据位D7 ,由于数码管是共阳的,当段码端接收低电平时相应的笔段就会点亮,段码端接收的数据决定了数码管显示的具体内容。(例:要显示数字0,则笔段a、b、c、d、e、f  都必须点亮,笔段g、h不应该点亮,8个段接收的值应该是11000000,数据D0--D7就应该是11000000(0C0H),让段码端接收11000000它就会显示0)。

     数码管的位码控制GND端,当它接收低电平时该数码管会被选中有效工作:即这时只要段码端有有效的数据数码管就会显示数据,当它接收高电平时数码管不工作,这时即使段码端有有效数据数码管也不会显示任何数据。

8255各端口的分工:

      8255的A口工作在方式0输出状态控制数码管的段码;B端口工作在方式0输出状态控制数码管的位码,并且同时控制键盘列线的扫描;C端口工作在方式0输入状态,其中的PC0、PC1控制键盘的第一、第二行行值的读入。文章来源地址https://www.toymoban.com/news/detail-756388.html

实验代码:

.MODEL	TINY		
PA_8255		EQU	0270H           
PB_8255		EQU	0271H
PC_8255		EQU	0272H
CTRL_8255	EQU	0273H
.STACK	100
.DATA    
buffer          DB      ?               
SEG_TAB		DB	0C0H, 0F9H,0A4H,0B0H, 99H, 92H, 82H,0F8H    
		DB	080H, 90H, 88H, 83H,  0C6H,0A1H,86H,8EH,0FFH 

.CODE
START:  	MOV     AX,@DATA
        	MOV     DS,AX
        	MOV	ES,AX
        	NOP		
		MOV	DX,CTRL_8255	;8255初始化
		MOV	AL,89H
		OUT	DX,AL		
        	LEA	SI,buffer
		MOV	AL,10H          ;默认数码管不显示
		MOV     [SI],AL
		
		CALL	DIR             ;调用显示子程序

MAIN2:		LEA	DI,buffer       
		CALL	Getkey          ;得到按键在SEG_TAB中的值放入AL
		STOSB                   ;将AL赋值给DI指向的地址
		CALL	DIR            		
		JMP	MAIN2

DIR		PROC	NEAR            
		PUSH	AX
		PUSH	BX
		PUSH	DX
		LEA	SI,buffer	;置显示缓冲器初值	
		MOV	AL,[SI]
		LEA	BX,SEG_TAB				
		XLAT			;查表取显示数据->AL
		MOV	DX,PA_8255
		OUT	DX,AL		;AL段数据->8255 PA口		
		MOV     DX,PB_8255
		MOV     AL,0		;位码控制GND端低电平有效, 显示8位数据管
		OUT     DX,AL           
		CALL	DL1ms				
		POP	DX
		POP	BX
		POP	AX
		RET
DIR		ENDP

DL1ms		PROC	NEAR		
		PUSH	CX
		MOV	CX,500
		LOOP	$
		POP	CX
		RET
DL1ms		ENDP

GETKEY		PROC	NEAR	       
		PUSH	BX
		PUSH	DX
LK:		CALL	AllKey		;调用判有无闭合键子程序		
		JNE	LK1             

		CALL	DIR		;调用显示子程序
		JMP	LK             
               ;补充程序完成列扫描,得到按键在SEG_TAB中的值放入AL
LK1:		MOV BL, 0FEH	;0FEH-->BL 第0列开始扫描,用BL保存列线扫描口数值,从PB0开始
		MOV BH, 0	;0-->BH   用BH保存列线值,从第0列开始
LK2:		MOV DX, PB_8255	;写B口位码控制端  
		MOV AL, BL	;
		OUT DX, AL	;将BL写入B口列线控制端

		MOV DX, PC_8255	;读C口
		IN  AL, DX	;
		TEST AL, 1	;PC0不等于0转向LONE继续判断PC1
                JNZ  LONE	;
		MOV AL, 0	;0行有键闭合,0-〉AL  PC0等于0表示0行有键闭合,用BH存放按键值
		JMP	LKP             
			
LONE:		TEST AL, 2          
		JNZ NEXT	;PC1不等于0则转向NEXT列计算器+1
		MOV AL, 08	;1行有键闭合,08H-->AL	        

LKP:		ADD BH, AL	;用BH保存键值

LK3:		CALL	AllKey         
		JNE	LK3     ;判断释放否

		MOV AL, BH	;BH键号->AL		
		JMP EXIT

NEXT:		INC BH		;列计数器加1		
		TEST BL, 80H	;
		JZ EXIT		;判是否已扫到最后一列则转向KEND

		ROL BL, 1	;将BL循环左移一位
		JMP	LK2
EXIT:		POP	DX
		POP	BX
		RET                     
GETKEY		ENDP


AllKey		PROC	NEAR            ;判断键盘是否有按键闭合        
		MOV	DX,PB_8255                                                
		XOR	AL,AL                                      
		OUT	DX,AL		;全"0"->扫描口,列线控制端低电平有效
		MOV     DX,PC_8255      ;读C口数据                                     
		IN	AL,DX		;读键状态		 
		AND	AL,03H		;取低二位	
		CMP     AL,3            ;取C口低二位和00000011b比较
		RET
AllKey		ENDP
				
END	START

到了这里,关于实验五 键盘按键与数码管显示(汇编与微机原理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验八 键盘扫描及数码管显示实验

    1)学习了解键盘扫描的基本原理。 2)掌握通过并行接口芯片对键盘进行扫描并在多位数码管显示数字的方法。 编写程序,实现如下功能: 初始时数码管无显示; 第一次按下键盘时,在 最右侧数码管显示对应的十六进制数字 ; 以后每次按下键盘,则将 当前显示的数字全部

    2024年02月09日
    浏览(31)
  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(30)
  • 51单片机的串口实验之数码管显示与按键实验(8位数字任意传输)

    目标效果: 1、电脑发送任意小于=8位数字( SUBF只有8位最大只能发送255,但是可以通过数组进行临时存储来实现传输多字节 )数字,在数码管上显示对应的数字且同时满足高位是0可以不显示  2、矩阵按键按下后,电脑接收所按下的按钮 实验器材: 1、普中51单片机。2、ST

    2024年02月02日
    浏览(38)
  • C51单片机-按下K0至K15,显示按键标号(4x4矩阵键盘电路,1个数码管)

    keil uVision4界面: proteus仿真界面:

    2024年02月04日
    浏览(33)
  • 【51单片机】矩阵按键实现数码管显示

    闲的没事看一看玩一玩········· 矩阵按键 数码管是一种导体发光器件,其基本单元是发光二极管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管 共阴极数码管是指将所有发光二极管的阴极接到一起形成共阴极的数码管,共阴极的数码管在应用时将公共

    2024年02月02日
    浏览(47)
  • 矩阵键盘控制数码管显示数字

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 编程实现功能要求:开机黑屏;按下任意按键后,数码管上显示该键的键号(0~F);若没有新键按下,维持前次按键结果。 代码如下(示例): 使用 proteus8.13 本次实验不是特别难,我所做的也只是一种方法而

    2024年02月13日
    浏览(25)
  • 51单片机按键控制数码管显示0-9

    实验题目:使用51单片机设计两个按键控制数码管显示0-9,当K1按下减1,当K2按下加1. 理解程序可参考我的另外两个文章; 51单片机数码管显示0-9_学习笔记吧的博客-CSDN博客 51单片机独立按键控制合集_学习笔记吧的博客-CSDN博客 两个文章一结合就是一个新的产物,所以51单片机

    2024年02月11日
    浏览(39)
  • VHDL矩阵键盘扫描数码管显示

    1.打开Quarteus,直接点击New Project izard. 2.选择存放路径和工程名后一直Next,直到出现芯片选择页面(这里需要特别注意,这个软件不支持中文,所以工程存放路径一定不能含有中文,否则会报错) 3.选择对应的芯片,我这里选择EP4CE40F23C8,然后Next,最后Finish 4.完成工程的创建

    2023年04月24日
    浏览(55)
  • 51单片机矩阵键盘——数码管显示

    当我们熟悉了数码管的位选与段选,并了解的矩阵键盘的扫描之后就可以编写程序了。 按下矩阵键盘S1并松开,数码管第一位(LED8)显示0;按下矩阵键盘S2并松开,数码管第一位显示1;...按下矩阵键盘S16并松开,数码管第一位显示F; 矩阵键盘扫描(输入扫描)     原理:

    2024年02月11日
    浏览(42)
  • 【51单片机】EEPROM-IIC实验(按键控制数码管)

    目录   🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析   I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根 数据线SDA 用于收发数据,一根 时钟线SCL 用于通信

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包