华中科技大学单片机实验实验报告MCS51单片机.doc

上传人:scccc 文档编号:12488236 上传时间:2021-12-04 格式:DOC 页数:57 大小:1,019.50KB
返回 下载 相关 举报
华中科技大学单片机实验实验报告MCS51单片机.doc_第1页
第1页 / 共57页
华中科技大学单片机实验实验报告MCS51单片机.doc_第2页
第2页 / 共57页
华中科技大学单片机实验实验报告MCS51单片机.doc_第3页
第3页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《华中科技大学单片机实验实验报告MCS51单片机.doc》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验实验报告MCS51单片机.doc(57页珍藏版)》请在三一文库上搜索。

1、华中科技大学单片机实验报告MCS-51系列单片机(单片机原理及应用实验)(根据2014年电气与电子工程学院单片机实验课程改编)专业:电气工程及其自动化班级:气卓1301姓名:廖鹏毅学号:ALL RIGHT RESERVED目 录实验3.1 软件仿真实验3实验2 “跑马灯”实验 8实验3数码管显示功能的实现11实验5按键功能的实现23实验7 A/D转换器件TLC1543的用 29实验8 D/A转换器件TLV5617的应用 34实验14指示灯的外部中断控制 47实验18定时器控制继电器 49自行设计实验53实验总结 55实验3.1软件仿真实验一实验目的i掌握软件仿真的方法2熟悉集成开发环境的使用3

2、熟悉常用指令的功能4熟悉程序调试的方法5学习自己编写、调试计算机程序二实验内容1将Keil软件设置为软件仿真的方式2将介绍的示例程序录入、编译、调试3观察有关寄存器、变量的值,理解程序及指令的功能4编译、调试、验证自己编写的子程序三实验步骤1先阅读课本,大致了解仿真软件的使用和注意事项2结合课本,边看书边上机操作,逐步了解和掌握仿真软件的使用3阅读和理解介绍的示例程序,并将其录入、编译、调试4赋值给示例程序时,打开各观察窗口,观察有关寄存器、变量的值,验证其功能5自行编译、调试、验证自己编写的子程序四实验结果1给十六进制数转换为十进制数子程序赋初值,MOV H_DAT0,#01HMOV H_D

3、AT1,#00H则编译加载调试该子程序,打开各观察窗口观察有关变量,实验发现 D_DAT0,D_DAT1,D_DAT2,D_DAT3 中的值分别为 00,00,00,01。则符合实际,即验证其功能。2给双字节乘法运算子程序赋初值,MOV R4,#8MOV R5,#9MOV R6,#6MOV R7,#7然后编译加载调试该子程序,并用观察窗口观察有关变量,实验发现MUL_0,MUL_1,MUL_2,MUL_3 分别为08,04, 04,07.则符合实际,即验证其功能。3给三字节数除双字节数运算子程序赋初值,MOV ODIV_H,#00HMOV ODIV_M,#00HMOV ODIV_L,#01HM

4、OV DIV_1,#00HMOV DIV_0,#01H接着编译加载调试该子程序,并用观察窗口观察有关变量,实验发现R0,R1,R3,R4,R5中的值分别为00,00,00,00,01,则实验验证其功能。五实验小结本次实验,我初步了解仿真软件的使用,同时掌握了编译、加载、调试程序的方法以及验证实验结果的方法附:示例程序含主程序十六进制数转换为十进制数子程序双字节乘法运算子程序三字节数除双字节数运算子程序D_DA T0EQU50HD_DAT1EQUD_DAT0+1D_DA T2EQUD_DAT1 + 1D_DA T3EQUD_DAT2+1H_DA T0EQUD_DAT3+1H_DAT1EQUH_D

5、AT0+1ODIV_LEQUH_DAT1 + 1ODIV_MEQUODIV_L+1ODIV_HEQUODIV_M+1DIV_0EQUODIV_H+1DIV_1EQUDIV_0+1MUL_0EQUDIV_1+1MUL_1EQUMUL_0+1MUL_2EQUMUL_1+1MUL 3EQUMUL 2+1ORG0000HAJMPSTARTORG0030HSTART:MOV SP,#30H;在此处给有关变量单元赋值MOV H_DAT1,#2MOV H_DAT0,#0 LCALL HTD;在此处给有关变量单元赋值LCALL TMUL;在此处给有关变量单元赋值LCALL SDIVLOOP:NOPAJMP L

