8单片机原理(控制数码管显示)

合集下载

单片机静态显示原理

单片机静态显示原理

单片机静态显示原理
单片机静态显示的原理如下:
1. 首先,单片机需要输出数字信号到LED数码管。

单片机通过IO口输出高低电平来控制LED数码管的亮灭,从而显示相应的数字。

2. 其次,单片机需要控制LED数码管的选择。

在多位数码管显
示中,单片机需要通过控制数码管的选择引脚来选择需要显示的数
码管,使其处于工作状态。

3. 然后,单片机需要按照一定的时间间隔不断地刷新LED数码
管的显示。

由于人眼的视觉暂留效应,LED数码管的刷新频率要足
够高,以保证人眼看到的是稳定的数字显示而不是闪烁的效果。

总的来说,单片机静态显示的原理就是通过控制IO口输出数字
信号,选择LED数码管并按照一定的刷新频率来实现数字的静态显示。

这种显示方法简单可靠,适用于对显示刷新速度要求不高的场合。

单片机的共阴共阳8段码的原理及显示代码

单片机的共阴共阳8段码的原理及显示代码

数码管之共阴极与共阳极编码(1)一个数码管有八段:A,B,C,D,E,F ,G,H,DP,即由八个发光二极管组成;因为发光二极管导通的方向是一定的(导通电压一般取为1.7V),这八个发光二极管的公共端有两种:可以分别接+5V(即为共阳极数码管)或接地(即为共阴极数码管);故可分共阳极(公共端接高电平或+5V电压)和共阴极(共低电平或接地)两种数码管(2)其中每个段均有0(不导通)和1(导通发光)两种状态,但共阳极数码管和共阴极数码管显然是不同的(3)它在程序中的应用是用一个八位二进制数表示,A为最低位,...,F为最高位(第八位)(4)共阳极:位选为高电平(即1)选中数码管,各段选为低电平(即0接地时)选中各数码段,由0到f的编码为:uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};共阴极:位选为低电平(即0)选中数码管,各段选为高电平(即1接+5V时)选中各数码段,uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};仅供个人用于学习、研究;不得用于商业用途。

For personal use only in study and research; not for commercial use.Nur für den persönlichen für Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l 'étude et la recherche uniquement à des fins personnelles; pas à des fins commerciales.толькодля людей, которые используются для обучения, исследований и не должны использоваться в коммерческих целях.以下无正文。

数码管的工作原理

数码管的工作原理

数码管的工作原理
数码管是一种用于显示数字和部分字母的电子组件,它由多个发光二极管(LED)组成。

数码管的工作原理基于LED的发
光特性和电流控制。

首先,每个数码管由七个LED组成,排列成数字“8”的形状。

其中六个LED用于表示数字的不同线段,而第七个LED用于
表示小数点。

每个LED都有两个电极,一极称为阳极(A, B, C, D, E, F, G),另一极称为阴极(COM)。

当通电时,通过选择特定的阳极LED和对应的阴极(COM),就可以点亮特定的线段或小数点。

例如,若要显示数字“0”,
则需要点亮A、B、C、D、E、F这六个LED线段,同时将对
应的COM与负极连接。

为了控制每个线段的点亮与熄灭,通常使用多路复用技术。

多路复用将每个数码管的阴极通过交替地切换电平来控制。

通过快速切换和合理的时间间隔,使得人眼无法察觉到线段熄灭的变化,从而达到动态显示的效果。

除了显示数字,数码管还可以通过组合点亮特定的LED线段
来显示部分字母。

这是通过将多个数码管排列在一起,并控制它们的阴极(COM)来实现的。

总的来说,数码管通过控制不同的LED线段的点亮与熄灭,
以及多路复用技术来实现数字和部分字母的显示。

数码管的工作原理简单而有效,使得它在数字显示领域广泛应用。

单片机控制数码管动态扫描显示原理

单片机控制数码管动态扫描显示原理

P02 P03 P04 P05 P06
11 P01
P00
7 4 2 110
3
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
DPY 4 -LED
P20 P21 6 C0 P22 8 C2 P23 9 C3
12 C4
LED
U1
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的 工作方式,低四位用于T0,高四位用于T1。其格式 如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的 TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时, 要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为 高电平时,才能启动定时/计数器工作。即此时定时器的启 动条件,加上了INT0/1引脚为高电平这一条件。
VCC GND RXD TXD ALE/ P PSEN
40 20 10 11 30 29
P 14 P 15 P 16 P 17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。

共阴极八段数码管显示数字0到9

共阴极八段数码管显示数字0到9

共阴极八段数码管显示数字0到9共阴极八段数码管是一种在嵌入式系统中常用的显示设备,它由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右下角一个点形的发光管作为显示小数点用。

要使共阴极八段数码管显示数字0到9,可以通过编程实现。

具体来说,可以定义共阴极数码管的引脚,并将数码管的8个阴极连接到8个GPIO引脚上。

然后,定义一个计数器,用于控制数码管显示的数字。

对于每个计数器的值,在代码中定义一个对应的数字显示模式,例如0的显示模式为abcdef,1的显示模式为bc,以此类推。

在每个时钟周期内,根据计数器的值,将对应的数字显示模式输出到数码管的引脚上,从而控制数码管的显示。

为了实现循环显示0-9,可以在计数器达到9时将其重置为0,从而实现循环显示的效果。

