微机原理实验四 LED数码管显示实验_图文_第1页
微机原理实验四 LED数码管显示实验_图文_第2页
微机原理实验四 LED数码管显示实验_图文_第3页
微机原理实验四 LED数码管显示实验_图文_第4页
微机原理实验四 LED数码管显示实验_图文_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验名称 LED数码管显示实验指导教师专业班级姓名学号联系方式一实验要求:实验四 LED数码管显示实验实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。实验内容:利用C8051F310单片机控制数码管显示器基本要求:利用末位数码管循环显示数字0-F,显示切换频率为1Hz。提高要求:在数码管上显示0199计数,计数间隔为0.5秒。二、设计思路1 基本要求:对F310信号频率进行8分频,再对定时器进行48分频,以使在一次定时时间范围内实现1s定时。采用查询方式进行定时。P0.6,P0.7作为位选信号来一直选择末位数码管输出

2、信号。再利用R0作为相对寻址来储存数据并赋值给A。通过MOVC A, A+DPTR指令,利用顺序查表法取出显示段码数据。寄存器R0自增1,并赋给A以取出下一个显示段码数据。2 提高要求:依然对信号频率八分频,对定时器进行48分频,通过P0,6,P0.7进行位控选择数码管输出,定时器定时0.5s,当溢出时进入中断,并通过中断程序将段位控制按序加一,R3,R6,R7分别储存第一第二第三位数码管段位码,利用A 为中间变量,通过P1输出储存的值,查表输出数码管值,达到119时结束。三、资源分配1 基本要求:P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据R0:存放显示数据DPTR:指向

