单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)

上传人:mg****85 文档编号:43281631 上传时间:2018-06-05 格式:PDF 页数:11 大小:167.66KB
返回 下载 相关 举报
单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)_第1页
第1页 / 共11页
单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)_第2页
第2页 / 共11页
单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)_第3页
第3页 / 共11页
单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)_第4页
第4页 / 共11页
单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)》由会员分享,可在线阅读,更多相关《单片机汇编程序(秒表,数码管显示,矩阵键盘,双工串行通信)(舒浪)(11页珍藏版)》请在金锄头文库上搜索。

1、 D:51单片机编程单片机实验报告程序disp1.asm;一位数码管显示 将P1口8个引脚作为输入端,设置8个显示数字07,;8个引脚分别通过一个开关接地,另外8个引脚通过一个与非门接到引;脚P32作为外中断触发信号,P0口接一个数码管显示对应数值 ;- ORG 0000H SJMP STARTORG 0030H LJMPTIMER0 ;外部中断入口 ;-;主函数 调用外部中断初始化 ;- START: CALLINIT ;开启外中断 MOV R1,#00H ;用来存放P1口第几个键按下 MOVP1,#0FFH ;P1口初始化SJMP$ ;等待中断 ;-;中断程序,判断是否有键按下 ;- TI

2、MER0: ;SETBIE0 PUSHACC ;压栈 PUSH00H PUSH01H PUSHPSWMOVA,P1 ;判断P1口值是否改变,若改变,则有键按下 CJNEA,#0FFH,GET_KEYPOPACC ;若键盘松开,则推出中断 RETI ;-;获取按键值 ;- GET_KEY: MOV A,P1 CPL A;取反后只留下按键处的值为1 MOVR0,A LOOP: ;将P1口的值循环右移,和1相与,当 ANL A,#01H ;值为1时,获取到按键值 JNZ DISP MOV A,R0 RRA MOVR0,A;暂存移位后的值 INC R1 ;R1的值即为第几个键按下 LJMP LOOP

3、;-;显示函数 ;- DISP: MOV DPTR,#TAB ;将数据指针指定到显示码首地址MOVA,R1 MOVCA,A+DPTR;查显示码并送P0口显示 MOVP0,APOPACC ;还原现场 POP00H POP01H POPPSWRETI ;-;外中断初始化 ;- INIT:Page: 1D:51单片机编程单片机实验报告程序disp1.asmSETBEX0 ;开启外中断 SETBEA SETBIT0 RET ;-;显示码 ;- TAB:DB 40H,79H,24H,30HDB 19H,12H,02H,78HDB 00H,18H,08H,03HDB 46H,21H,06H,0EHENDP

4、age: 2D:51单片机编程单片机实验报告程序disp4.asm;四位数码管显示 P1口前四个引脚接数码管位选,P2口接数码管段选,;程序启动后,通过定时器循环点亮各数码管,并送相应显示值。通过快速;单个点亮各个数码管,达到视觉暂留极限,来得到连续显示效果 ;- postEQU 30H ;等价替换 disp_dataEQU 31HORG0000H LJMPstartORG000BH LJMPtimer0 ;设置中断入口 ;-;主程序,开启定时器中断,赋值 ;- ORG0030H start: CALLinit ;调用中断初始化 MOV31H,#1 ;给表disp_data赋值 MOV32H,

5、#2 MOV33H,#3 MOV34H,#4 loop:LJMPloop ;等待中断发生 ;-;对四位数码管进行显示 ;- dispaly: PUSHACC ;压栈 PUSHDPH PUSHDPL PUSH00H PUSHPSWMOVA,post ;post与03h相与确定数码管位选 ANLA,#03H MOVpost,A ;确定位选后,将值传回给postMOVDPTR,#bit_sele ;数据指针指向位选码表头 MOVCA,A+DPTR ;查出位选编码并通过A传给P1口 MOVP1,A Next: MOVA,post ;利用位选参数查表disp_data确定该位数码管显示的值 ADDA,#

6、disp_data MOVR0,A MOVA,R0 MOVDPTR,#disp_code ;查出该值对应的显示码送到P2口 MOVCA,A+DPTR MOVP2,A INCpost ;post自加1,进行下一位数码管显示POPPSW ;出栈 POP00H POPDPL POPDPH POPACC RET ;-;开启定时中断,赋初值 ;- init: ;中断初始化,选择方式1 MOVTMOD,#01H MOVTH0,#200 SETBTR0Page: 1D:51单片机编程单片机实验报告程序disp4.asmSETBET0 SETBEA RET ;-;中断程序(调用显示,后重置定时器初值) ;-

7、timer0: CALLdisplay ;中断程序,调用display,后给定时器高八位赋初值 MOVTH0,#200 RETI ;-;显示数据编码 ;- disp_code: DB 40H,79H,24H,30HDB 19H,12H,02H,78HDB 00H,18H,08H,03HDB 46H,21H,06H,0EH ;-;位选编码 ;- bit_sele: DB 01H,02H,04H,08HENDPage: 2D:51单片机编程单片机实验报告程序stop_watch.asm;秒表 P10引脚作为启动停止控制端,P11引脚作为复位端,数码管接P0口;只用到一个数码管,显示10s以内的时间

8、,定时器选择工作方式2,计时更准确 ;- US200 EQU20H ;等价替换 MS20EQU21H SECONDEQU22HORG0000H JMPstartORG 000BH JMPtimer0 ;中断跳转程序;-;主程序,开启定时中断,初始化时间参数 ;- ORG0030H start: ;设置堆栈指针,初始化定时中断,选择工作方式2 MOVSP,#30H MOVTMOD,#02H MOVTH0,#56 MOVTL0,#56 ;SETBTR0 SETBET0 SETBEA MOVSECOND,#0 ;初始化分秒参数 MOVUS200,#0 MOVMS20,#0 ;-;秒表启动,停止及初始

9、化 ;- loop: JBP1.0,next0 ;读P1.0口电平,若按下,则开始计时再次按下则停止 CPLTR0 JMPnext1 next0: JBP1.1,next1 ;读P1.1口电平,若按下则清0 MOVSECOND,#0 MOVUS200,#0 MOVMS20,#0 next1: JMPloop;-;中断程序,负责计时 ;- timer0: ;中断计时程序 PUSHACC ;压栈 PUSHPSWINCUS200 ;计100下(200us) MOVA,US200 CJNEA,#100,etimer0 MOVUS200,#0 INCMS20 ;计20ms MOVA,MS20 CJNEA,#50,etimer0 MOVMS20,#0 INCSEC

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号