1.实验内容编程
使用MCS-51汇编语言编写程序,完成如下功能:编码
1. 使用三个数码管显示十进制数值调试
2. 每隔0.1秒,该数值自动增一,到999后归零继续资源
3. 当开关S1按下时,暂停计数;S1松开时,恢复计数开发
2.显示同步
本开发平台有3个数码管,使用串行方式链接在一块儿,具体电路参见实验原理。要想输出一个字形码,就须要从高位到低位依次向移位寄存器输出8个比特。移位寄存器的数据线和时钟线分别接到单片机的P4.5和P4.4管脚,可使用MCS-51里面的位操做指令进行输出。连续输出3个字形,24个bit以后,欲显示的字形将稳定地显示在数码管上,程序能够转而执行其余工做。 七段字形的编码方式须要经过实验得到。这些编码做为程序中的常数,使用DB命令存放。在程序中,须要将数值转换为相应的字形编码,可使用MOVC指令来完成。it
3.时间原理
本实验要求的按时间显示数值,直接经过软件延时来实现,也就是若干次空循环来完成,不须要使用单片机内部的定时器等硬件资源。因为在后面的实验中也要使用软件的延时子程序,所以这里预先作准备。 本单片机使用12MHz主频的晶振,结合MCS51的体系结构和指令时序,能够计算每条指令的运行时间,也能够经过Keil环境的调试功能来检查程序片断的执行时间。固然,最后能够经过程序执行的整体运行结果来调整时间。但愿同窗可以经过这个过程,得出一段可以精确到1ms的子程序,重复调用100次,从而达到定时0.1s的效果。从而完成实验要求2。软件
4.开关循环
在本实验板上设置了两个开关S1和S2,分布接入到8031的P3.6和P3.7,开关按下时,输入0,松开时,输入1。利用这个开关完成实验要求3。
5.实验原理
本实验采用3个74HC164级联控制三个数码管的显示,具体实验原理以下图所示。其中使用单片机P4.5做为模拟串口数据,使用P4.4模拟串口时钟,CLR端接高电平。使用上一个74HC164的Q7做为下一个74HC164的输入端。
P4 EQU 0C0H
MOV P4.4, C
SETB P4.4
74HC164是高速CMOS 器件。74HC164是8位边沿触发式移位寄存器,串行输入数据,而后并行输出。数据经过两个输入端(A或B)之一串行输入;任一输入端能够用做高电平使能端,控制另外一输入端的数据输入。两个输入端或者链接在一块儿,或者把不用的输入端接高电平,必定不要悬空。
时钟 (CLK) 每次由低变高时,数据右移一位,输入到Q0,Q0 是两个数据输入端(A和B)的逻辑与,它将上升时钟沿以前保持一个创建时间的长度。
主复位(CLR)输入端上的一个低电平将使其它全部输入端都无效,同时非同步地清除寄存器,强制全部的输出为低电平。
汇编程序:
ORG 0000H ;复位起始地址
LJMP START ;中间地址保留给中断向量表
ORG 0050H ;程序实际起始地址
START:
P4 EQU 0C0H
P4SW EQU 0BBH ;
CLK EQU P4.4 ;时钟线
DAT EQU P4.5 ;数据线
SW EQU P3.6
MOV DPTR,#TAB
MOV P4SW,#70H
LP:
MOV R6,#0 ;计数
MOV R5,#0
MOV R4,#0
LOOP:
MOV A,R6 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW
MOV A,R5 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW
MOV A,R4 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW
LCALL DELAY
PAUSE:
NOP
JNB SW,PAUSE ;按下S1,暂停
INC R6 ;每次计数+1 CJNE R6,#10,LOOP ;进位 INC R5 MOV R6,#0 CJNE R5,#10,LOOP ;比较两个操做数是否相等,若是不相等则转移 INC R4 MOV R5,#0 CJNE R4,#10,LOOP MOV R4,#0 LJMP LOOP; ;跳回循环计数 SHOW: MOV R0,#8 SLP: CLR CLK ;时钟线输出低电平 RLC A ;累加器A,将A中欲显示的字符码右移一位,最低位存入C中 MOV DAT,C SETB CLK ;时钟线高电平 DJNZ R0,SLP ;减一不为0转到,继续输出字符码 RET DELAY: MOV R2,#199 ;外循环 0.1s;[1 + 2 × 250] × 1us = 501us LOOPS:MOV B, #250 ;内循环 [1 + (501 + 2)×199] = 1000.98ms LOOPR:DJNZ B, LOOPR DJNZ R2,LOOPS RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND