项目四 八段数码管显示
- 格式:doc
- 大小:124.00 KB
- 文档页数:2
共阳四位八段数码管
标题:共阳四位八段数码管
共阳四位八段数码管是一种常见的显示器件,广泛应用于计时器、计数器等电子设备中。
它具有清晰的显示效果和简单的使用方式,为用户提供了便利。
数码管的工作原理是通过控制不同的管脚电平来点亮对应的数字或符号。
共阳四位八段数码管共有12个引脚,其中8个用于控制8段显示,另外4个引脚用于控制四位显示。
使用共阳四位八段数码管的步骤如下:首先,通过电路连接将数码管与主控芯片相连;然后,通过主控芯片发送信号控制数码管的显示内容;最后,数码管根据信号点亮相应的数字或符号。
在使用共阳四位八段数码管时,需要注意以下几点:首先,要保证电路连接正确,引脚对应无误;其次,要根据需要设置合适的亮
度,以便在不同环境下清晰可见;此外,要注意避免过高的电流和过高的温度,以防止数码管损坏。
总结起来,共阳四位八段数码管是一种常用的显示器件,具有清晰的显示效果和简单的使用方式。
在使用时要注意正确的连接和设置适当的亮度,以确保正常运行。
通过合理使用和维护,共阳四位八段数码管能够为用户提供稳定可靠的显示功能。
八段数码管的显示实验是一个程序语句长,编程设计的结构相对复杂的实验。
但是电类专业目一般在第4个实验就要编制八段数码管程序,因为该实验是其它后续大量实验的基础。
该实验是否能掌握,成为整个单片机实验课程能学习取得效果的转折点。
这样一个复杂的实验指望在2个学时的实验课上掌握是不可能的,采用如下的步骤和方法逐步推进会事半功倍!1.首先将八段数码管的实验箱电路在理论课程中作为例题出现,并且应该成为典型例题!图9-12是某实验箱的键盘和数码显示的部分电路,试回答下列问题:(1.)试写出8255的PA\PB\PC\及控制寄存器的地址;(2.)设置8255的控制寄存器,并初始化8255(88H);(3.)试写出键盘扫描程序一般应具有的功能;(4.)试编写在两位数码管上显示数字20编程思路(2段码为A4;0段选码为C0);(5).试写出用手按下键盘后,在八段数码管上显示对应键值的思路。
2. 实验课程内容必须分解2.1 首先完成能够在数码管上显示一个字符2.2 其次要求在数码管上能显示两个字符,动态显示2.3 最后要求在数码管上轮流显示0~F.3.教师应该提供2.1实验的参考程序作为引导,否则实践证明2个学时后编程程序的不超过10%4.附件 2.1程序cs8255 equ 0ffffh ;8255命令控制口outseg equ 0fffch ;字形控制口outbit equ 0fffdh ;字位/键扫控制口LEDBuf equ 60h ;显示缓冲Num equ 70h ;显示的数据DelayT equ 75h ;延迟参数org 0mov dptr,#CS8255mov a,#88h ;命令字:A,B口输出movx @dptr,a ;8255初始化FillBuf: mov a,#00hanl a,#0fhmov dptr,#LEDMapmovc a,@a+dptr ;数字转换成显示码mov @r0,a ;显示在码填入显示缓冲mov r2,#10000000b;从左边开始显示Loop:mov dptr,#OUTBITclr amovx @dptr,a ;关所有八段管mov a,@r0mov dptr,#OUTSEGmovx @dptr,amov dptr,#OUTBITmov a,r2movx @dptr,a ;显示一位八段管sjmp $LedMap: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h ;八段管显示码db 080h,090h,088h,083h,0c6h,0a1h,086h,08ehend。
八段码显示控制实训一 实训目的1. 学会利用PLC 控制LED 数码管。
2. 采用循环扫描法控制输出LED 显示。
二 实训器材1. 三菱可编程控制器实训装置 1台2. 八段码显示控制实训模块 1个3. 计算机 1台4. 编程电缆 1根5. 连接导线 若干三 实训要求八段码显示控制实训模块中利用LED 指示灯模拟一个八段数码管的每个笔段,数码管的每一段都对应于PLC 的一个输出端子,利用PLC 来控制LED 数码管的显示。
LED 面板示意图如下图所示。
abcdefgh八段码显示控制实训的控制要求: 1. 按下启动按钮,程序开始运行; 2. 按照从a ~h 依次显示各笔段;3. 按照0~F 的顺序依次显示十六进制数;4. 按照上面的顺序循环显示;5. 按下停止按钮,所有指示灯全部熄灭。
四 实训组成员名单组长: 徐玄 ;实训组成员: 胡建、费子威、王晓攀、郑婷婷 ; 实训操作员: 徐玄、郑婷婷 ;实训监护员: 胡建 ; 现象与结果记录员: 费子威、王晓攀 。
五 实训步骤及注意事项1. 理解实训的原理及控制要求,列出I/O 分配表。
2. 根据分配表编写实训程序。
3. 将编程电缆一端与PLC的编程接口相连,另一端与计算机串口连接。
4. 按I/O分配表接线,画出实训接线图。
5. 打开电源,输入编好的实训程序并下载到PLC中。
6. 下载完毕以后将主机上的RUN/STOP开关拨到RUN状态,若程序无逻辑错误则主机上的RUN运行指示灯亮,否则PROG-E出错指示灯亮,需要修改程序。
7. 当PLC指示RUN状态时,表明程序开始运行,观察运行的结果。
若结果与控制要求不符,则根据观察到的现象修改程序,重新下载进行调试,直至满足控制要求为止。
六实训注意事项1. 烧写程序前注意要接通电源,并检查主机PLC上的RUN/STOP开关是否置于“STOP”状态。
2. 运行程序要检查主机PLC上的RUN/STOP开关是否拨至“RUN”状态,并且检查主机上的RUN运行指示灯是否亮,指示灯表示程序无逻辑错误,否则PROG-E出错指示灯亮,需要修改程序。
原理图:8 个数码管它的数据线并联接到 JP5,位控制由 8 个 PNP 型三级管驱动后由 JP8 引出。
个。
我们分别把他命名为 A,B,C,D,E,F,G,H搞懂了这个原理, 我们如果要显示一个数字 2, 那么 A,B,G,E,D 这 5 个段的发光管亮就可以了。
也就是把B,E,H(小数点)不亮,其余全亮。
根据硬件的接法我们编出以下程序。
当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个 P2.7。
显示数字 2 则是 C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为 0(低电平)是亮为 1(高电平)是灭。
从高往低排列,(p0.7_p0.0)写成二进制为 01111110,把他转化为 16 进制则为A2H。
我们可以根据硬件的接线把数码管显示数字编制成一个表格,以后直接调用就行了。
原理图中把所有数码管的 8 个笔划段 a-h 同名端连在一起,而每一个显示器的公共极 COM 是各自独立地受 I/O 线控制。
CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,由 8 个 PNP 的三极管,来控制这 8 位哪一位工作,例如上面的例子中我们选中的是 P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只需要把程序 CLR P2.7 改为 CLR P2.0 即可。
在这里就有了一个矛盾, 所有数码管的 8 个笔划段 a-h 同名端连在一起, 那么在一个屏幕上如何显示0,1,2,3,4,5 这样不同的数字呢? 的确, 在这样的接法中,同一个瞬间所有的数码管显示都是相同的, 不能显示不同的数字。
在单片机里,首先显示一个数, 然后关掉.然后显示第二个数,又关掉, 那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约 1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
关于4 位共阳极 8 段式数码管的文章
4位共阳极8段式数码管是一种常见的显示器件,广泛
应用于各种电子设备中。
它由4个共阳极的数码管组成,
每个数码管由8个段组成,可以显示0-9的数字以及一些
字母和符号。
这种数码管具有体积小、功耗低、显示效果
好等特点,因此在电子产品中得到了广泛的应用。
首先,4位共阳极8段式数码管可以用来显示数字。
它
通过控制每个段的亮灭来显示不同的数字。
每个数码管有7
个段可以显示数字0-9,而另外一个段则用来表示小数点。
通过控制不同的段亮灭状态,就可以实现不同数字的显示。
这种数码管在计算器、电子钟等设备中得到了广泛应用。
除了数字之外,4位共阳极8段式数码管还可以显示一
些字母和符号。
通过特定的编码方式,将字母和符号对应
到不同的亮灭状态上,就可以在数码管上显示出来。
这为
一些需要显示字母和符号的设备提供了便利。
此外,4位共阳极8段式数码管还具有体积小、功耗低
等优点。
由于每个数码管只有7个段和一个小数点,所以
体积相对较小,可以方便地嵌入到各种电子设备中。
同时,由于共阳极的设计,每个段只需要接通正电压才能亮起,
因此功耗也相对较低。
这使得数码管在电池供电的设备中
得到了广泛应用。
总之,4位共阳极8段式数码管是一种常见的显示器件,具有显示数字、字母和符号的功能。
它体积小、功耗低,
在各种电子设备中得到了广泛应用。
随着科技的不断发展,数码管的显示效果和功能还将不断提升,为人们带来更多
便利和乐趣。
八段数码管显示实验总结以下是一篇关于八段数码管显示实验总结的文章,旨在详细介绍实验的步骤和结果。
引言:在现代电子技术领域中,七段数码管是一种常见的数字显示装置,常用于计时器、电子表、计数器等设备中。
而八段数码管则是七段数码管的进化版,它增加了一个小数点显示位,可以显示更多的数码和字符。
本篇文章将围绕八段数码管显示实验展开,介绍实验过程及实验结果。
第一步:材料准备进行八段数码管显示实验前,需要准备以下材料:1. 八段数码管:这是实验中的核心组件,用于显示数字和字符。
2. 转接板:用于连接八段数码管和单片机,实现电路的连接。
3. 单片机:本实验中我们选择XXXX型号的单片机,它具备足够的输入输出引脚,方便实验开展。
4. 面包板:用于搭建电路,连接各个组件。
5. 连接线:用于连接数码管、转接板和单片机。
第二步:电路连接1. 将转接板插入面包板中心位置,确保其稳固。
2. 将八段数码管插入转接板对应位置,并通过连接线将其与转接板上的引脚相连。
3. 将单片机插入转接板上的插槽,并通过连接线将其与转接板上的引脚相连。
4. 连接线的连接需要按照电路连接图进行,确保连线正确无误。
第三步:程序编写1. 打开XXXX软件,创建一个新的工程。
2. 在新的工程中,编写程序代码来控制八段数码管显示。
可以根据自己的需求,编写数字、字符等不同的显示内容。
3. 在程序代码中,通过设置不同的数位选择引脚和段选引脚的高低电平来实现不同位上的显示。
第四步:烧录程序1. 将单片机与电脑通过USB线连接。
2. 打开软件,选择对应的单片机型号和烧录方式。
3. 将程序烧录至单片机中,确保烧录成功。
第五步:实验结果在将程序烧录到单片机后,即可观察八段数码管的显示结果。
根据实验编写的程序,数码管将会显示相应的数字和字符。
可以通过改变程序代码中的内容,实现不同的显示效果。
比如,可以设置不同的数值、字符以及使用动态显示等功能。
结论:通过本次实验,我们成功地搭建了一个八段数码管的显示电路,并利用单片机编写了相应的程序进行控制。
硬件实验四 八段数码管显示一、实验要求利用实验箱提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。
2. 了解用总线方式控制数码管显示。
三、实验线路及连线四、实验说明1.本实验箱提供了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 。
连线 连接孔1连接孔2 1KEY/LED_CS CS0 位选通信号 (0x002H) 段码输出(0x004H) 数据总线七段数码管的字型代码表如下表:五、程序参考程序、框图OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口data segmentLEDBuf db 6 dup(?) ; 显示缓冲Num db 1 dup(?) ; 显示的数据DelayT db 1 dup(?)LEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h data endscode segmentassume cs:code, ds:dataDelay proc nearpush ax ; 延时子程序push cxmov al, 0mov cx,axloop $pop cxpop axretDelay endpDisplayLED proc nearmov bx, offset LEDBufmov cl, 6 ; 共6个八段管mov ah, 00100000b ; 从左边开始显示DLoop:mov dx, OUTBITmov al, 0out dx,al ; 关所有八段管mov al, [bx]mov dx, OUTSEGout dx,almov dx, OUTBITmov al, ahout dx, al ; 显示一位八段管push axmov ah, 1call Delaypop axshr ah, 1inc bxdec cljnz DLoopmov dx, OUTBITmov al, 0out dx,al ; 关所有八段管retDisplayLED endpStart proc nearmov ax, datamov ds, axmov Num, 0MLoop:inc Nummov ch,Nummov ah,0mov cl,6mov bx,offset LEDBufFillBuf:mov si, offset LEDMapmov al,chand al,0fhadd ax,simov si,axmov al,[si] ; 数据转换成显示码 mov [bx], al ; 显示码存入显示缓冲 inc bxinc chdec cljnz FillBufmov DelayT,20DispAgain:call DisplayLED ; 显示dec DelayTjnz DispAgainjmp MLoopStart endpcode endsend start六、实验步骤(1) 在实验箱断电的情况下连好线。
实验四数码管显示控制一、实验目的1、熟悉Keil uVision2软件的使用;2、掌握LED数码管显示接口技术;3、理解单片机定时器、中断技术。
二、实验设备及仪器Keil μVision2软件;单片机开发板;PC机一台三、实验原理及内容1、开发板上使用的LED 数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。
图4.1共阴四位八段LED数码管的原理图图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。
实验开发板中LED数码管模块的电路原理图,如图4.2所示。
SP1a~hP0.4~P0.7SP2P0.0~P0.3图4.2 LED数码管模块电路原理图图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。
当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。
训练内容一:轮流点亮数码管来检测数码管是否正常。
参考程序:ORG 00HAJMP MAINMAIN:SETB P1.2;LED流水灯模块锁存器的控制位MOV P0,#0FFH;关闭LED灯CLR P1.2SETB P1.3 ;点阵模块的行控制锁存器MOV P0,#0 ;关闭点阵行CLR P1.3MOV A,#11111110B;数码管“位选信号”初值,低电平有效LOOP:SETB P1.1;数码管位控制锁存器有效MOV P0,ACLR P1.1RL A ;形成新的“位选信号”,为选择下一位数码管做准备SETB P1.0;数码管段控制锁存器有效MOV P0,#0FFH ;数码管的所有段点亮,显示“8”CLR P1.0CALL DELAYSJMP LOOPDELAY:MOV R5,#0;延时子程序D1: MOV R6,#0D2:NOPDJNZ R6,D2DJNZ R5,D1RETEND训练内容二:静态显示,0~9计数。
八段数码管滚动显示程序设计在设计八段数码管滚动显示程序时,首先需要明确程序的功能和要求。
根据题目要求,我们需要设计一个程序,能够实现八段数码管的滚动显示,并能够控制滚动的速度和显示的内容。
在程序设计的过程中,我们需要考虑以下几个方面:1.数码管的显示方式:八段数码管的显示是基于数码管的每个段的开关状态来控制的,我们需要明确每个数字在数码管上的显示方式。
2.滚动的实现方式:滚动的实现方式可以有多种,例如左滚动、右滚动、上下滚动等。
我们需要根据题目要求确定滚动的方式,并设计相应的算法实现。
3.滚动的速度控制:滚动的速度可以通过控制滚动的时间间隔来控制。
我们可以使用定时器或者延时函数来实现速度的控制。
下面是一个八段数码管滚动显示程序的示例代码:```c#include <reg51.h>sbit A = P2^0;sbit B = P2^1;sbit C = P2^2;sbit D = P2^3;sbit E = P2^4;sbit F = P2^5;sbit G = P2^6;sbit DP = P2^7;//数码管的段码定义unsigned char code digit[10] =0xC0,//00xF9,//10xA4,//20xB0,//30x99,//40x92,//50x82,//60xF8,//70x80,//80x90//9};//数码管滚动显示函数void display(unsigned char *num, unsigned char delay) unsigned char i, j;// 滚动显示num数组中的数字for(i = 0; i < 8; i++)for(j = 0; j < delay; j++)A=0;B=0;C=0;D=0;E=0;F=0;G=0;DP=0;P1 = digit[num[i]];P0=0x01<<i;//延时,控制滚动速度// 此处使用延时函数,delayms函数需要自行实现delayms(1);}}void maiunsigned char num[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // 显示的数字unsigned char delay = 100; // 滚动的速度while(1)display(num, delay);}```在上述代码中,我们使用了一个8位的数组来存储要显示的数字。
八段数码管滚动显示程序设计实验三八段数码管滚动显示程序设计一、实验目的1.掌握数码管动态显示的原理;2.掌握74LS164扩展端口的方法;3.掌握数码管滚动显示的方法。
二、实验内容1.验证参考程序中的实验(显示数字0-5);2.修改程序:(1)使6个数码管从左到右重复滚动的显示一定的信息,比如:日期2008-3-20;(2)滚动显示的速度可以修改。
三、实验器材PC机一台, 仿真器一台, 实验箱一台, 导线若干。
四、实验原理图显示共有6位,采用动态显示,8段数码管是由8155的PB0、PB1经过74LS164串转并后输出得到,6位位码由8155的PA0口输出,经UA2003反向驱动后,选择相应的显示位。
实验中数据输出口地址为0e102h,时钟为输出地址为0e102h,位选通输出地址位0e101h。
实验原理图见图4-1。
图4-1 实验原理图五、实验步骤1.按照实验一中的建立工程的步骤,建立本实验内容相应的工程;2.运用调试工具,调试软件,观察现象;3.调试修改程序观察现象。
六、参考程序/* “验证式"?实验十一八段数码管显示 */#include#define LEDLen 6 //6个数码灯//以下定义8155为PA、PB为基本I/o模式,PC为输出模式#define mode 0x03;/* 8155的命令状态口寄存器地址 */#define CAddr XBYTE[0xe100]/* 8155的PA口地址,用于数码灯的位控制 */#define OUTBIT XBYTE[0xe101]/* 8155的PB口地址,其PB0和PB1用于74Ls164串行输入,控制数码管的段 */#define CLK164 XBYTE[0xe102]#define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */ /* 键盘读入口 */#define IN XBYTE[0xe103]/* 显示缓冲 */unsigned char LEDBuf[LEDLen];/* 八段管显示码共阴极字符显示*/code unsigned char LEDMAP[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;/* 6个数码管从左边开始显示,0010 0000 */Pos = 0x20;for (i = 0; i < LEDLen; i++){/* 六个数码管位控制为零,实现关所有八段管 */OUTBIT = 0;//数码管需要显示的段数据LED = LEDBuf[i];//8155通过PB0和PB1向74Ls164送段数据,串行输入,74Ls164并行输出到数码管段for (j = 0; j < 8; j++){//每个数据有8位,开始检测每一位的情况,先检测高位if(LED & 0x80) DAT164 = 1;else DAT164 = 0;//必须PB1(CLK164)由低位向高位跳变,才能PB0(DAT164)发送一位数据CLK164 = CLK164|0x02;//CLK164置0CLK164 = CLK164&0xfd;//为下一位发送做准备LED <<= 1;}OUTBIT = Pos; /* 显示一位八段管 */ Delay(1);Pos >>= 1; /* 显示下一位 */}OUTBIT = 0; /* 关所有八段管 */}void main(){unsigned char i = 0;unsigned char j;CAddr = mode;while(1){//保证数组里面的数据在0~15中间循环 LEDBuf[0] = LEDMAP[ i & 0x0f]; LEDBuf[1] = LEDMAP[(i+1) & 0x0f]; LEDBuf[2] = LEDMAP[(i+2) & 0x0f]; LEDBuf[3] = LEDMAP[(i+3) & 0x0f];LEDBuf[4] = LEDMAP[(i+4) & 0x0f];LEDBuf[5] = LEDMAP[(i+5) & 0x0f];i++;for(j=0; j<30; j++)DisplayLED(); /* 延时 */}}七、实验现象当程序正常烧入并全速运行后,发现数码管的显示是从左到右滚动显示,并且显示的值是“0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f”轮流显示,通过延时可以调节滚动的快慢。
实验一 八段数码管显示实验一、实验目的:1、了解数码管动态显示的原理。
2、了解74LS164扩展端口的方法。
二、实验要求:利用实验仪提供的显示电路,动态显示一行数据。
三、实验电路:这里只是显示草图,详细原理参见第一章的1.1.15 “8155键显模块”。
四、实验说明:1、本实验仪提供了8段码数码管LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,采用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。
2六、实验步骤:1、将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
2、进入KEIL软件界面,点击项目/打开项目在C:\KEIL\UV2\次1配套实验例程中选择实验一,内有ASM和C51两种程序,进入ASM 文件夹打开LED项目文件进入如图所示界面点击“调试/启动/停止调试”,进入调试界面,点击“调试/运行”可看到8段数码管交替显示0—F七、实验程序:OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164时钟位)DAT164 equ 0e102h ; 段控制口(接164数据位)IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;org 0000hljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 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, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov 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, FillBuf mov DelayT,#30 DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND。
单片机实验报告(四)实验名称八段数码管显示(51/96/88)一、实验目的1.了解数码管动态显示的原理。
2.了解用总线方式控制数码管显示二、实验原理1.本实验仪提供了 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。
三、实验所用仪器LED 、 89C51 、试验箱、导线四、操作步骤图1-1 实验电路及其连线图1-2 七段数码管的字形代码表图1-3 实验框图五、实验程序1、wave实验箱实验程序ORG 0100HMAIN: MOV SP,#70HMOV 75H,#1MOV 76H,#1MOV 77H,#5MOV 78H,#9MOV 79H,#9MOV 7AH,#1MOV R4,#6ONE: LCALL BRITHDAY ;进入死循环,让数码管都一直亮着 LJMP ONEBRITHDAY:MOV R0,#75H;给R0一个单元地址75HMOV R3,#01H ;位选码只让第一个数码管亮MOV A,R3 ;将R3的值给ALOOP: MOV DPTR,#8002HMOVX @DPTR,AINC DPTRINC DPTRMOV A,@R0ADD A,#0DHMOVC A,@A+PCMOVX @DPTR,AACALL DL1MSINC R0MOV A,R3JB ACC.5,LOOP1RL AMOV R3,AAJMP LOOPLOOP1:RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,DB 7DH,07H,7FH,6FH,77H,7CHDL1ms: MOV R7,#02HLOOP2: MOV R6,#0F6H ;1LOOP3: DJNZ R6,LOOP3 ;2DJNZ R7,LOOP2 ;2 1000-1*2-2*2-2*2*2-1*2=948 948%4=246(F6H)RET程序设计思路:在89c51内部的RAM中设置6个缓冲单元,分别存放显示器要显示的6位的数据。
1.七段数码管的字型代码表如下表:2.程序框图:3.实验线路:4.实验步骤:(1)设定工作模式为模式2,即程序空间在仿真器上,数据空间在用户板上。
把第“40”号模块“键盘显示”的片选信号CS40孔接第“36”号模块“片选信号”YS0(08000-08FFFH)孔。
(2)编程并调试。
5.程序清单:八段数码管显示#define LEDLen 6xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口xdata unsigned char IN _at_ 0x8001; // 键盘读入口unsigned char LEDBuf[LEDLen]; // 显示缓冲code unsigned char LEDMAP[] = { // 八段管显示码显示内容0~F 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i;unsigned char Pos;unsigned char LED;Pos = 0x20; // 从左边开始显示for (i = 0; i < LEDLen; i++){OUTBIT = 0; // 关所有八段管LED = LEDBuf[i];OUTSEG = LED;OUTBIT = Pos; // 显示一位八段管Delay(5);Pos >>= 1; // 显示下一位}OUTBIT = 0; // 关所有八段管}void main(){unsigned char i = 0;unsigned char j;while(1) {LEDBuf[0] = LEDMAP[ i & 0x0f]; // 数码管显示内容LEDBuf[1] = LEDMAP[(i+1) & 0x0f];LEDBuf[2] = LEDMAP[(i+2) & 0x0f];LEDBuf[3] = LEDMAP[(i+3) & 0x0f];LEDBuf[4] = LEDMAP[(i+4) & 0x0f];LEDBuf[5] = LEDMAP[(i+5) & 0x0f];i++;for(j=0; j<30; j++) // 延时DisplayLED();}}。
实验一八段数码管显示1、实验目的:(1)了解数码管动态显示的原理。
(2)了解74LS164扩展端口的方法。
2、实验要求:利用实验仪提供的显示电路,动态显示一行数据.3、实验电路图LED1LED2LED3LED4LED5LED64、实验器材:(1)超想-3000TB综合实验仪 1 台(2)超想3000仿真器 1 台(3)计算机 1 台5、实验连线无 6、实验说明:(1)本实验仪提供了8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经Ua2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,并且实现移位。
向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。
(2)七段数码管的字型代码表显示字形g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 6bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F1111 71hab c def g dp7、程序框图8、实验步骤1.将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
【关键字】设计module sev_seg_led( Clk, //Key_n,Sev_Seg_Led_Data_n, //参数名del);input Clk; //50mhz脉冲名input [3:0] Key_n; //4个按键key——1 2 3 4output [6:0] Sev_Seg_Led_Data_n; //7个输出output [2:0] del; /*3-8译码器输出*///输控制八个信号/*---------------------------------------------------*//*---------------------------------------------------*/reg [6:0] Led1,Led2; //中间量reg [31:0] Cout;reg Clk_En;reg [2:0] i;reg [2:0] del;always @(posedge Clk ) //判断clk的值1?0?posedge上升沿if whenbegin // 括号{}//d50_000 十进制五万'd1Cout <= (Cout == 32'd50_000) ? 32'd0 : (Cout + 32'd1); //d十进制//分频//《=负值语句,可同时执// ==判断句Clk_En <= (Cout == 32'd50_000) ? 1'd1 : 1'd0; //分频。
if(Clk_En) //==0.5s 判断是否等于1begini <= i + 3'd1; //i+1del<=i; //是三八译码器三个输入端自身+1endendalways@(Key_n) //判断四个按键是否有值,是否有变化begincase (Key_n)4'b0000: begin Led2<= 7'b0111_111;Led1<=7'b0111_111; end //b二进制0111 个位数4'b0001: begin Led2<= 7'b0000_110;Led1<=7'b0111_111;end4'b0010: begin Led2<= 7'b1011_011;Led1<=7'b0111_111;end4'b0011: begin Led2 <= 7'b1001_111;Led1<=7'b0111_111;end4'b0100: begin Led2 <= 7'b1100_110;Led1<=7'b0111_111;end4'b0101: begin Led2 <= 7'b1101_101;Led1<=7'b0111_111;end4'b0110: begin Led2 <= 7'b1111_101;Led1<=7'b0111_111;end4'b0111: begin Led2 <= 7'b0000_111;Led1<=7'b0111_111;end4'b1000: begin Led2<= 7'b1111_111;Led1<=7'b0111_111;end4'b1001: begin Led2 <= 7'b1101_111;Led1<=7'b0111_111;end4'b1010: begin Led2 <= 7'b0111_111;Led1<=7'b0000_110;end//十位数4'b1011: begin Led2 <= 7'b0000_110; Led1<=7'b0000_110;end4'b1100: begin Led2 <= 7'b1011_011;Led1<=7'b0000_110;end4'b1101: begin Led2 <= 7'b1001_111;Led1<=7'b0000_110; end4'b1110: begin Led2 <= 7'b1100_110;Led1<=7'b0000_110;end4'b1111: begin Led2 <= 7'b1101_101;Led1<=7'b0000_110; end//用两位数码管显示//2个数码管奇数位偶数位default :begin Led1=Led2 <= 7'b0000_000;endendcaseend/*---------------------------------------------------*/assignSev_Seg_Led_Data_n =(del%2)?Led1:Led2;/*---------------------------------------------------*/Endmodule此文档是由网络收集并进行重新排版整理.word可编辑版本!。