下面是一个简单的Verilog代码示例,用于更好地理解:```verilogmodule display(input clk,output reg [7:0] seg,reg [3:0] cnt;always @(posedge clk) begincase(cnt)4'h0: seg = 8'b11000000; //显示04'h1: seg = 8'b11111001; //显示14'h2: seg = 8'b10100100; //显示24'h3: seg = 8'b10110000; //显示34'h4: seg = 8'b10011001; //显示44'h5: seg = 8'b10010010; //显示54'h6: seg = 8'b10000010; //显示64'h7: seg = 8'b1111。

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验

单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。

实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。

提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。

;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov 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, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov 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, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, 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 XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。

单片机八段数码管显示实验原理及分析报告

单片机八段数码管显示实验原理及分析报告

八段数码管显示实验原理及分析报告学 院 计算机工程学院 专 业 计算机科学与技术 年级班别 09计算机科学与技术1班 学 号 2009404010123 学生姓名 郑伟伟 指导教师 李 永2011年 1月18 日JINGCHU UNIVERSITY OF TECHNOLOGY目录一、实验项目的目标 (3)二、八段数码管显示实验原理及分析 (3)1、实验线路 (3)2、实验器材 (3)3、实验工作原理 (4)4、实验步骤 (5)5、实验现象的分析说明 (5)6、程序框架图 (6)7、实验所用芯片的使用介绍 (7)(1)、8155IO/RAM扩展芯片说明 (7)(2)、74ls164芯片说明 (8)8、实验代码分析 (8)三、调试 (16)四、心得体会 (17)一、实验项目的目标:1、了解数码管动态显示的原理。

2、了解74LS164扩展端口的方法。

3、利用实验仪提供的显示电路,动态显示一行数据。

二、实验项目的原理1实验线路:这里只是显示草图,详细原理参见第一章的1.1.15 “8155键显模块”。

2、实验器材:1、超想-3000TC综合实验仪 1 台2、KEIL仿真器 1 台3、计算机 1 台3、实验工作原理:(1)、本实验仪提供了8段码数码管LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,采用动态方式显示。

8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。

6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位。

74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。

写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,向显示位选通地址输出高电平就可以点亮相应的显示位。

本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。

八段数码管显示实验

八段数码管显示实验

八段数码管显示实验报告一.设计目的1.掌握数码管动态显示的原理;2.学会用总线方式控制数码管显示;3.熟悉利用单片机驱动数码管的电路及编程原理。

二.设计内容利用实验箱提供的显示电路,设计一个能够动态显示一行数据的系统。

实验箱一般提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

能够正常显示数据之后,请改变一下数字的变化速度或者LED显示的方向。

三.实验原理1.原理:当用总线方式驱动八段显示管时,请将八段的驱动方式选择开关拨到“内驱”位置;当用I/O方式驱动八段显示管时,请将开关拨到“外驱”位置。

本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片74LS374输出。

位码经MC1413或ULN2003倒相驱动后,选择相应显示位。

本实验仪中 8位段码输出地址为0X004H,位码输出地址为 0X002H。

此处X 是由KEY/LED CS 决定,参见地址译码。

做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。

七段数码管的字型代码表如下表:2. 3.程序OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #01call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管 retStart:mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopend四.设计步骤1.根据任务书中的系统性能要求,设计实验流程框图;2.学习课程设计相关的原理知识,特别是数码管动态显示的原理;3.对设计出的流程框图,使用汇编语言完成源代码的编写;4.在实验箱配套软件上完成汇编程序的初步调试;5.连接实验箱,完成系统功能性测试;6.完成课程设计报告,报告内容包括:a、程序设计流程框图;b、说明设计的依据;c、记录程序测试的过程;d、说明实验过程中遇到的问题和解决的方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7
程序
MOVC A,@A+DPTR MOV P0,A MOV P2,#0FBH ACALL DELAY MOV P2,#0FFH MOV A,#0 MOVC A,@A+DPTR MOV P0,A MOV P2,#0F7H ACALL DELAY MOV P2,#0FFH SJMP MAIN ;取显示数据 ;送显示数据到数据总线 ;第三位数码管选通显示 ;调用延时子程序 ;关显示 ;偏移量1送A ;取显示数据 ;送显示数据到数据总线 ;第四位数码管选通显示 ;调用延时子程序 ;关显示 ;转到MAIN处运行程序
RN1
16 15 14 13 12 11 10 9 1k
18
XTAL2
9
RST
29 30 31
PSEN ALE EA
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89S51
序 号
1
元件
关键字
参数
51单片机AT89C51 AT89C51 排阻 数码管 RES16DIPS 330欧姆
第三 单元
项目四、控制数码管显示
陈永杰
1
1位数码管显示
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89S51
显示数据 扫 描 信 号
P20 P21 P22 P23
R1
10k
R2
10k
R3
10k
R4
10k
四位数码管动态显示电路 序号 1 元件 51单片机AT89C51 关键字 AT89C51 参数
2
3 4
排阻
数码管 三极管
MOVC 是特殊数据的转移,一般在查表时用到。
5
程序细析
MOV P1,#11111110B
INC R1
INC 自加一指令,执行完成后R1的内容加一
DEC 自减一指令,执行完成后R1的内容减一
6
4位数码管显示
四位数码管引脚排列 四位数码管实物
动态扫描显示原理
显示过程如下:将第一个数码 管的显示数据送到显示数据端 ,扫描信号A置低电平,其余为 高电平,则Q1导通第一个数码 管得电显示,而Q2、Q3、Q4 由于基极为高电平而截止,相 应的数码管不能得电工作;同 理,依次显示第二、三、四个 数码管,虽然在任一时间里, 只能点亮一个数码管,但只要 从第一个到最后一个的扫描时 间不超过16ms,由于人眼的视 觉延时效应,感觉就会同时看 到所有数字
18
XTAL2
8 7 6 5 4 3 2 1
9
RN1
500
RST
R5
9 10 11 12 13 14 15 16
R6
200
R7
200
R8
200
200
29 30 31
PSEN ALE EA
P00 P01 P02 P03 P04 P05 P06 P07
Q1
9012
Q2
9012
Q3
9012
Q4
9012
1 2 3 4 5 6 7 8
2
1位数码管的查表实现
开始 偏移量R1置初值
循环次数放入R2 取数据表地址 偏移量送寄存器A
取数据 偏移量增加 数据输出 R2减一是否为0? 是 一位数码管显示0~9流程图 否
调用延时子程序
3
MAIN:
程序
ORG 0000H MOV R1,#0 ;偏移量R1置初值 MOV R2,#10 ;设置循环次数 MOV DPTR,#TAB ;取数据表地址 LOOP: MOV A,R1 ;偏移量送寄存器A MOVC A,@A+DPTR;取显示数据 MOV P0,A ;送显示 CALL DELAY ;调用延时子程序 INC R1 ;偏移量加一 DJNZ R2,LOOP ;判断循环次数是否到10次 SJMP MAIN ;循环显示 ;================延时子程序======================== DELAY: MOV R7,#250 D1: MOV R6,#250 DJNZ R6,$ DJNZ R7,d1 RET ;=================显示数据表======================= ORG 0100H TAB: DB 0C0H ;0的显示代码 DB 0F9H ;1的显示代码 DB 0A4H ;2的显示代码 DB 0B0H ;3的显示代码 DB 099H ;4的显示代码 DB 092H ;5的显示代码 DB 082H ;6的显示代码 DB 0F8H ;7的显示代码 DB 080H ;8的显示代码 DB 090H ;9的显示代码 END
一位数码管显示电路
2 3
7SEG-MPXI-CA 红色,共阳
1
1位数码管显示
开始 向P0口输出数字0的编码 调用延时
调用延时
向P0口输出数字4的编码 调用延时 向P0口输出数字5的编码 调用延时 结束
向P0口输出数字1的编码
调用延时 向P0口输出数字2的编码 调用延时 向P0口输出数字3的编码
ORG 0030H MAIN: MOV P0,#0C0H CALL DELAY MOV P0,#0F9H CALL DELYA …… SJMP MAIN DELAY: MOV R7,#250 D1: MOV R6,#200 DJNZ R6,$ DJNZ R7,D1 RET END
显 示 数 据
a b c d e f g h com1 com2 com3 com4
Q1
9012
Q2
9012
Q3
9012
Q4
9012
R1
10k
R2
10k
R3
10k
R4
10k
扫 描 信 号
A B C D
四位数码管动态扫描显示原理
U1
19 XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 P00 P01 P02 P03 P04 P05 P06 P07 P20 P21 P22 P23
RES16DIPS
7SEG-MPXI-CA PNP
330欧姆
红色,共阳 PNP ,9012
6
4位数码管显示
开始 取数据表地址
偏移量3送A 取数据 数据输出到数据 总线 第一位选通显 示 调用延时子程序 关位选
偏移量2送A 取数据 数据输出到数据 总线 第二位选通显 示 调用延时子程序 关位选
偏移量1送A 取数据 数据输出到数据 总线 第三位选通显 示 调用延时子程序 关位选
偏移量0送A 取数据 数据输出到数据 总线 第四位选通显 示 调用延时子程序 关位选
四位数码管显示“3210”流程图

7
MAIN: LOOP:
程序
ORG 0000H MOV DPTR, #TABLE ;取数据表地址 MOV A,#3 ;偏移量3送A MOVC A,@A+DPTR ;取显示数据 MOV P0,A ;送显示数据到数据总线 MOV P2,#0FEH ;第一位数码管选通显示 ACALL DELAY ;调用延时子程序 MOV P2,#0FFH ;关显示 MOV A,#2 ;偏移量2送A MOVC A,@A+DPTR ;取显示数据 MOV P0,A ;送显示数据到数据总线 MOV P2,#0FDH ;第二位数码管选通显示 ACALL DELAY ;调用延时子程序 MOV P2,#0FFH ;关显示 MOV A,#1 ;偏移量1送A
;
7
程序
;;;;;;;;;;;;;;;;;;;;延时子程序 DELAY: MOV R7,#40 D1: MOV R6,#40 DJNZ R6,$ DJNZ R7,D1 RET ;;;;;;;;;;显示数据表 TABLE: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H ;0-9 END
8
程序细析
5
MOV
程序细析
ORG 0030H
DPTR, #TAB
;取数据表地址
DPTR : 特殊的寄存器,用来存放数据指针,数据指针指向的是数据的内 存地址 简单来说,DPTR存放的是地址
5
MOVC
程序细析
A , @A+DPTR ;取显示数据
MOVC 与MOV 的区别
MOV 是普通数据的转移指令,完成的是普通数据的赋值操作;
相关文档
最新文档