6、OOPMOVD_DAT2,#00HMOVD_DAT1,#00HMOVD_DAT0,#00H;以上将各位结果存储单元清0CLR C;进位位C清0MOVA,H_DA T0;源数据低位装载到累加器A中MOVR6,A;备份源数值低位到寄存器R6中SUBBA,#0E8H;源数值低位减去1000的低位0E8HMOVH_DAT0,A;余数存回到源数值低位存储单兀MOVA,H_DAT1;源数值高位装载到累加器A中MOVR7,A;备份源数值高位到寄存器R7中SUBBA,#03H;源数值高位带借位减 1000的高位03HMOVH_DAT1,A;余数存回到源数值低位存储单兀INC D_DA T3;千位增1H1000

7、:MOV D_DAT3,#00H;将结果千位清 0JNC H1000;如果没有借位则利用余数循环再减MOVH_DAT0,R6MOVH_DAT1,R7;用备份值作为新的源数值(余数)DECD_DAT3;千位数减1,去掉最后一次无效减的影响MOVA,H_DAT0;源数值低位装载到累加器A中MOVR6,A;备份源数值低位到寄存器 R6中CLR C;清0进位位CSUBBA,#100;减去100MOVH_DAT0,A;存回余数低位MOVA,H_DAT1;取源数值高位SUBBA,#00H;减100的高位0,实际上是减去借位位MOVH_DAT1,A;存回余数咼位H100:;有借位表明为最后一次无效减;程序顺

8、序执行,应还原最后一次修改值JC H10;有借位则跳到下一步继续运算INC D_DA T2;没有借位,百位增1AJMP H100;没有借位继续减;注意本轮循环中最后一次减时百位未增1HTD:;所以不存在还原的问题;进入下一轮时,源数值(余数)都在 R6中H10:CLR CMOV A,R6;源数值(低位)装载到累加器A中;到此源数值高位已经为 0,不用再参加计算MOVD_DAT0,A;存回源数值低位;如果是最后一次减,则此值即为个位SUBBA,#10;减去 10MOVR6,A;保存余数JC H1;有借位,运算结束INC D_DA T1;没有借位 汁位增1H1:TMUL:LAST:LJMP H10

9、;没有借位继续减RET;子程序返回MOV A,R6SDIVO:MOV B,R4MULAB,第次乘法MOVMUL_0,A;第一次乘法结果低位存到MUL_0(最终结果)MOVR3,B;第一次乘法结果高位暂存在R3中MOVA,R4MOVB,R7MULAB;第一次乘法ADDA,R3;第二次乘法结果低位加第一次乘法结果的高位MOVR3,A;所得第一次加法结果低位暂存到R3中MOVA,BADDCA,#00H;第二次乘法结果高位加进位位CMOVR2,A;所得第一次加法结果高位暂存到R2中MOVA,R6MOVB,R5MULAB;第三次乘法ADDA,R3;第三次乘法结果低位加 R3MOVMUL_1,A;第二次加

10、法结果低位存到MUL_1(最终结果)MOVR1,#00H;第二次加法高位进位值清 0MOVA,R2ADDCA,B;第三次乘法结果高位加R2及进位位CMOVR2,A;第二次加法结果高位暂存R2JNC LAST;没有进位则跳转(R仁0)MOVR1,#1;有进位,第二次加法高位进位值为1MOV A,R7MOVB,R5MULAB;第四次乘法ADDA,R2;第四次乘法结果低位加R2MOVMUL_2,A;第三次加法结果低位存到 MUL_2(最终结果)MOVA,BADDCA,R1;第四次乘法高位加第二次加法高位进位值R1;及第三次加法低位进位位CMOVRETMUL_3,A;第三次加法结果咼位存到MUL_3中

11、(最终结果)MOV'R0,#00HMOVR1,#00H;清0过渡单元MOVR2,#24;因被除数有三个字节(24 位),所以循环24次SDIV:CLR C;清0进位位CMOVA,ODIV_L;(ODIV_L ARLC A;A中的值带进位位C左移1位MOVODIV_L,A;(AODIV_L,移位后存回MOVA,ODIV_MRLC AMOVODIV_M,AMOVA,ODIV_HRLC AMOVODIV_H,A;以上将被除数左移一位,最高位在进位位MOVA,R0RLC AMOVR0,A;R0的值带进位左移后存回MOVR6,A;备份R0的值在R6中MOVA,R1RLC AMOVR1,A;R1的

