七段数码管显示
来源:互联网 发布:java park wait 区别 编辑:程序博客网 时间:2024/05/13 15:57
实验一 数码管显示
使用MCS-51汇编语言编写程序,完成以下功能:
1. 使用三个数码管显示十进制数值
2. 每隔0.1秒,该数值自动增一,到999后归零继续
3. 当开关S1按下时,暂停计数;S1松开时,恢复计数
MCS51单片机汇编语言的基本格式比较简单,程序中可以使用通用寄存器或者内存单元进行计算。另外,单片机的程序没有退出到操作系统的概念,一般都是死循环程序。一个简单程序举例如下:
ORG 0000H ;复位起始地址
LJMP START ;中间地址保留给中断向量表
ORG 0040H ;程序实际起始地址
START: ; 实际程序
MOV 40H, #0H
NEXT:
MOV A, 40H
INC A
MOV P0, A ;板上的P0口连接到8个LED,可以监视运行状态
MOV 40H, A
MOV R6, #0FFH
L2:MOV R7, #0FFH
L1:DJNZ R7, L1
DJNZ R2, L2 ;延迟一段时间
LJMP NEXT
END
4.4.1 显示 本开发平台有3个数码管,使用串行方式连接在一起,具体电路参见实验原理。要想输出一个字形码,就需要从高位到低位依次向移位寄存器输出8个比特。移位寄存器的数据线和时钟线分别接到单片机的P4.5和P4.4管脚,可以使用MCS-51里面的位操作指令进行输出。连续输出3个字形,24个bit之后,欲显示的字形将稳定地显示在数码管上,程序可以转而执行其他工作。
七段字形的编码方式需要通过实验获得。这些编码作为程序中的常数,使用DB命令存放。在程序中,需要将数值转换为相应的字形编码,可以使用MOVC指令来完成。
4.4.2 时间
本实验要求的按时间显示数值,直接通过软件延时来实现,也就是若干次空循环来完成,不需要使用单片机内部的定时器等硬件资源。由于在后面的实验中也要使用软件的延时子程序,因此这里预先做准备。
本单片机使用12MHz主频的晶振,结合MCS51的体系结构和指令时序,可以计算每条指令的运行时间,也可以通过Keil环境的调试功能来检查程序片段的执行时间。当然,最后可以通过程序执行的总体运行结果来调整时间。希望同学能够通过这个过程,得出一段能够精确到1ms的子程序,重复调用100次,从而达到定时0.1s的效果。从而完成实验要求2。
4.4.3 开关
在本实验板上设置了两个开关S1和S2,分布接入到8031的P3.6和P3.7,开关按下时,输入0,松开时,输入1。利用这个开关完成实验要求3。
本实验采用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 0000HLJMP STARTORG 0050HSTART:P4 EQU 0C0HP4SW EQU 0BBHCLK EQU P4.4DAT EQU P4.5SW EQU P3.6 MOV DPTR, #TAB MOV P4SW, #70HLP: MOV R6,#0 ;计数 MOV R5,#0 MOV R4,#0LOOP: 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,#8SLP: CLR CLK ;P1.0输出低电平 RLC A ;将存放在A中欲显示的字符码右移一位(最低位存入C) MOV DAT,C SETB CLK ;P1.0输出高电平 DJNZ R0,SLP ;r0减1不为0转到SLP 继续输出字形码 RET ;;;;延时子过程DELAY: MOV R1,#50
DLP: MOV R2,#40 DLP1: MOV R3,#230 DJNZ R3,$ ;r3减1不为0仍在该行再次执行 DJNZ R2,DLP1 ;r2减1不为0转到DLP1 DJNZ R1,DLP ;r1减1不为0转到DLP RET ;返回TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND
74HC164 是高速 CMOS 器件。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然 后并行输出。数据通过两个输入端(A 或 B)之一串行输入;任一输入端可以用作高电平使能
《单片机控制与应用》实验讲义 2013 版‐郭东伟
27 / 64
端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平, 一定不要悬空。 时钟 (CLK) 每次由低变高时,数据右移一位,输入到 Q0,Q0 是两个数据输入端(A 和 B) 的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 主复位(CLR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存 器,强制所有的输出为低电平。
- 七段数码管显示
- 七段数码管显示
- BCD-七段数码管显示译码器
- 七段数码管显示控制 (4个数码管)
- 七段数码管
- 七段数码管显示控件的制作与应用
- Verilog HDL 之 七段数码管扫描显示
- 8段数码管显示
- 模拟七段数码管输出
- 七段数码管的研究
- Python 七段数码管绘制
- PIC单片机-七段数码管的使用
- 用Python绘制七段数码管
- 用Python绘制七段数码管
- VHDL_3641BS四个7段数码管显示实验
- LED和七段数码管限流电阻的大小计算
- 数字万用表(七段数码管)的图像识别(opencv实现)
- 共阳极数码管七段码表(详实)
- 困扰我很久的 字符串常量指针问题
- 【BZOJ】【P3210】【花神的浇花集会】【题解】【曼哈顿距离变形】
- JS中用于精确计算的加减乘除方法
- flex通过AdvancedDataGrid合并单元格,导出为excel表格
- hdoj 2036 改革春风吹满地
- 七段数码管显示
- Apache Maven入门实例以及了解maven的核心概念
- [大规模并行处理器编程实战]读书笔记_Heterogeneous Parallel Programming_CHAPTER_03
- C++:静态成员函数,静态数据成员,成员函数存储方式
- Java Serializable(序列化)的总结
- BZOJ 1057 ZJOI 2007 棋盘制作 DP+悬线法
- leetcode:Remove Nth Node From End of List
- django - 多数据库及分库实现
- 占位