3、段码数据表首2 提高要求:P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据DPTR:指向段码数据表首R3,R6,R7:分别储存第三第二第一位数码管数据四、流程图1 基本要求2 提高要求:主程序 接-2 提高要求:动态扫描程序中断程序 五、源代码(含文件头说明、语句行注释1 基本要求:ORG 0000HLJMP MAINORG 0100HMAIN:LCALL Init_DeviceMOV SP,#40HMOV DPTR,#TAB ;将DPTR地址指向表头MOV TMOD,#01H ;定时器采用T0定时方式一MOV TH0,#06H ;定时器赋予初值MOV TL0,#0C6HCLR

4、 P0.6 ;选择末位数码管CLR P0.7START:MOV R0,#00H ;赋初值0CLR AMOVC A,A+DPTR ;查表输出MOV P1,ASETB TR0 ;定时器开始工作HERE:JNB TF0,HERE ;等待溢出CLR TR0CLR TF0MOV TH0,#06H ;重新赋予初值MOV TL0,#0C6HCJNE R0,#0FH,NEXT ;等待末位数码管到FSJMP STARTNEXT:INC R0 ; R0加一MOV A,R0MOVC A,A+DPTRMOV P1,A ;P1输出SETB TR0SJMP HERE ;踏步org 1000hTAB:DB 0FCH,60H

5、,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0E6H,0EEH,3EH,1AH,7AH,9EH,8EH;-;- Generated Initialization File -;-$include (C8051F310.incpublic Init_DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions, ; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hre

6、tTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - U

7、nassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Push-Pull, Digital ; P1.1 - Unassigned, Push-Pull, Digital ; P1.2 - Unassigned, Push-Pull, Digital ; P1.3 - Unassigned, Push-Pull, Digital ; P1.4 - Unassigned, Push-Pull, Digital ; P1.5 - Unassigned, Push-Pul

8、l, Digital ; P1.6 - Unassigned, Push-Pull, Digital ; P1.7 - Unassigned, Push-Pull, Digital ; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov P1MDOUT, #0FFhmov P2MDOUT, #0C0hmov XBR1, #

9、040hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_InitretEND2 提高部分:ORG 0000HLJMP STARTORG 000BHLJMP TI00ORG 0300HSTART:LCALL Init_DeviceMOV R3,#00H ;百位数码管赋予初值MOV R6,#00H ;十位数码管赋予初值MOV R7,#01H ;个位数码管赋予初值MOV 60H

10、,#00H ;设置位控码MOV 61H,#40HMOV 62H,#80HMOV TMOD, #01H ;选择定时器T0方式一SETB ET0 ;开外中断T0SETB EAMOV TH0, #131 ;定时器赋予初值MOV TL0, #99MAIN:LJMP DISP ;跳入动态输出子程序MAIN1:LCALL COUNTERAJMP MAIN ;重新扫描;=动态输出子程序=DISP:MOV SP,#30H ;设置堆栈指针MOV R1,#60H ;位选指针赋初值MOV P1,#00H ;灯全灭;=LD0:MOV A,R1 ;取出位选码ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是

11、为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R7 ;取出段选码MOV DPTR,#TAB ;DPTR指向段选码表第一个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P1,#00H ;灯全灭INC R1 ;位选指针加一MOV A,R1 ;取出位选码ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R6 ;取出段选码MOV DPTR,#TAB ;DPTR指向段选码表第一

12、个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P1,#00H ;灯全灭INC R1MOV A,R1 ;取出位选码ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R3 ;取出段选码MOV DPTR,#TAB ;DPTR指向段选码表第一个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P1,#00H ;灯全灭LJMP

13、MAIN1 ;返回主程序;=延时1ms子程序=ORG 0050HDL1MS:MOV R4,#4 ;延时程序通过R4,R5 实现D1:MOV R5,#253NOPDJNZ R5,$DJNZ R4,D1RETORG 0100HCOUNTER:SETB TR0 ;定时器开启RET;中断程序TI00:MOV TH0, #133 ;中断程序重新赋予初值MOV TL0,# 99INC R7 ;个位加一CJNE R7,#0BH,S1 ;判断个位是否进位MOV R7,#01H ;重新将个位归零CJNE R6,#00H,S2 ;判断此时十位是否显示MOV R6,#01H ;若不显示则开启显示S2:INC R6

14、;十位加一CJNE R6,#0BH,S1 ;判断十位是否进位CJNE R3,#00H,S3 ;判断百位是否显示MOV R3,#01HS3:INC R3 ;百位加一MOV R6,#01H ;十位重新归零CJNE R3,#03H,S1 ;判断百位是否到2MOV P1,#00H ;如果到200则数码管全熄灭SJMP $ ;踏步停止S1:RETI ;中断返回ORG 0200H;=段选码表=;TAB: DB 00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H; $include (C8051F310.incpublic Init_DeviceINIT

15、SEGMENT CODErseg INIT; Peripheral specific initialization functions,; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-

16、Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Push-Pull, Digital ; P0.7 - Unassigned, Push-Pull, Digital; P1.0 - Unassigned, Push-Pull, Digital ; P1.1 - Unassigned, Push-Pull, Digital ; P

17、1.2 - Unassigned, Push-Pull, Digital ; P1.3 - Unassigned, Push-Pull, Digital ; P1.4 - Unassigned, Push-Pull, Digital ; P1.5 - Unassigned, Push-Pull, Digital ; P1.6 - Unassigned, Push-Pull, Digital ; P1.7 - Unassigned, Push-Pull, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, O

18、pen-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digitalmov P0MDOUT, #0C0hmov P1MDOUT, #0FFhmov XBR1, #040hret; Initialization function for device,; Call Init_Device from your main programInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_InitretEND六程

19、序测试方法与结果、软件性能分析1 基本要求:测试方法:观察P1端口输出波形 由图可知,LED数码管切换频率为1HZ,跑完一轮经过16s,满足定时要求。2 提高要求:1 首先测试时间,在中断程序处设置断点,观察每次计数的时间: 时间为0.5s,符合要求。2 硬件测试:在测试上测试是否能正常运行并实现功能 硬件测试知,该程序可实现功能并正常运行。ORG 0000HLJMP STARTORG 000BHLJMP TI00ORG 0300HSTART:LCALL Init_DeviceMOV R3,#00H ;百位数码管赋予初值MOV R6,#00H ;十位数码管赋予初值MOV R7,#01H ;个位

20、数码管赋予初值MOV 60H,#00H ;设置位控码MOV 61H,#40HMOV 62H,#80HMOV TMOD, #01H ;选择定时器T0方式一 SETB ET0 ;开外中断T0SETB EAMOV TH0, #83H ;定时器赋予初值MOV TL0, #63HMAIN:LJMP DISP ;跳入动态输出子程序MAIN1:LCALL COUNTERAJMP MAIN ;重新扫描;=动态输出子程序=DISP:MOV SP,#30H ;设置堆栈指针MOV R1,#60H ;位选指针赋初值MOV P1,#00H ;灯全灭;=LD0:MOV A,R1 ;取出位选码ANL P0,#3FH ;将P

21、0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R7 ;取出段选码MOV DPTR,#TAB ;DPTR指向段选码表第一个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P1,#00H ;灯全灭INC R1 ;位选指针加一MOV A,R1 ;取出位选码ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R6 ;取出段选码MOV DPTR,#T

22、AB ;DPTR指向段选码表第一个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P1,#00H ;灯全灭INC R1MOV A,R1 ;取出位选码ANL P0,#3FH ;将P0端口高两位置零(这样做的目的是为了避免用MOV指令影响到P0端口的低6位ORL P0,A ;输出位选信号MOV A,R3 ;取出段选码MOV DPTR,#TAB ;DPTR指向段选码表第一个数据MOVC A, A+DPTR ;查表,取出段选码MOV P1,A ;输出段选码LCALL DL1MS ;延时1ms,灯亮1msMOV P

23、1,#00H ;灯全灭LJMP MAIN1;=延时1ms子程序= ORG 0050HDL1MS:MOV R4,#6 ;延时程序通过R4,R5 实现D1:MOV R5,#252NOPDJNZ R5,$DJNZ R4,D1RETORG 0100HCOUNTER:SETB TR0 ;定时器开启RET;中断程序TI00:MOV TH0, #83H ;中断程序重新赋予初值 MOV TL0,#63HINC R7 ;个位加一CJNE R7,#0BH,S1 ;判断个位是否进位MOV R7,#01H ;重新将个位归零CJNE R6,#00H,S2 ;判断此时十位是否显示 MOV R6,#01H ;若不显示则开启

24、显示S2:INC R6 ;十位加一CJNE R6,#0BH,S1 ;判断十位是否进位CJNE R3,#00H,S3 ;判断百位是否显示MOV R3,#01HS3:INC R3 ;百位加一MOV R6,#01H ;十位重新归零CJNE R3,#03H,S1 ;判断百位是否到2MOV P1,#00H ;如果到200则数码管全熄灭SJMP $ ;踏步停止S1:RETI ;中断返回ORG 0200H;=段选码表=;TAB: DB 00H,0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H;$include (C8051F310.incpublic Init_

25、DeviceINIT SEGMENT CODErseg INIT; Peripheral specific initialization functions,; Called from the Init_Device labelPCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Push-P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论