12、值带进位左移后存回MOVR7, A;备份R1的值在R7中;以上实现Z和X 一起左移1位;并把Z中的值备份了一份CLR CMOVA,R0SUBBA,DIV_0MOVR0,AMOVA,R1SUBBA,DIV_1MOVR1,A;以上将Z减Y后差值写回Z中JNC SDIV1;没有借位(够减)则跳转,用差值继续计算MOVA,R6MOVR0,AMOVA,R7MOVR1,A;有借位,不够减,用备份值取代差值,即不减CPL C;借位C取反即为商。C为0,够减,商1MOVA,R5RLC AMOVR5,AMOVA,R4RLC AMOVR4,AMOVA,R3RLC AMOVR3,A;以上将商移入 R3、R4、R5中

13、DJNZR2,SDIV0;按R2中的值,循环24次SDIV1:RETC中END实验2“跑马灯”实验一实验目的i 了解发光二极管的使用方法2熟悉串行、并行输出扩展接口的方法3学习常用指令用法和简单程序编写技巧二实验内容1理解图的电路原理和参考程序2按图431连接电路,调试参考程序,单步执行每行指令,观察有关寄存器中值的变化, 理解指令的功能和执行效果三实验步骤1先阅读课本,理解原理和程序2按图接线,然后编译加载调试程序,观察实验现象,是否出现“跑马灯”四实验结果接好线,并运行程序后,8个灯依次循环闪亮,出现“跑马灯”,验证其功能。五实验小结理解I/O 口的使用,以及发光二极管的使用和原理附:跑马

14、灯子程序:LIGHT-S跑马灯串行LIGHTEQU60H;定义指示灯数据存放地址单元SIO EQU P2.0;串行移位数据SCLKEQUP2.1;串行移位时钟信号SRCLKEQUP2.2;输出锁存信号ORG0000HAJMP STARTORG 0030HSTART: MOV SP,#30H ;初始化堆栈指针CLR SIOCLR SCLKCLR SRCLKMOV LIGHT,#01H ;初始化指示灯输出数据NOPMAIN: LCALL FLYLED;调用指示灯循环点亮子程序LCALL DELAY;延时子程序同参考例程一AJMPMAIN;循环执行主程序*J;通过595循环点亮指示灯子程序*FLYL

15、ED:MOV A,L IGHTCLR CRLC A;A中最高位移到CCPL C因低电平点亮,故取反MOV SIO,C;LIGHT中数据最高位送到 SER输入端SETB SCLKNOPCLR SCLK;产生一个移位脉冲SETB SRCLKNOPCLR SRCLK产生一个输出锁存脉冲CJNE A,#O,FLYCON ;A中不为0则继续MOV A,#0伯;A中为0,表明循环完一轮;重新赋初值FLYCON:MOV LIGHT,ARET*J;延时子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表当前行;作用与DJNZ R6,DELY2相冋DJN

16、Z R7,DELY1LED-P跑马灯并行LIGHT EQU 60H;定义指示灯数据存放地址单元ORG 0000HAJMP STARTORG 0030HSTART: MOV SP,#30H;初始化堆栈指针JCLR P1.0初始化有关I/O 口MOV LIGHT,#01H ;初始化指示灯数据NOPMAIN: LCALL FLYLED;调用指示灯循环点亮子程序LCALL DELAY;延时子程序AJMPMAIN;死循环*;通过374循环点亮指示灯子程序*JFLYLED:MOVA,L IGHTCPL A因为低电平点亮,故取反MOV P0,A;LIGHT中数据送到374的输入端;(因P1 口与374输入端

17、相连)SETB P1.0NOPCLR P1.0;产生一个锁存脉冲;将数据锁存到374中输出MOVA,L IGHTCLR CRLC A ;ACC中数据左移一位;(高位丢到,低位补0)CJNE A,#0,FLYCON;A中不为0则继续MOVA,#0伯;A中为0,循环完一轮;重新赋初值FLYCON:MOV LIGHT,ARET*J;延时子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表当前行;与 DJNZ R6QELY2 相同DJNZR7QELY1RETEND实验3数码管显示功能的实现一实验目的i 了解数码管显示器的特性和使用方法2进一步熟

