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指令来完成。

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
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

转载于:https://www.cnblogs.com/wang-qiuling/p/4467085.html

实验三 七段数码显示器相关推荐

  1. 数字图像处理 使用opencv+python识别七段数码显示器的数字

    一.什么是七段数码显示器 七段LCD数码显示器有很多叫法:段码液晶屏.段式液晶屏.黑白笔段屏.段码LCD液晶屏.段式显示器.TN液晶屏.段码液晶显示器.段码屏幕.笔段式液晶屏.段码液晶显示屏.段式LC ...

  2. led数码显示控制plc实验_实验三 LED数码显示控制 PLC实验报告

    广州大学学生实验报告 开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 ...

  3. led数码显示控制plc实验_实验三led数码显示控制plc实验报告

    开课学院及实验室:工程北 529 2015 年 5 月 28 日 学院 机械与电气 工程 年级. 专 业.班 姓名 学号 实验课程名称 电气控制与可编程控制器 成绩 实验项目名称 实验三 LED 数码 ...

  4. led数码显示控制plc实验_实验三LED数码显示控制PLC实验报告.doc

    实验三LED数码显示控制PLC实验报告 广州大学学生实验报告 开课学院及实验室:工程北529 2015年 5 月28 日 学院机械与电气工程年级.专业.班姓名学号实验课程名称 电气控制与可编程控制器成 ...

  5. 单片机实验四-七段数码管及键盘控制

    动态显示0-15 ORG 0100HLCALL INIT START:MOV P1,#00H ;控制哪个7段数码管显示MOV R0,#16MOV R1,#30H;LOOP0:MOV P2,@R1;IN ...

  6. 使用opencv+python识别七段数码显示器的数字识别

    # 导入必要的包 from imutils.perspective import four_point_transform from imutils import contours import im ...

  7. 7段并行数码管显示实验C语言,七段数码管显示十进制数字 (15)

    实验报告 实验题目 设有10个开关,编号分别为0,1,--,9. 设计电路实现某开关闭合时对应显示相应的十进制数字.要求:(1)写出设计说明,(2)用 Proteus或Multisim仿真. 实验方案 ...

  8. c语言实现7段数码管显示,七段数码管显示实验.doc

    七段数码管显示实验 单 片 机 实 验 报 告 实验九 七段数码管显示实验 实验目的 学习七段数码管的工作原理: 学习数码管与8051单片机的接口方法: 掌握动态扫描显示技术. 实验原理 如图4.9- ...

  9. 三位数码管实验报告-数字系统实验

    这里写自定义目录标题 数字系统实验-三位数码管实验报告## 1. 日志(2020.03.26日完成) 2. 报告 3.实验总结 数字系统实验-三位数码管实验报告## 1. 日志(2020.03.26日 ...

最新文章

  1. IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...
  2. .NET4.0并行计算技术基础(8)
  3. 曾经遭遇的MyEclipse的bug
  4. C++ 编译器多态与运行时多态
  5. 9Linux服务器编程之:mkdir()函数和rmdir()函数
  6. leetcode 542. 01 Matrix | 542. 01 矩阵(图解,广度优先搜索)
  7. c语言中将函数指针作为形参_在C中将有效指针作为NULL指针
  8. 设置api密钥_我应该将我的API密钥设置多长时间?
  9. 京东方OLED屏幕无缘iPhone 12首批供货,因测试未通过
  10. dijkstra+priority_queue+vector
  11. 【福利派送】准备了八份小礼物,祝你七夕快乐!
  12. 每日算法系列【LeetCode 927】三等分
  13. 2006年最值得期待的十种技术
  14. python:使用strip()去掉首尾空格
  15. 短期通过PMP考试?
  16. 如何查看IOS系统APP的包名
  17. 日期转换和日历的使用方法
  18. Android日历控件
  19. win10下sticky notes(便笺)数据存放地址、数据备份及恢复
  20. win10天干五合工具

热门文章

  1. 面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理
  2. html代码圣诞树位置代码,html 圣诞树(示例代码)
  3. 安卓手机游戏《英雄迷宫冒险》存档修改
  4. qt mingw32编译项目报错:Nothing to be done for 'first'.
  5. 3 为什么考研?该做那些准备 --绝密,程序员大厂面试求职大揭秘!
  6. Ceph 学习——OSD读写流程与源码分析(一)
  7. cin.tie() 输入加速器
  8. volley与java版本_如何使用Volley在Android中实现登录?
  9. C++:最小化多个变量的标量函数 使用Nelder-Mead算法(附完整源码)
  10. 手势操作TouchAction