汇编语言时钟程序
- 格式:doc
- 大小:35.00 KB
- 文档页数:5
题目名称:秒表电路设计姓名:班级:学号:指导教师:日期:2016年7月13日《单片机原理及接口技术课程设计》教学大纲课程代码:课程名称:单片机原理及接口技术课程设计周数: 2 学分:1.0学分一、课程设计的性质、任务与目的单片机原理及接口技术课程设计是在学生学习完理论课和实验课的基础上开设的,通过完成一个涉及MCS-51或其他系列单片机多种资源应用并具有综合功能的设计与编程应用,使学生能够将课堂上学到的理论知识与实际应用结合起来,同时在软件编程、仿真调试及相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的设计开发工作打下一定的基础。
本课程设计的主要目的如下:1、增进对单片机的感性认识,加深对单片机理论知识的理解,掌握单片机内部功能模块(如定时/计数器、中断、片内外存贮器、I/O口、串行口等)的应用;2、掌握单片机应用系统的软硬件设计过程及实现方法,为以后设计和实现单片机应用系统打下良好基础;3、提高综合应用所学理论知识独立分析和解决实际问题的能力。
二、本课程设计的基本理论本课程设计的基本理论是单片机原理及接口技术的基本理论,主要包括单片机的硬件结构原理、指令系统、汇编语言、中断系统、定时/计数器、串行接口、I/O接口等。
在学习掌握单片机原理及接口技术课程的前提下,利用实验室提供的单片机实验条件或基于仿真软件,采用汇编语言或C51编程,设计实现一个具体的单片机应用系统项目,熟悉单片机系统设计开发的完整过程。
三、课程设计的方式与基本要求课程设计的方式:每个班级学生按2~3人分为一组,以组为单位进行课程设计(也可一人独立进行),课程设计的题目从教师给定的题目中选取,也可以是指导教师审核通过的学生自选题目。
基本要求:每组选定题目后,按题目要求,首先进行方案论证,通过查阅资料、集体讨论,确定设计方案;然后进行具体的硬件和软件设计;完成设计后,进行硬件/软件调试;最后撰写课程设计报告。
单片机延时500ms程序汇编一、概述在单片机编程中,延时操作是非常常见且重要的一部分。
延时可以使程序在执行过程中暂停一段时间,以确保输入输出设备能够正常工作,或者是为了保护其他设备。
本文将介绍如何使用汇编语言编写单片机延时500ms的程序。
二、延时原理在单片机中,延时操作通常通过循环来实现。
每个循环需要一定的时间,通过控制循环次数和循环体内的指令数量,可以实现不同长度的延时。
在汇编语言中,可以使用计数器来控制循环次数,从而实现精确的延时操作。
三、汇编语言编写延时程序接下来,我们将使用汇编语言编写延时500ms的程序。
1. 设置计数器初值在程序的开头我们需要设置计数器的初值,这个初值需要根据单片机的工作频率和所需的延时时间来计算。
假设单片机的工作频率为1MHz,那么在循环500次后,就能够达到500ms的延时。
我们需要将计数器的初值设为500。
2. 循环计数接下来,我们进入一个循环,在循环中进行计数操作。
每次循环结束时,都需要检查计数器的值,当计数器减至0时,表示已经达到了500ms的延时时间,可以退出循环。
3. 优化程序为了提高程序的执行效率,可以对计数器进行优化。
例如可以通过嵌套循环的方式,减少循环的次数,从而提高延时的精度和稳定性。
四、程序示例下面是一个简单的示例程序,演示了如何使用汇编语言编写延时500ms的程序。
```org 0x00mov r2, #500 ; 设置计数器初值为500delay_loop:djnz r2, delay_loop ; 进行计数ret ; 延时结束,退出程序```五、结语通过以上的示例程序,我们可以看到如何使用汇编语言编写单片机延时500ms的程序。
当然,实际的延时程序可能会更加复杂,需要根据具体的单片机型号和工作频率进行调整,但是思路是相似的。
在实际的编程中,需要根据具体的需求和硬件环境来进行调整和优化,以实现更加稳定和精确的延时操作。
希望本文对单片机延时程序的编写有所帮助,也欢迎大家在评论区提出宝贵意见和建议。
一、设计内容该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。
二、电子时钟设计思想:用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY〔自己计算〕。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms 计数,计20次产生秒计数器78H单元加1,秒计数器加到60那么分计数器79H单元加1,分计数器加到60那么时计数器7AH单元加1,时计数器加到24那么时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
三、MCS-51单片机系统简介单片机应用系统由硬件系统和软件系统两局部组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。
在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。
配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED 指示灯就可以进行处理了。
在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。
2022年广州航海学院软件工程专业《计算机系统结构》科目期末试卷B(有答案)一、选择题1、汇编语言程序经()的()成机器语言程序。
A.编译程序,翻译B.汇编程序,翻译C.汇编程序,解释D.编译程序,解释2、程序员编写程序时使用的地址是( )。
A.有效地址B.逻辑地址C.辅存实地址D.主存地址3、计算机系统结构不包括()A.主存速度B.机器工作状态C.信息保护D.数据表示4、计算机组成设计不考虑( )。
A.专用部件设置B.功能部件的集成度C.控制机构的组成D.缓冲技术5、与全相联映象相比,组相联映象的优点是( )A.目录表小B.块冲突概率低C.命中率高D.主存利用率高6、微指令由()直接执行。
A.微指令程序B.硬件C.汇编程序D.编译程序7、“启动I/O”指令是主要的输入输出指令,是属于()。
A.目态指令B.管态指令C.目态、管态都能用的指令D.编译程序只能用的指令8、直接执行微指令的是( )A.汇编程序B.编译程序C.硬件D.微指令程序9、计算机中优化使用的操作码编码方法是( )。
(书上为扩展编码法)A哈夫曼编码B ASCII码C BCD码D扩展操作码10、下列关于标量流水机的说法不正确的是()A.可对标量数据进行流水处理B.没有向量数据表示C.不能对向量数据进行运算D.可以对向量、数组进行运算二、填空题11、根据多台外围设备共享通道的不同情况,可将通道分为三种类型:________和________12、Cache存贮器地址映象大多采用________映象或________映象,以利于实现。
13、评价存贮器性能的基本要求是大容量、________和低价格。
14、程序在时间上的局部性表现在,最近未来要用的信息可能就是现在正在使用的信息,这是因为程序中有________循环15、评价地址码个数不同的4种指令的优缺点的主要标准是________和________16、多计算机互连网络中的通信模式有________和________17、一个程序在计算机上运行,花费的CPU时间为CPU的时钟周期乘以该程序所有机器指令使用CPU的时钟周期数,即CPU时间=________×________18、·按指令流与数据流,体系结构可分类为SISD、________、________和MIMD。
目录摘要 (Ⅰ)1 电子秒表与闹钟系统概述 (1)1.1 课程设计基本要求 (1)1.2 系统实现功能 (1)1.3 系统应用价值展望 (2)2 仿真软件Proteus和Keil简介 (3)2.1 Proteus简介 (3)2.2 Keil简介 (3)3 系统工作原理分析 (4)3.1AT89C2051模块 (4)3.2 显示驱动模块 (6)3.3 数码管显示模块 (8)4 程序流程图设计 (9)5 Proteus仿真原理图 (12)6 课程设计体会 (14)参考文献 (15)附:源程序代码 (16)摘要随着科学技术的不断发展 , 人们对时间计量的要求越来越高。
在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。
本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。
软件部分以C语言为主体,用1602LCD 液晶屏显示输出信息,输出信息量多,更直观、人性化。
该时钟可实现人机交互,可通过提供的键盘对其进行调整。
系统具有以下功能:年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。
本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。
关键词:定时器中断闹钟电子时钟1 电子秒表与闹钟系统概述1.1 课程设计基本要求(1) 用并行口设计一个具有显示功能的秒表,显示准确的北京时间(时、分、秒),可用24小时制式;(2) 有时间校准功能;(3) 允许通过转换功能键转换显示时间,用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知;(4) 所有按键需要通过串口自发自收来调校各种功能。
1.2 系统实现功能本系统是基于单片机AT89S52制作的数字电子钟。
根据实验要求,在完成实验所要求的基本功能外,扩展了几个功能。
编号单片机课程设计(2013 级)题目:基于52单片机电子时钟的设计学院:物理与机电工程学院专业:电子信息科学与技术作者姓名:陈✘✘党✘✘杜✘✘指导教师:张✘✘职称:教授完成日期:2016 年7 月 2 日二〇一六年七月基于52单片机电子时钟的设计摘要本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。
将软硬件有机地结合起来,使得系统能够实现液晶显示,显示有年、月、日、时、分、秒以及星期,还可以设置闹钟和整点报时。
其中软件系统采用单片机汇编语言编写程序,包括显示程序、闹钟程序、中断、延时程序,按键消抖程序等,并在keil中调试运行,硬件系统利用PROTEUS 强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。
关键词:STC89C52芯片;时钟芯片DS1302;单片机汇编语言;液晶显示电路1 设计任务及要求分析1.1 设计任务:基于单片机的电子时钟设计1.2 要求:1.2.1 用LCD液晶作为显示设备1.2.2 可以分别设定小时、分钟和秒,复位后时间为 00 00 001.2.3 能实现日期的设置年、月、日1.3 扩展要求:如闹钟功能、显示星期、整点音乐报时等2 系统方案2.1 系统整体方案的论证电路原理设计是基于小系统板包括电源电路、复位电路、按键电路、DS1302时钟电路、液晶显示驱动电路、输出控制电路。
电源部分是用电池来提供的3v-5v,晶体振荡器采用的是12MHz的石英晶体振荡器。
整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。
时钟芯片产生时钟信号,利用单片机的I/O口传给单片机;并通过I/O口实现LCD的显示。
系统设有4个独立式按键可以对时间年、月、日和星期进行调整,还可以设置闹钟。
具体如图2.1所示:图2.1 系统整体框图3硬件设计与实现3.1单片机最小系统STC89C52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。
时钟系统汇编语言程序设计1 总体方案设计1.1设计目的1)进一步建立微机系统的概念,加深对系统的理解和认识,培养学生应用微型计算机解决实际问题的能力;2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。
3)进一步熟悉微机最小系统的构成及常用接口芯片的使用,提高系统设计的能力。
1.2设计任务与要求课程设计任务:系统时钟汇编语言程序设计设计初始条件:1)采用16位微处理器 8086 CPU以及86系列微型计算机的指令系统;2)软件设计平台为多功能微型计算机实验软件MFS中的微机原理实验集成环境MF2KP。
课程设计要求:1)设计一个计时器界面,形式为:时:分:秒;2)单击”ESC”键退出程序。
根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试1.3设计方案本次设计中,要实现时间的显示,并在此基础上附加上一个功能,在时间显示后,单机“ESC”键时,退出显示界面。
在本次设计中,可以加入一个功能,当单击其他键时,显示界面并不退出,即界面不变,没有反应,再单击“ESC”键时,退出显示界面。
在设计时,时钟的实现有很多方法,可以采用DOS系统功能调用语句INT 21h 直接调用系统时间,再在着基础上加上推出的功能;也可以采用延时的方法,设计一个延时器,每隔一秒,计数器加一,采用六十进制。
在此基础上再加上附加功能。
在本次课程设计中,采用调用系统时间的方法,方法比较简单明了,功能实现比较好,能和系统时间跳动保持一致,故选用此种方法。
2 程序流程图设计2.1主流程图设计由方案设计分析可知,此次设计比较简单,先初始化程序,然后设立光标,在光标移动时,不断地取时,取分,取秒,并不断的循环。
在循环的过程中,当按下ESC键时退出程序;当按下其它键时,程序继续运行,并显示时间界面,再按下ESC键时,程序又将退出。
流程图设计:当初始化后,设定一个光标用来显示时间的时、分、秒,并将光标隐藏。
一、用单片机控制发光二极管图1为单片机控制发光二极管的实验电路图。
图中用P1口作为输出端,P1口的P1.0~P1.7引脚分别接了8个LED。
实例1:用单片机控制LED闪烁发光源程序如下:MAIN:SETB P1.0LCALL DELAYCLR P1.0LCALL DELAYLJMP MAINDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND程序说明:1、SETB P1.0:将P1.0口置“1”,既让P1.0输出高电平,让LED 熄灭。
2、LCALL DELAY:LCALL称为子程序调用指令,指令后面的参数DELAY是一个标号,用于标识第6行程序,执行LCALL指令时,程序转到LCALL后面的标号所指示的程序行处执行,如果执行指令过程中遇到RET指令,则程序就返回到LCALL指令下面的一条指令继续执行。
3、CLR P1.0:将P1.0口置“0”,既让P1.0输出低电平,让LED 亮。
4、LCALL DELAY:调用延时子程序DELAY。
5、LJMP MAIN:跳转到第1条指令处执行第1条指令。
6、第6~10条指令是一段延时子程序,子程序只能在被调用时运行,并有固定的结束指令RET。
7、END:不是S51单片机的指令,不会产生单片机可执行的代码,而是用于告诉汇编软件“程序到此结束”,这类用于汇编软件控制的指令称为“伪指令”。
延时程序说明:1、程序中的R6、R7代表工作寄存器的单元,用来暂时存放一些数据。
2、MOV指令的含义是传递数据。
指令“MOV R7,#250”的含义是:将数据250送到R7中。
250前面的“#”号表示250是一个数,而不是一个地址,“#”号后面的数称为立即数。
3、DJNZ指令后面有两个符号,一个是R6,一个是D2。
R6是寄存器,D2是标号。
DJNZ指令的执行过程是:将其后面第一个参数中的值减1,然后看这个值是否等于0,如果等于0,往下执行,如果不等于0,则转移到第二个参数所指定的位置去执行,这里是转移到由D2所标识的这条语句去执行。
汇编语⾔实现电⼦闹钟思路详解2.1 设计思路⾸先使⽤8255、8254、8259 三个芯⽚实现电⼦时钟的功能,让闹钟可以正常⾛时;其次,在时钟的基础上添加闹铃功能、整点报时功能、设置当前时间功能;完成设计。
2.2 设计⽅案1. 电⼦时钟部分:此次设计是通过对计数器8254设定计数值对脉冲进⾏计数,在程序⾥,8254⼯作于计数器0,⽅式3。
接⼊的CLK为1MHz,设计数初值为10000,每100次中断计数⼀次,产⽣的记数时间正好是时钟每秒⾛过的时间。
通过对中断控制器8259设置初始化命令字初值来控制中断。
程序中通过移位指令来实现时、秒、分的个位和⼗位的独⾃存储,将分、秒的个位⼗位分别存⼊指定的寄存器中。
⽐较转移指令来完成秒和分的累加。
七段数码管由8255并⾏接⼝的A⼝进⾏位的选择,通过B⼝输出要显⽰的段码。
这样就在6个七段数码管上分别显⽰时、分和秒。
当1S时间到时,修改当前数码管数值,10秒时将秒的低位清零,⾼位加1,分和时亦是如此;到达60秒时,将秒清零,分加1,到达60分时,将分清零,⼩时加1,到达24⼩时则全部清零。
2. 闹钟响铃部分:对于闹钟部分,我们⾸先要完成数码管显⽰单元按键的连接和设计,让16个按键分别为0-F;再利⽤实验平台的单次脉冲输⼊KK1产⽣⼀次中断,这样就可以设置时间了。
将设置好的时间储存起来,时刻与当前的时间进⾏⽐较,当时间⼀样时,计数器1⼯作,蜂鸣器蜂鸣,播放⾳乐,这就完成了闹钟响铃功能。
3. 整点报时部分:整点报时,就是在整时的时候响⼀次铃,当时钟整点时,⽆论是⼏点,时钟的分和秒部分都为零,所以,只要让时钟的分和秒部分与零进⾏⽐较,当他们都相等时,就代表到达整点了,可以响铃了。
整点报时就完成了,本闹钟设置的整点报时时长为5秒。
4. 设置当前时间:本部分也⽤到了数码管显⽰单元的按键部分,只要利⽤之前的设计就好了,这次使⽤单次脉冲输⼊的KK2产⽣中断设置时间,再将设置的时间存储在时间变量中,时间就设置好了。
;--------------------------------------------------------------------; 时钟程序; 定时器T0中断服务中产生时钟数据; 在定时器T1中断服务程序中动态显示8个数码管。
; P1口接七段数码管的段码,P2.2、P2.3、P2.4口接数码管的位控制码。
; 设计:黄有全; 2009年11月1日;--------------------------------------------------------------------;定义变量名称Hour EQU 30HMin EQU 31HSec EQU 32HMS EQU 3BHHour_10 EQU 33HHour_0 EQU 34H ;37H;实验板用37HHgan1 EQU 35HMin_10 EQU 36H ;39H;实验板用39HMin_0 EQU 37H ;34H;实验板用36HHgan2 EQU 38HSec_10 EQU 39H ;36H;实验板用36HSec_0 EQU 3AHLED1 EQU 40HLED2 EQU 41HLED3 EQU 42HLED4 EQU 43HLED5 EQU 44HLED6 EQU 45HLED7 EQU 46HLED8 EQU 47HORG 0000HLJMP MAINORG 000BHLJMP CREATE_DA TA ;定时器T0中断处理,完成时间基准产生与时间、日期处理。
ORG 001BHLJMP DISPLAY ;定时器T1中断处理,完成动态显示功能。
ORG 0030HMAIN: LCALL INITIAIL ;初始化程序模块MM0: LCALL KEY_PRO ;按键处理模块LCALL CHANGE_DA TA ;数据转换模块LCALL CHANGE_DIS ;显示段码转换模块LJMP MM0;------------------------------------;初始化程序模块;------------------------------------INITIAIL:MOV SP, #50H ;设置堆栈指针为68H。
MOV Hour,#23 ;设置要小时初始值为23MOV Min, #56 ;设置要分钟初始值为56MOV Sec, #28 ;设置要秒初始值值为28MOV MS,#0MOV IE,#8AH ;开中断,开定时器T1中断MOV IP,#02H ;T0优先级为1,T1优先级为0.MOV TMOD,#11H ;T0、T1为定时方式1MOV TH0,#3CH ;定时50ms初始值MOV TL0,#0B0HMOV TH1,#0F8H ;定时2ms初始值MOV TL1,#30HSETB TR0 ;启动定时器T1SETB TR1RET;-------------------------------------------;按键处理模块;-------------------------------------------KEY_PRO:MOV A,P3CPL AANL A,#0FHCJNE A, #01H, KEY2MOV A,HourCJNE A,#23,KH_INCMOV HOUR,#0LJMP KEY_ENDKEY2: CJNE A,#02H,KEY3MOV A,HourCJNE A,#0,KH_DECMOV Hour,#1LJMP KEY_ENDKEY3: CJNE A,#04H,KEY4MOV A,MinCJNE A,#59,KM_INCMOV Min,#0LJMP KEY_ENDKEY4: CJNE A,#08H,KEY_ENDMOV A,MinCJNE A,#0,KM_DECMOV Min,#59LJMP KEY_ENDKH_INC: INC HourLJMP KEY_ENDKH_DEC: DEC HourLJMP KEY_ENDKM_INC: INC MinLJMP KEY_ENDKM_DEC: DEC MinLJMP KEY_ENDKEY_END: LCALL DELAY200MSRET;------------------------------------;T0中断服务程序;产生时钟数据;产生秒钟、分钟和小时数据;------------------------------------CREATE_DATA:PUSH Acc ;累加器ACC入栈,在中断服务中用到A,保护A的值。
MOV TH0,#45H ;定时50ms初始值的计算值是3CE8H,由于有中断过程MOV TL0,#0feh ;时间消耗、晶体频率不准等原因,校正后是45FEH。
MOV A,MSCJNE A, #20,MS_INC ;毫秒MS不是20,去毫秒增一。
MOV MS,#00 ; 毫秒MS是20,毫秒单元清0.MOV A,SECCJNE A, #59,SEC_INC ; 秒S EC不是59,去秒增一MOV SEC, #0 ; 秒SEC是59,秒单元清0.MOV A,MINCJNE A, #59,MIN_INC ;分MIN不是59,去分增一。
MOV MIN,#0 ;分MIN是59,分单元清0.MOV A,HOURCJNE A, #23,HOUR_INC ;小时HOUR不是23,去分增一。
MOV HOUR, #00 ;小时是23,小时单元清0.JMP CREATE_RET ;返回MS_INC: INC MS ;毫秒增1JMP CREATE_RET ;SEC_INC: INC SEC ;秒增1JMP CREATE_RET ;MIN_INC: INC MIN ;分增1JMP CREATE_RETHOUR_INC: INC HOUR ;小时增1CREATE_RET: POP ACC ;出栈,恢复A的值。
RETI ;返回;------------------------------------------------------;数据转换模块;将数据转换为十位和个位。
转换结果保存到显示内容保存区。
;------------------------------------------------------CHANGE_DIS:MOV A,Hour ;小时转换个位和十位MOV B,#10DIV ABMOV Hour_10,A ;保存小时十位MOV Hour_0, B ;保存小时个位MOV Hgan1,#20 ;横杆1的代码MOV A,Min ;分转换个位和十位MOV B,#10DIV ABMOV Min_10,A ;保存分的十位MOV Min_0, B ;保存分的个位MOV Hgan2,#20 ;横杆2的代码MOV A,Sec ;秒小时转换个位和十位MOV B,#10DIV ABMOV Sec_10,A ;保存秒的十位MOV Sec_0, B ;保存秒的个位RET;----------------------------------------------------------------------------------;数据转换模块;将要显示的数据转换为共阳极显示段码,保存到显示段码区保存;显示内容转换为显示段码;----------------------------------------------------------------------------------CHANGE_DATA:MOV DPTR, #DISCODE ;设置显示段码表的表头指针MOV R4, #8 ;用R4做循环计数器,8个数码管显示8次为初始值MOV R1, #33H ;设置数据指针,指向要显示的第1个数MOV R0, #40H ;设置显示段码区指针,CC0: MOV A, @R1 ;取显示数据MOVC A, @A+DPTR ;查表,获取数码管显示代码MOV @R0, A ;显示段码送LED代码区保存INC R1INC R0DJNZ R4,CC0 ;8位转换没有完毕,跳转到DD0,完毕返回。
RET;--------------------------------------------------------;T1中断,完成显示功能;在T1中断服务程序中进行显示,显示很稳定。
;每2ms中断一次,每次中断显示一个位的数字,8次一个循环。
;--------------------------------------------------------DISPLAY:SETB RS0 ;修改寄存器区。
在中断服务中用区1的寄存器,保护区0的寄存器不受影响。
MOV TH1,#0F8H ;定时2ms初始值MOV TL1,#30HCJNE R4,#8,DISP0MOV R4, #0 ;用R4做循环计数器,8个数码管显示8次为初始值MOV R3, #11100011B ;用R3做为显示位码指针,设置指向第1位LED;MOV R3, #11111000B ;实验板的位码初始值MOV R1, #40H ;设置数据指针,指向要显示的第1个数DISP0: MOV P1, @R1 ;取显示代码数据,送接在端口P1的数码管MOV P2, R3 ;送显示位码INC R1 ;修改数据指针,指向下一个要显示的数据INC R4 ;修改显示位数指针,下次中断显示下一个位。
INC R3 ;增4,修改显示位码,指向下一个要显示的位INC R3INC R3INC R3CLR RS0 ;恢复寄存器区0。
RETI;-------------------------------------;延时200ms程序;-------------------------------------DELAY200MS:MOV R7,#200 ;延时200msDD1: MOV R6,#200 ;延时1msDD2: NOPNOPNOPDJNZ R6,DD2DJNZ R7,DD1RET;------------------------------------------------------------------;共阳极数码管显示代码表;0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H、L、P、灭、- 。
;8位二进制中,第7位接小数点,第0位接a段。
;------------------------------------------------------------------DISCODE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H, 83H,0C6H,0A1H,86H,8EH,89H,0C7H,8CH,0FFH,0BFHEND。