18、悉常用指令和编程技巧3熟悉单片机I/O 口的使用方法二实验内容1对照图433和图434、图435,理解图433所示的电路原理2读懂参考例程一和参考例程二3分别验证参考例程一和参考例程二4利用试验箱通用板上的电路模块,自行设计一套 4位数码管显示器的并行动态显示电路三实验步骤1首先阅读课本,理解相关原理和程序运行2调试示例程序,观察现象3根据所学知识,编写一套4位数码管显示器的并行动态显示电路四实验结果1调试示例程序,结果都出现6位静态显示2自行编写一套4位数码管显示器的并行动态显示电路子程序:MOV A,R0MOV DPTR,#DISPDMOV A,A+DPTRMOV P0,ASETB P1.

19、1NOPCLR P1.1INC ROLCALL DELAYCJNE R0,#0AH,DISPMOV R0,#00HNOPRET调试后,可以4位数码管显示器的并行动态显示电路五实验总结进一步了解I/O 口的使用,掌握串行和并行的区别和使用,以及数码管的原理和使用附:参考程序LED-S-P数码管显示功能的实现(并行动态显示参考程序 1)D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定义显示数据存储单元DATA_O EQUP0;定义显示数据输出口PLED1 EQUP2.0PLED

20、2 EQUP2.1PLED3 EQUP2.2PLED4 EQUP2.3;以上定义四片574输出锁存信号ORG0000HAJMP STARTORG 0030HSTART: MOV SP,#30H;初始化堆栈指针MOV D_DAT0,#0MOV D_DAT1,#1MOV D_DAT2,#2MOV D_DAT3,#3MOVD_DAT4,#4MOVD_DA T5,#5 ;初始化显示数据CLR PLED1CLR PLED2CLR PLED3CLR PLED4NOPMAIN:LCALL DISP;调用数码管循环点亮子程序LOOP: AJMPLOOP;循环执行主程序*J;通过574显示6位数字子程序*JDI

21、SP:MOV R0,#D_DAT0MOV A,R0;取需显示的数字MOVDPTR,#DISPD;装载笔画编码表首地址MOVCA,A+DPTR ;取需显示数字笔画代码XRLA,#0FFHMOVDATA_O,A;笔画代码送到P0 口SETBPLED1NOPCLR PLED1产生一个锁存脉冲,锁存笔画代码INC RO;R0增1指向下一个需显示数字MOVA,R0;取需显示的数字MOVDPTR,#DISPD;装载笔画编码表首地址MOVCA,A+DPTR ;取需显示数字笔画代码XRLA,#0FFHMOVDATA_O,A;笔画代码送到P0 口SETBPLED2NOPCLR PLED2产生一个锁存脉冲,锁存笔

22、画代码INC R0;R0增1指向下一个需显示数字MOVA,R0;取需显示的数字MOVDPTR,#DISPD;装载笔画编码表首地址MOVCA,A+DPTR ;取需显示数字笔画代码XRLA,#0FFHMOVDATA_O,A;笔画代码送到P0 口SETBPLED3NOPCLR PLED3产生一个锁存脉冲,锁存笔画代码INC R0;R0增1指向下一个需显示数字MOVA,R0;取需显示的数字MOVDPTR,#DISPD;装载笔画编码表首地址MOVCA,A+DPTR ;取需显示数字笔画代码XRLA,#0FFHMOVDATA_O,A;笔画代码送到P0 口SETBPLED4NOPCLR PLED4产生一个锁存

23、脉冲,锁存笔画代码RET;数字笔画代码表0123456789 熄DISPD: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0END并行动态显示参考程序 2LIGHT EQU 60H;定义指示灯数据存放地址单元SIO EQU P2.0;串行移位数据SCLKEQUP2.1;串行移位时钟信号SRCLK EQUP2.2;输出锁存信号ORG 0000HAJMP STARTORG 0030HSTART: MOV SP,#30H ;初始化堆栈指针CLR SIOCLR SCLKCLR SRCLKMOV LIGHT,#01H ;初始化指示灯输出数据NOPMAIN:LCAL

24、L FLYLED;调用指示灯循环点亮子程序LCALL DELAY;延时子程序同参考例程一AJMPMAIN;循环执行主程序*J;通过595循环点亮指示灯子程序*FLYLED:MOVA,L IGHTCLR CRLC A;A中最高位移到CCPL C因低电平点亮,故取反MOV SIO,C;LIGHT中数据最高位送到 SER输入端SETB SCLKNOPCLR SCLK;产生一个移位脉冲SETB SRCLKNOPCLR SRCLK产生一个输出锁存脉冲CJNE A,#O,FLYCON ;A中不为0则继续MOV A,#0伯;A中为0,表明循环完一轮;重新赋初值FLYCON:MOV LIGHT,ARET*J;

