实验4.8位LED动态扫描显示实验
- 格式:doc
- 大小:24.50 KB
- 文档页数:2
51单片机实验报告二名称:LED动态扫描显示目的:掌握数码LED的动态扫描显示原理;学习延时子程序的编写和使用。
原理:为了节省输出端口数,数码LED显示一般采用动态扫描的方法,将所有数码LED的共阴极接在一个位型输出口上,将所有数码管的相同段接在一起作为字型口,软件控制每个数码LED轮流显示,任一时刻只一个数码亮,但扫描速度足够快时,视觉效果是8个数码LED同时亮。
电路图:流程图:汇编程序:ORG 0000HAJMP MAINORG 0080HMAIN:CLR P2.0 ;选中第一个数码管MOV P0, #3FH ;显示0LCALL DELAY ;调用延时MOV P0, #0FFH ;关显示SETB P2.0CLR P2.1 ;选中第二个数码管MOV P0, #06H ;显示1LCALL DELAYMOV P0, #0FFHSETB P2.1CLR P2.2 ;选中第三个数码管MOV P0, #5BH ;显示2LCALL DELAYMOV P0, #0FFHSETB P2.2CLR P2.3 ;选中第四个数码管MOV P0, #4FH ;显示3LCALL DELAYMOV P0, #0FFHSETB P2.3CLR P2.4 ;选中第五个数码管MOV P0, #66H ;显示4LCALL DELAYMOV P0, #0FFHSETB P2.4CLR P2.5 ;选中第六个数码管MOV P0, #6DH ;显示5LCALL DELAYMOV P0, #0FFHSETB P2.5CLR P2.6 ;选中第七个数码管MOV P0, #7DH ; 显示6LCALL DELAYMOV P0, #0FFHSETB P2.6CLR P2.7 ;选中第八个数码管MOV P0, #07H ; 显示7LCALL DELAYSETB P2.7MOV P0, #0FFHAJMP MAIN ;重新开始DELAY: ;延时子程序MOV R7 ,#2D1: MOV R6, #25D2: DJNZ R6, D2DJNZ R7, D1RETEND现象及结论:8只数码管循环滚动显示单个数字0—7。
单片机实验五LED数码管动态扫描显示实验一.实验目的掌握LED数码管动态扫描显示的原理和编程实现方法。
二.实验原理LED数码管动态扫描显示即各数码管循环轮流显示,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁现象,这种显示需要一个接口完成字形码的输出(段码),另一接口完成各数码管的点亮(位选)。
三.实验内容及要求1.对于显示的字形码数据此实验采用查表的方法来完成。
2.此实验要求是在八个数码管中显示学生的班级号(如11040601)或日历年月日(如2014 05 20)。
四.实验电路图中,SEG1为八个封装在一起的共阴数码管,RP1为排阻,其余同实验三,导线以总线形式完成。
五.实验步骤1.在KEIL4中编写、调试、编译程序。
2.在PRTUSE中设计电路,加载HEX文件运行。
3.(1)将单片机实验箱通过USB口与PC机连接;(2)用杜邦线(8根线)将实验箱上的JP8与J16连接(去掉原J15和J16之间的短路跳线帽),JP10与J12连接。
(3)打开实验箱电源开关POWER;(4)打开STC自动下载器,将步骤1中创建的*.HEX文件下载到单片机,完成后观测LED数码管显示内容。
六.实验参考程序(请同学自己编写实验程序)七.思考题1.某同学在实验时数码管闪烁,可能的原因是什么?2.为节省I/O口,可采用7段译码器(比如CD4511,74LS 等)和3-8译码器74LS138,如何连接电路并编程。
LDE数码管动态试验ORG 0000HAJMP MAINORG 0100HMAIN: SP,#60HMOV 30H,#02HMOV 31H,#00HMOV 32H,#01HMOV 33H,#04HMOV 34H,#00HMOV 35H,#05HMOV 36H,#02HMOV 37H,#00HSTART:MOV R0,#30HMOV R3,#0FEHNEXT: MOV P1,#0FFHMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,AMOV P1,R3LCALL DLY2MSINC R0JNB P1.7,STRATMOV A,R3RL AMOV R3,AAJMP NEXTDLY2MS:MOV R6,#2DL2: MOV R7,#250DL1:NOPNOPDJNZ R7,DL1DJNZ R6,DL2RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END。
实验一基本组合电路设计(1)实验目的:熟悉 Quartus U的文本输入设计法和原理图输入设计法,学习简单组合电路以及多层次电路的设计、仿真和硬件测试。
(2)实验内容:I.利用Quartus U完成2选1多路选择器的文本编辑输入。
【参考程序】:ENTITY mux21a ISPORT ( a, b, s: IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s = ' O' THEN y <= a ;ELSE y<= b ;END IF;END PROCESS;END ARCHITECTURE one ;n .将实验I中的2选1多路选择器生成一个元件 mux21a利用原理图输入设计方法实现图1-1的双2选1多路选择器,并将此文件放在同一目录中。
最后进行编译、仿真,并对其仿真波形作出分析说明。
川.对U进行引脚锁定及硬件下载测试。
建议选择实验电路模式5,用键1(PIOO, 引脚号为1)控制sO;用键2(PIO1,引脚号为2)控制s1; a3、a2和a1分别接clock5(引脚号为16)、clockO (引脚号为93)和clock2 (引脚号为17);输出信号outy接扬声器spker (引脚号为129)。
通过短路帽选择clock5接1024Hz 信号,clock0接256Hz信号,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2、控制s0、s1,可使扬声器输出不同音调)。
(3)实验报告:1.实验U的原理图。
2•实验U的仿真波形报告分析说明。
3.实验川硬件测试的详细实验说明。
图1-1 双2选1多路选择器实验_二基本时序电路设计(1)实验目的:熟悉Quartus U的VHDL文本设计过程,学习简单时序电路的设计、仿真和硬件测试。
8位8段LED数码管动态扫描显示
项目名称:8位8段LED数码管动态扫描显示班级:09电二姓名:解健学号:09020313
一.实验目的
1.掌握数码管动态扫描显示原理及实现方法。
2.掌握动态扫描显示电路驱动程序的编写方法。
二.实验电路
第一步:先在Proteu软件中设计仿真电路原理图。
第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。
流程图
开始灭显示器I=0延时Counter=0Counter=0选择段选择段点亮所有位按数值点亮位延时延时
Counter++YCounter<8NI++YNNCounter++YCounter<8N停止Y结束I<30
实验现象:
显示器点亮所有段,持续约1,然后灭显示器,持续2,最后显示“hello-93”,保持。
附:程序
#include#include#defineTRUE1#definedataPortP0#defineledConPortP 2
{unignedchari,counter=0;
for(i=0;i<30;i++){
voiddelay_5u(void){_nop_();_nop_();}
voiddelay_50u(void){unignedchari;for(i=0;i<4;i++){delay_5u() ;}}
voiddelay_100u(void){delay_50u();delay_50u();}
for(j=0;j<10;j++)delay_100u();ucM--;}}。
八段码显示控制实训一 实训目的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出错指示灯亮,需要修改程序。
实验 LED动态显示主要教学目标:掌握LED动态显示的方法。
教学的方法及教学手段:讲授法,讨论法,练习法,实验法教学重点及难点:LED动态显示实验内容1.LED用动态显示123456;2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。
(一)作法微型机定时地对显示器件扫描。
显示器件分时工作,每次只能有一个器件显示。
1.LED用动态显示123456;2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。
(二)1、8155 的PA口输出显示码,PB口用来输出位选码。
2、74LS07为6 位驱动器,为LED提供一定的驱动电流3、8155的PB口经75452缓冲器/驱动器反向后,作为位控信号。
4、75452内部包括两个缓冲器/驱动器,它们各有两个输入端。
(三)显示原理1、8155初始化,建立显示缓冲区为DISBUF, 存放待显示数据。
2、用软件译码法求出待显示的数对应的七段显示码,由PA口输出,并经过74LS07驱动后送到各显示器3、由PB口输出位选码。
各位从左至右依次显示,每个数码管显示1ms。
显示完最后一位数后,再重复上述过程,(四)电路图(五)参考程序#include <reg51.h>#include <intrins.h>#include <absacc.h>#define uint unsigned int#define uchar unsigned char/*8155控制字和PA,PB口地址定义*/ #define CON_8155 XBYTE[0x7F00] #define PA_8155 XBYTE[0x7F01] #define PB_8155 XBYTE[0x7F02] //数码管字型定义uchar LEDDA TA[]={0x3F, /*0*/0x06, /*1*/0x5B, /*2*/0x4F, /*3*/0x66, /*4*/0x6D, /*5*/0x7D, /*6*/0x07, /*7*/0x7F, /*8*/0x6F, /*9*/0x77, /*A*/0x7C, /*b*/0x39, /*C*/0x5E, /*d*/0x79, /*E*/0x71, /*F*/};//动态扫描时间间隔50ms标志位bit g_delay50ms = 0;//函数原型声明void Delay1ms(void);void Delay50ms(void);void main(){uchar i, selectLED;IT0 = 1; //外部中断0,边沿触发EX0 = 1;EA = 1;CON_8155 = 0x03; //PA口、PB口基本输入输出selectLED = 0x20; //LED位选,从左到右扫描while(1){for(i=1; i<7; i++){PA_8155 = LEDDATA[i]; //从8155 A口输出显示码PB_8155 = selectLED; //从8155 B口输出位选码selectLED = _cror_(selectLED, 1); //准备显示下一位if(selectLED == 0x80){selectLED = 0x20;}if (g_delay50ms){Delay50ms(); //动态扫描时间间隔50ms}else{Delay1ms(); //动态扫描时间间隔1ms}PB_8155=0x00; //消隐}}}void Int0(void) interrupt 0{g_delay50ms = !g_delay50ms;}void Delay1ms(void){uchar i, j, k;for(i=1; i>0; i--)for(j=142; j>0; j--)for(k=2; k>0; k--);}void Delay50ms(void){unsigned char a,b;for(b=173;b>0;b--)for(a=143;a>0;a--);}。
“八位数码管动态扫描”案例原理与测试说明
1程序设计目标及程序运行效果说明
本程序是动态扫描所有的数码管,从左到右8个数码管分别显示1、2、3、4、5、6、7、8。
2程序相关电路及工作原理说明
2.1 LED数码管电路
2.2 LED数码管引脚定义
2.3 工作原理
P0口的8位输出分别控制1个LED数码管的7段和一个小数点;而P2.3经反相器U4C控制74HC138的使能信号E3,结合P2.0、P2.1、P2.2这3个位选控制信号确定8个LED数码管中的哪个被点亮;电阻R15~R22为限流电阻。
当段选为高、使能信号有效时,对应的LED管将会发光。
通过以一定频率扫描位选信号,修改段选信号进行数码管点亮一段时间,从而给人视觉上几个数码管几乎同
时显示的效果。
3测试方法
(1)用STC ISP默认设置,打开工程中的HEX并下载
(2)下载后观察现象为:从左到右8个数码管分别显示1、2、3、4、5、6、7、8。
(3)本案例无需辅助操作。
4led 动态扫描显示及按键实验感想
在完成4LED动态扫描显示及按键实验后,我深深感受到了科技的实际应用与电路设计的美妙结合。
这不仅是一次对于理论知识的学习和巩固,更是一次将知识转化为实践的宝贵体验。
实验中,我们通过编程控制4个LED灯的亮灭,使其按照特定的模式进行动态扫描。
这其中涉及到了数字信号处理、逻辑门电路、微控制器等多个知识点。
每一个LED灯的亮与灭,都代表着一串代码的执行,每一次的动态扫描,都是程序在控制板上跑动的轨迹。
在实验过程中,我深刻体会到了编程的魅力。
通过编写程序,我可以精确地控制每一个LED灯的亮灭时间,甚至可以创造出复杂的扫描效果。
而按键的部分更是增添了实验的趣味性。
通过按键,我可以随时改变LED的扫描模式,每一次按键,都像是给程序注入了一个新的灵魂,使其焕发出不同的光彩。
当然,实验过程中也遇到了不少困难。
例如,如何确保4个LED 灯能够均匀地亮起与熄灭,如何处理按键抖动问题等。
但正是这些问题的存在,使得整个实验更加具有挑战性。
通过不断地尝试、调试,我最终克服了这些困难,也更加深入地理解了相关知识。
这次实验让我认识到,理论知识的学习固然重要,但只有将其应用于实践中,才能真正体会到知识的价值。
同时,实验中的每一个细节、每一个问题,都是对自身能力的锻炼与提升。
通过不断地实践与
尝试,我相信自己能够更好地掌握知识,更好地将理论知识与实践相结合。
未来,我计划进一步深入学习微控制器编程、电路设计等相关知识,希望能够为未来的科技应用做出更大的贡献。
同时,我也希望能够将这次实验的经验分享给更多的同学,共同探索科技的奥秘。
八位七段数码管动态显示电路的设计一、实验目的1、了解数码管的工作原理。
2、学习七段数码管显示译码器的设计。
3、学习VHDL的CASE语句及多层次设计方法。
二、实验原理七段数码管是电子开发过程中常用的输出显示设备。
在实验系统中使用的是两个四位一体、共阴极型七段数码管。
其单个静态数码管如下图4-4-1所示。
图4-1 静态七段数码管由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。
反之则不亮。
共阳极性的数码管与之相么。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。
在实验中时,数字时钟选择1024HZ作为扫描时钟,用四个拨动开关做为输入,当四个拨动开关置为一个二进制数时,在数码管上显示其十六进制的值。
四、实验步骤1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中提供的示例程序。
4、编写完VHDL程序后,保存起来。
方法同实验一。
5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,根据用户自己的要求进行管脚分配。
分配完成后,再进行全编译一次,以使管脚分配生效。
7、根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起来。
如果是调用的本书提供的VHDL代码,则实验连线如下:CLK:FPGA时钟信号,接数字时钟CLOCK3,并将这组时钟设为1024HZ。
KEY[3..0]:数码管显示输入信号,分别接拨动开关的S4,S3,S2,S1。
数字电子技术仿真实验实验题目:8位LED数码管动态显示电路院系:电子与信息工程学院专业:电子信息工程班级:2010级X班老师:XXX姓名:XXX学号:XXXXXXXXXX8位LED数码管动态显示电路的仿真测试一,实验目的:(1)掌握LED数码管动态显示的工作原理。
(2)掌握BCD—七段显示译码器74LS48,3—8线译码器74LS138的应用。
(3)掌握MultiSIM中LED数码管的应用。
二,实验原理:LED数码管有静态显示和动态显示2种显示方式。
LED数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地,且使用一片译码驱动芯片驱动一位七段LED数码管进行数码显示。
LED数码管工作于动态显示方式时,使用一片译码驱动芯片驱动多位七段LED数码管,有控制电路控制各位显示器分别进行数码显示,即每个显示器按照不同的时间轮流使用这片译码驱动芯片,从而是电路更加简单。
三,实验设配及元器件:四,仿真结果:1,显示相同数码电路的仿真测试:2,显示不同数码电路的仿真实验:(1)当频率为100HZ时:LED数码管显示的数码及显示的顺序:(2)当频率为100KHZ时:LED数码管显示的数码及显示的顺序:五,实验总结:通过此次实验,不仅让我对仿真更加熟悉,也加深了我对数字电子电路的理解。
在仿真过程中,我遇到了很多困难,经过思考和尝试,终于将实验做成功了。
例如刚开始我不知道字符信号发生器再那里,于是就在原件中一个一个的试,很快就在工具栏上的图标中找到了。
还有数码管,在元件库中找了很久,终于在Indicators下面的HEX_DISPLAY中才找到。
电路图连接完后,因为字符信号发生器没有接地,数码管始终不能显示。
改正后,刚开始又始终只有一位数码管显示,经过思考,原来是频率低了,当我把频率变大后,循环扫描的速度变得足够快,就可以看到8位LED数码管的持续发光。
实验四 LED动态显示实验1、实验目的学习LED数码显示器与并行接口扩展电路设计方法,理解LED动态显示原理,并掌握LED动态显示的编程方法,练习编程、调试的工作过程。
2、实验设备单片机实训与开发系统主机模块1台LED动态显示实验模块1台并口线1根40芯连接排线1根连接线若干相关控制软件3、实验电路原理图及其说明在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个(7段LED)或两个(“米”字段LED)8位I/O口控制,形成段选线的多路复用。
而各位的共阳极或共阴极分别由相应的I/O口控制,实现各位的分时选通。
如图4-1所示:是一个6位7段LED动态显示器电路原理图,六位数码管采用共阳极方式,U1控制段选线,由P2.7选通,U2控制位,由P2.6选通。
由于各位的段选线并联,段选码的输出对各位来说都是相同的。
因此,同一时刻,如果各位位选线都处于选通状态的话,6位LED将显示相同的字符。
若要各位LED 能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的字型码,这样,同一时刻,6位LED中只有选通的那一位显示出字符,而其它5位则是熄灭的。
同样,在下一时刻,只让下一位的位选线处于选通状态,而其它各位的位选线处于关闭状态,同时,在段选线上输出相应位将要显示字符的字型码,则同一时刻,只有选通位显示出相应的字符,而其它各位则是熄灭的。
如此循环下去,就可以使各位显示出将要显示的字符,虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位都熄灭,但由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,以达到显示的目的。
共阳极7段LED数码管的显示字形编码表如下表:表1-1 共阳极7段LED数码管的显示字型编码表4、实验内容在RAM 71H~76H中分别存入6位数字:1、2、3、4、5、6,要求将这6位数字分别显示在6个数码管上.5、实验步骤1)用40芯排线把主机模块和LED动态显示实验模块连接起来,运行参考程序。
单片机实训报告4个8×8LED点阵显示第一天:我们来到实训室,根据老师发下来的项目实训资料来完成单片机控制4个8×8LED显示实训。
我们认真阅读实训内容,打开电脑,打开单片机系统,打开proteu软件,放置以及排序芯片,电阻、译码器、单片机控制的4个8×8LED点阵显示屏。
第二天:对做好的硬件连接之后,检查所连接好的线是否正确。
根据任意编程进行点阵显示,排查连接的是否有错误。
第三天:分别打开EA T589、字模软件,在EA T598软件上进行编程的时候分清子程序码,使用字模软件的横向取模,取汉字的A51格式。
第四天:打开软件,在软件上进行汇编语言程序设计,设计出了汉字显示,学习和熟悉单片机的指令程序。
第五天:根据之前所设计的汉字显示来修改,直到完成汉字的切换以及汉字的滚动效果。
然后根据自己的兴趣完成自己的作品。
实训结果:硬件连接完成,可以实现之后的汉字显示汉字切换以及汉字滚动,认真仔细的接好硬件连接,注意在字模上的取模,经过系列的汇编语言程序设计正常运行体会:通过这一周的实训,我们很好的完成了单片机的实训,收获了许多单片机的知识。
完成了单片机控制4个8×8点阵显示汉字、切换以及滚动汉字。
在这次的单片机实训中,了解单片机的用途,译码器原理,掌握单片机的编译程序和装载并进行运行,学习硬件和软件的基本操作,熟悉运行结果及检查进行实践。
ORG 0000HLJMP MAINORG 0040H MAIN:MOV SP,#5FH MOV DPTR,#TAB MOV R1,#0 LCALL LALJMP MAINLA:MOV R0,#00H MOV R2,#0MOV R4,#32LB:MOV P1,R0;行MOV A,R2MOVC A,@A+DPTR MOV P0,AINC R2MOV A,R2MOVC A,@A+DPTR MOV P2,ALCALL DELAYINC R2INC R0DJNZ R4,LBMOV R5,#8DJNZ R5,LARETDELAY: MOV R6,#20 D1: MOV R7,#30D2: DJNZ R7,$DJNZ R6,D1RETTAB:DB04H,20H,04H,20H,0FFH,0FEH,04H,20H,00H,00H,7CH,0F8H,44H,8 8H,44H,0F8H DB 44H,88H,7CH,88H,44H,0F8H,44H,88H,7DH,08H,45H,08H,42H,28 H,04H,10HEND实训步骤:1.硬件连接2.检查连线是或否正确3.根据编程进行点阵显示4.打开软件进行设计汉字的显示5.分清程序各码进行编译程序并运行6.自己的趣味设计。
设计报告课程名称电子技术基础I任课教师设计题目8位十进制数动态扫描显示控制电路班级8位十进制数数码动态扫描电路设计简介:所谓动态扫描显示,就是让各位LED按照一定的顺序轮流地发光显示。
只要每秒扫描次数大于24次以上,就观察不到闪烁现象,人眼看起来很稳定。
静态扫描显示与动态显示相比,有显著降低LED功耗,大大减少LED的外部引线等优点。
目前动态扫描显示技术已经被广泛应用于新型数字仪表、智能仪器和智能显示屏中。
本次课程实践中运用QuartusII软件,采用VHDL文本设计和原理图相结合的层次化方式实现数码8位动态扫描显示电路设计。
首先,分别用VHDL语言编写8位数码扫描显示电路程序和分频器程序,作为底层文件;顶层文件用原理图的设计方法,调用底层文件生成的符号,从而实现动态扫描显示。
用VHDL设计一个8位数码扫描显示电路,利用QuartusII9.0进行编辑输入、编译及时序仿真。
其中,由于分频器的分频系数过大时,在仿真波形上很难看出波形的变化,如本设计是从100MHz分频到1KHz,分频系数为一万,所以可以通过改变减小分频系数,如改为10分频,就得到变化的波形,来验证数码动态扫描显示电路设计的正误。
一、工作原理1、8位动态扫描显示的工作原理:输入信号:时钟信号CLK。
输出控制信号:段控制信号SG[6..0];位控制控制信号BT[7..0]。
8位数码管,其中每个数码管的8个段h、g、f、e、d、c、b、a(h是小数点)都分别连接在一起,8个数码管分别由8个选通信号k1~k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅为k3对应的数码管显示来自段信号端的数据,而其他7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1~k8分别被选通,与此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1)班姓名:付锦辉学号:2745一、内容要求:在8位8段LED数码管显示“,之后灭显示器200ms;然后显示“WELCOM-1”(由于8位8段LED数码管显示不能显示字母W 和M,所以改为显示“HELLO-93”)二、目的和意义1、掌握数码管动态扫描显示原理及实现方法。
2、掌握动态扫描显示电路驱动程序的编写方法。
三、总体方案设计思路LED数码动态显示的基本做法在于分时轮流选通数码管的公共端,使得各数码管轮流导通,再选通相应的数码管后,即显示字段上得到显示字形码。
这种方式数码管的发光效率,而且由于各个数码管的字段线是并联使用的,从而大大简化了硬件线路。
动态扫描显示接口是单片机系统中应用最为广泛的一种显示方式。
其接口电路是把所有显示器的8个笔画段A-DP同名端并联在一起,而每个显示器的公共极COM各自独立地接受I/O线控制,CPU向字段输出口送出字段形码是,所有显示器由于同名端并连接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以就可以自行决定何时显示哪一位了。
而所谓动态扫描是指采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
再轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上个位显示器并非同时点亮,但只要扫描的速度足够快,给人的影响就是一组稳定的显示数据,不会有闪烁感。
采用总线驱动器74HC245提供LED数码管的段驱动,输出高电平时点亮相应段;采用集电极开路的BCD-十进制译码器/驱动器完成LED数码管位驱动,输出低电平时选通相应位。
P2口每个口线输出灌电流不足以驱动一个数码管显示器的位-公共极,所依通过集电极开路的BCD-十进制译码器/驱动器7445驱动,即节约P2口线,又增加驱动能力。
8位动态LED数码管显示实验2008-03-18 18:04** 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。
实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO口,即采用3个IO来实现数据的传输。
原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。
在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。
8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。
动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h//----------------------------------------------------------//程序作用:显示头文件display_s.h//----------------------------------------------------------#ifndef _display_#define _display_#include <intrins.h>sbit SDA=P2^6; //定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};//定义段码//延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)for(j=0;j<100;j++);}//数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}//显示程序 8位LED数码管扫描void display(unsigned chardisplay_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)//----------------------------------------------------------//程序作用:动态扫描显示01234567//----------------------------------------------------------#include<REG52.h>#include<display_s.h> //调用显示头文件main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6, 0x7};//显示01234567while(1){display(a); //显示数据}}8.5 8位数码管动态显示01234567(汇编);----------------------------------------------------------;程序作用:8位数码管动态显示01234567(汇编);----------------------------------------------------------;定义变量DBUF DATA 40H ;显示缓冲区首址SP_BT DATA 60H ;堆栈指针初值; LED 位选LED_CS1 BIT P0.0LED_CS2 BIT P0.1LED_CS3 BIT P0.2LED_CS4 BIT P0.3LED_CS5 BIT P0.4LED_CS6 BIT P0.5LED_CS7 BIT P0.6LED_CS8 BIT P0.7;4094接口SDA_4094 BIT P2^6CLK_4094 BIT P2^7ORG 0000HAJMP MAIN;-------------------------------ORG 0030HMAIN: MOV SP,#60HMOV R0,#0FFH;单元清零RES1: MOV @R0,#0DJNZ R0,RES1MOV DBUF,#00H;显示数据MOV DBUF+1,#01HMOV DBUF+2,#02HMOV DBUF+3,#03HMOV DBUF+4,#04HMOV DBUF+5,#05HMOV DBUF+6,#06HMOV DBUF+7,#07HSAMP1:LCALL DIR ;调用显示SJMP SAMP1;------------------------------------------------------;显示数据;-------------------------------------------------------DIR:;显示程序MOV DPTR,#TABLEMOV A,DBUFMOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS1 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS1 ;关闭显示MOV A,DBUF+1MOVC A,@A+DPTR//ANL A,#7FH;加小数点ACALL DISP_da ;送段码输出CLR LED_CS2;选通第1位数码管LCALL DELAY_4094SETB LED_CS2;关闭显示MOV A,DBUF+2MOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS3 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS3 ;关闭显示MOV A,DBUF+3MOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS4;选通第1位数码管LCALL DELAY_4094SETB LED_CS4;关闭显示MOV A,DBUF+4MOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS5 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS5 ;关闭显示MOV A,DBUF+5MOVC A,@A+DPTR// ANL A,#7FH;加小数点ACALL DISP_da ;送段码输出CLR LED_CS6;选通第1位数码管LCALL DELAY_4094SETB LED_CS6;关闭显示MOV A,DBUF+6MOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS7 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS7 ;关闭显示MOV A,DBUF+7MOVC A,@A+DPTRACALL DISP_da ;送段码输出CLR LED_CS8;选通第1位数码管LCALL DELAY_4094SETB LED_CS8;关闭显示;-------------------------------------RETTABLE: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F;-------------------------延时子程序---------------------------------DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒D_4094:MOV R5,#248DJNZ R5,$DJNZ R4,D_4094RETDISP_DA:MOV R3,#08HDUP: RLC AMOV SDA_4094,C CLR CLK_4094 SETB CLK_4094 DJNZ R3,DUPRETEND。
8位动态LED数码管显示实验2008-03-18 18:048.1 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。
实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO 口,即采用3个IO来实现数据的传输。
原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。
在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。
8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。
1动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h----------------------------------------------------------程序作用:显示头文件display_s.h----------------------------------------------------------#ifndef _display_#define _display_#include <intrins.h>sbit SDA=P2^6; 定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};2旗开得胜定义段码延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)for(j=0;j<100;j++);}数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}3显示程序8位LED数码管扫描void display(unsigned char display_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)----------------------------------------------------------程序作用:动态扫描显示01234567----------------------------------------------------------#include<REG52.h>#include<display_s.h> 调用显示头文件4main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};显示01234567 while(1){display(a); 显示数据}}8.5 8位数码管动态显示01234567(汇编);----------------------------------------------------------;程序作用:8位数码管动态显示01234567(汇编);----------------------------------------------------------;定义变量DBUF DATA 40H ;显示缓冲区首址SP_BT DATA 60H ;堆栈指针初值; LED 位选LED_CS1 BIT P0.0LED_CS2 BIT P0.1LED_CS3 BIT P0.2LED_CS4 BIT P0.35旗开得胜LED_CS5 BIT P0.4LED_CS6 BIT P0.5LED_CS7 BIT P0.6LED_CS8 BIT P0.7;4094接口SDA_4094 BIT P2^6CLK_4094 BIT P2^7ORG 0000HAJMP MAIN;-------------------------------ORG 0030HMAIN: MOV SP,#60HMOV R0,#0FFH;单元清零RES1: MOV R0,#0DJNZ R0,RES1MOV DBUF,#00H;显示数据MOV DBUF+1,#01HMOV DBUF+2,#02HMOV DBUF+3,#03HMOV DBUF+4,#04H6旗开得胜MOV DBUF+5,#05HMOV DBUF+6,#06HMOV DBUF+7,#07HSAMP1:LCALL DIR ;调用显示SJMP SAMP1;------------------------------------------------------;显示数据;-------------------------------------------------------DIR:;显示程序MOV DPTR,#TABLEMOV A,DBUFMOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS1 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS1 ;关闭显示MOV A,DBUF+1MOVC A,A+DPTRANL A,#7FH;加小数点7ACALL DISP_da ;送段码输出CLR LED_CS2;选通第1位数码管LCALL DELAY_4094SETB LED_CS2;关闭显示MOV A,DBUF+2MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS3 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS3 ;关闭显示MOV A,DBUF+3MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS4;选通第1位数码管LCALL DELAY_4094SETB LED_CS4;关闭显示MOV A,DBUF+4MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS5 ;选通第1位数码管LCALL DELAY_40948SETB LED_CS5 ;关闭显示MOV A,DBUF+5MOVC A,A+DPTRANL A,#7FH;加小数点ACALL DISP_da ;送段码输出CLR LED_CS6;选通第1位数码管LCALL DELAY_4094SETB LED_CS6;关闭显示MOV A,DBUF+6MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS7 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS7 ;关闭显示MOV A,DBUF+7MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS8;选通第1位数码管LCALL DELAY_4094SETB LED_CS8;关闭显示;-------------------------------------9RETTABLE: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F;-------------------------延时子程序---------------------------------DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒D_4094:MOV R5,#248DJNZ R5,$DJNZ R4,D_4094RETDISP_DA:MOV R3,#08HDUP: RLC AMOV SDA_4094,CCLR CLK_4094SETB CLK_4094DJNZ R3,DUPRETEND10。
8位数码管动态扫描实验(1) 实验目的:学习计数器器的设计、分析和测试方法。
学习硬件扫描显示电路的设计方法。
(2) 实验原理:如图1所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
图1数码管动态扫描原理图(3)实验内容1:如图2所示,为数码管动态扫描电路结构图,用VHDL语言描述一个数码管动态扫描显示电路,在数码管上显示 1 2 3 4 5 6 7 8,在QuartusⅡ上进行编译、综合、适配、仿真,给出其所有信号的时序仿真波形,下载至试验箱,观看结果。
电路模式不限,引脚图参考附录图12。
将试验箱左下方的拨码开关全部向上拨,时钟CLK可选择clock0,通过跳线选择16384Hz信号。
图2 数码管动态扫描电路结构图(4)实验内容2:以下为数字钟的VHDL程序,输入时钟12MHZ,输出为秒低位、秒高位、分低位、分高位、时低位、时高位。
结合实验内容一的程序,把上述的秒低位、秒高位、分低位、分高位、时低位、时高位在数码管1 2 4 5 7 8上显示出来。
--数字钟Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity clock isPort( clk: in std_logic;secL: out std_logic_vector(3 downto 0);secH: out std_logic_vector(3 downto 0);minL: out std_logic_vector(3 downto 0);minH: out std_logic_vector(3 downto 0);houL: out std_logic_vector(3 downto 0);houH: out std_logic_vector(3 downto 0));end clock;architecture arch of clock issignal clk_1s : std_logic;signal count : integer range 0 to 11999999;signal counter :std_logic_vector(2 downto 0);signal datain :std_logic_vector(31 downto 0);signal dataout: std_logic_vector(3 downto 0);signal tsecL,tsecH,tminL,tminH,thouL,thouH: std_logic_vector(3 downto 0); beginprocess (clk) --分频器,产生秒脉冲beginif clk'event and clk='1' thenif count=count'high then count<=0;else count<=count+1;end if;end if;end process;process (clk)beginif clk'event and clk='1' thenif count>=count'high/2 then clk_1s<='1';else clk_1s<='0';end if;end if;end process;process (clk_1s) --计时器beginif clk_1s'event and clk_1s='1' thenif tsecL = "1001" thentsecL <= "0000";if tsecH = "0101" thentsecH <= "0000";if tminL = "1001" thentminL <= "0000";if tminH = "0101" thentminH <= "0000";if thouH = "0010" and thouL = "0011" thenthouH <= "0000";thouL <= "0000";elsif thouL = "1001" thenthouL <= "0000";thouH <= thouH + 1;else thouL <= thouL + 1;end if;else tminH <= tminH + 1;end if;else tminL <= tminL + 1;end if;else tsecH <= tsecH + 1;end if;else tsecL<=tsecL+1;end if;end if;end process;secL <= tsecL;secH <= tsecH;minL <= tminL;minH <= tminH;houL <= thouL;houH <= thouH;end arch;。
从无到有:动态扫描显示电路实验的设计与实现动态扫描显示电路是一种常见的电子数字显示技术,其原理是通过快速切换LED单元,从而在观察者眼中呈现出一组数字、字母或符号。
对于初学者而言,常常难以理解其设计和实现过程。
下面将介绍如何从无到有,完成一款具有生动效果的动态扫描显示电路。
一、材料准备1. 数字电路芯片:CD4017B、CD4060B或CD4059B2. LED单元,数量视设计而定。
建议使用3mm或5mm大小的LED。
3. 电源电容:10uF、100uF或470uF电容器。
建议使用50V及以上的规格。
4. 电阻器:220R、1k或10k电阻器,数量视设计而定。
5. 面包板或印制电路板。
6. 其他辅助器件:按钮、开关、电源头等组件。
二、电路设计1. 先了解CD4017B芯片的工作原理。
该芯片是一种低功耗CMOS数码集成电路,具有10位二进制计数器和十个输出端口。
2. 将LED单元连接到芯片对应的输出端口上。
根据需要,可在输出端口前串联电阻器进行电流调节,提高LED的寿命。
3. 通过连接按钮或开关控制器,将CD4017B芯片与CD4060B或CD4059B锁相环组合起来。
锁相环负责调节输出频率,使得LED单元在显示时呈现出连续、动态的效果。
4. 完成电路板的设计和布局。
对于初学者而言,建议使用面包板进行调试,待电路稳定后再将其焊接至印刷电路板上。
三、实验过程1. 将准备好的材料按照电路设计图进行连接。
2. 将电路接入电源头。
确定连接正确、正常工作。
3. 通过按下按钮或开关,观察电路中各个LED单元的状态变化。
调整输出频率使LED单元显示更加流畅。
4. 对电路进行优化,并记录其中的问题、瓶颈及解决方案。
5. 可以在此基础上继续扩展,如添加蜂鸣器、数字显示屏等元件,并将其整合到一起,构建出完整的数字电路系统。
本实验旨在帮助初学者掌握基本的数字电路原理,并能够熟练地设计、调试出具有生动、实用的动态扫描显示电路。