25、延时子程序*DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表当前行;作用与DJNZ R6QELY2相同DJNZ R7,DELY1RETENDORG 0030HSTART: MOV SP,#30H并行动态显示参考程序 3:D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FHD_DA T6 EQU70HORG0000H;定义显示数据单元AJMP STARTMOVMOVMOVMOVMOVMOVMOVD_DAT0,#0D_DAT1,#1

26、D_DAT2,#2D_DAT3,#3D_DAT4,#4D_DAT5,#5 ;初始化显示数据P0,#0;初始化堆栈指针CLR P1.1初始化有关I/O 口CLR P1.2R0,#D_DAT0R1,#01HMOVMOVNOPMAIN:LCALL DISPLCALL DELAY;初始化显示指针寄存器;R0指向第一位显示数字;初始化需点亮数码管位置代码AJMP MAIN;调用数码管循环点亮子程序;延时子程序同前,应修改延时长度;循环执行主程序DISP:MOV A,R1;取位代码MOV P0,A位代码送P0 口SETB P1.2NOPCLR P1.2;产生一个锁存脉冲,锁存位代码MOV A,R0;取需显

27、示的数字MOV DPTR,#DISPD;装载笔画编码表首地址MOVC A,A+DPTR ;取需显示数字笔画代码MOV P0,A;笔画代码送到 P0 口SETB P1.1NOPCLR P1.1;产生一个锁存脉冲,锁存笔画代码INC R0;R0增1指向下一个需显示数字MOV A,R1CLR CRLC AMOV R1,A;R1中的值左移1位,指向下一位数码管CJNER0,#70H,DISP1;R0中不为 70H 则继续MOVR0,#D_DAT0 ;R0 中为 70H,循环完一轮;重新赋初值MOVR1,#1;位置代码初值DISP1: NOPRET;数字笔画代码表;0123456789 熄DISPD:D

28、B3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0DELAY:MOVR7,#40HDELY1:MOVR6,#0FHDELY2:DJNZR6,$;$代表当前行;与 DJNZ R6,DELY2 相同DJNZRETENDR7,DELY1串行动态显示参考程序1 :D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DAT4 EQU6EHD_DAT5 EQU6FH;定义显示数据单元D_DA T6 EQU 70HORG 0000HAJMPSTARTORG0030HSTART: MOV SP,#30H;初始化堆栈

29、指针MOVMOVMOVMOVMOVMOVMOVD_DAT0,#0D_DAT1,#1D_DAT2,#2D_DAT3,#3D_DAT4,#4D_DAT5,#5 ;初始化显示数据P0,#0CLR P1.1初始化有关I/O 口CLR P1.2MOVR0,#D_DAT0 ;初始化显示指针寄存器;R0指向第一位显示数字MOVNOPR1,#01H;初始化需点亮数码管位置代码MAIN:LCALL DISP;调用数码管循环点亮子程序LCALLAJMPDELAY;延时子程序同前,应修改延时长度MAIN;循环执行主程序*J;通过574显示6位数字子程序*JDISP:MOV A,R1;取位代码MOVSETBNOPP0

30、,A;位代码送P0 口P1.2CLR P1.2;产生一个锁存脉冲,锁存位代码MOVMOVMOVCMOVSETBA,R0;取需显示的数字DPTR,#DISPD;装载笔画编码表首地址A,A+DPTR ;取需显示数字笔画代码P0,A;笔画代码送到 P0 口P1.1串行动态显示参考程序 2:(本程序实验时来不及执行,不知是否正确)D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定义显示数据单元D_DA T6 EQU70HORG;0000HAJMPSTARTORG0030HSTART:

31、 MOVSP,#30H;初始化堆栈指针MOVD_DAT0,#0MOVD_DAT1,#1MOVD_DAT2,#2MOVD_DA T3,#3;初始化显示数据MOVD_DAT4,#4MOVD_DAT5,#5CLR P1.3;SER引脚CLR P1.1;SCLK引脚CLR P1.2;SRCLK引脚;初始化有关I/O 口MOVR0,#D DAT0 ;初始化数据指针;R0指向第一位显示数字MOVR1,#01H;初始化需点亮数码管位置代码NOPMAIN:LCALL DISP;调用指示灯循环点亮子程序;LCALLDELAY;延时子程序同前NOPAJMPMAIN;死循环*;通过595显示4位数字子程序*DISP

32、:MOV A,R1;取位代码数据MOV R2,#8DISP1: CLR CRLC AMOV P1.3,C;位代码送到SER的输入端SETB P1.1NOPCLR P1.1;产生一个输入锁存脉冲DJNZ R2,DISP1侬次将8位位代码移入;实际只有6位有用MOV A,R0;取需显示的数字MOV DPTR,#DISPD;笔画编码表同前MOVC A,A+DPTR ;取需显示数字笔画代码MOV R2,#8DISP3: SETBCLR P1.2RET;数字笔画代码表3456789 熄DISP2: CLR CRLC AMOVP1.3,C;笔画代码送到 SER的输入端SETBP1.1NOPCLR P1.1

33、产生个输入锁存脉冲DJNZR2,DISP2;依次将8位笔画代码(段代码)移入INC RO;R0增1指向下一个需显示数字MOVA,R1CLR CRLC AMOVR1,A;R1中的值左移1位,指向下一位数码管CJNER0,#070H,DISP3;R0 中不为 70H 则继续MOVR0,#D_DAT0MOVR1,#01H;R0中为70H,循环完一轮 重新赋初值P1.2DISPD:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0DELAY:MOVR7,#80HDELY1:MOVR6,#0FFHDELY2:DJNZR6,$;$代表当前行0;与DJNZ R6,DELY

34、2 相同1 2DJNZ R7,DELY1RETEND实验任务:要让低次位 LED数码管显示中总带有小数点即显示的六位数值中总带有一位小数 ,请编程实现:D_DA T0 EQU6AHD_DAT1 EQU6BHD_DA T2 EQU6CHD_DA T3 EQU6DHD_DA T4 EQU6EHD_DA T5 EQU6FH;定义显示数据单元D_DA T6 EQU70HORG;0000HAJMPSTARTORG0030HSTART: MOVSP,#30H;初始化堆栈指针MOVD_DAT0,#0MOVD_DAT1,#1MOVD_DAT2,#2MOVD_DAT3,#3MOVD_DAT4,#4MOVD_DA

35、T5,#5 ;初始化显示数据MOVP0,#0CLR P1.1;初始化有关I/O 口CLR P1.2MOVR0,#D_DAT0 ;初始化显示指针寄存器;R0指向第一位显示数字MOVR1,#01H;初始化需点亮数码管位置代码mov R3,#0HMOV R4,#0HNOPMAIN:LCALL DISP;调用数码管循环点亮子程序LCALLDELAY;延时子程序同前,应修改延时长度AJMPMAIN;循环执行主程序*J;通过574显示6位数字子程序*JDISP:CJNE R4,#0FEH,NEXTMOV A,R3ADD A,#01HMOV R3,ACJNE R3,#07H,NEXTMOV R3,#0HNE

36、XT:MOVA,R1;取位代码MOVP0,A;位代码送P0 口SETBP1.2NOPCLR P1.2;产生一个锁存脉冲,锁存位代码MOVA,R0;取需显示的数字MOVDPTR,#DISPD;装载笔画编码表首地址MOVCA,A+DPTR ;取需显示数字笔画代码CJNE R3,#01H ,POT1CJNE R1,#01H,DISP2ADD A,#80HPOT1:CJNE R3,#02H ,POT2CJNE R1,#02H,DISP2ADD A,#80HPOT2:CJNE R3,#03H ,POT3CJNE R1,#04H,DISP2ADD A,#80HPOT3:CJNE R3,#04H ,POT4CJNE R1,#08H,DISP2ADD A,#80HPOT4:CJNE R3,#05H ,POT5CJNE R1,#10H,DISP2ADD A,#80HPOT5:CJNE R3,#06H ,DISP2CJNE R1,#20H,DISP2ADD A,#80HDISP2: MOV P0,A;笔画代码送到 P0 口SETB P1.1NOPCLR P1.1;产生一个锁存脉冲,锁存笔画代码INC R0;R0增1指向下一个需显示数字MOV A,R1CLR CRLC AMOV R1,A;R1中的值左移1位,指向下一位数码管MOV A,R4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1