LED数码管动态扫描显示实验

合集下载

实验报告 - - 实验七 - 八段数码管显示实验

实验报告 -  - 实验七 - 八段数码管显示实验

实验报告 - - 实验七 - 八段数码管显示实验EDA实验报告之实验七八段数码管显示实验1、实验目的1)了解数码管动态显示的原理。

2)了解用总线方式控制数码管显示2、实验要求:利用实验仪提供的显示电路, 动态显示一行数据.提示:把显示缓冲区(例如可为60H~65H作为缓冲区)的内容显示出来,当修改显示缓冲区的内容时,可显示修改后的内容(为键盘扫描、显示实验做准备)。

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

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

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

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

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

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

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

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

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

七段数码管的字型代码表如下表:a ----- f| |b | | ----- | g | e| |c -----d 。

h显示字形 g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 10 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 5bh 3 1 0 01 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 01 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 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 b1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 11 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 0 0 0 1 71h4、原理图及连线5、实验内容1) 使用仪器、仪表,开发平台型号本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,示波器,若干连线,串行数据线。

数码管动态扫描显示实验综述

数码管动态扫描显示实验综述

实验三准时器和中止实验一、实验目的1、学习 51 单片机内部准时器的使用方法。

2、掌握中止办理程序的方法。

3、掌握数码管与单片机的连结方法和简单显示编程方法。

4、学习和理解数码管动向扫描的工作原理。

二、实验内容1、使用准时器T0,准时1秒,控制P1口发光管循环点亮。

2、使用准时器 T0,准时 1 秒,控制 1 个数码管循环显示数字 0~9,每秒钟数字加一。

3、使用软件准时 1 秒,控制 2 个数码管循环显示秒数 0~59,每秒钟数字加一。

4、使用准时器 T0,准时 1 秒,控制 2 个数码管循环显示秒数 0~59,每秒钟数字加一。

三、实验电路图四、实验说明1、数码管的基本观点(1)段码数码管中的每一段相当于一个发光二极管, 8 段数码管则拥有 8 个发光二极管。

本次实验使用的是共阴数码管,公共端是 1、6,公共端置 0,则某段选线置 1 相应的段就亮。

公共端1 控制左面的数码管;公共端6 控制右边的数码管。

正面看数码管的引脚、段选线和数据线的对应关系为:图1数码管封装图图2数据线与数码管管脚连结关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按次序摆列所构成的一个数字,它与数码管的种类(共阴、共阳)和与数据线的连结次序相关。

对应数据线D7D6D5D4D3D2D1D0对应显示段e f DP g c d b a显示数字段码00CFH11001111103H0000001125DH0101110135BH01011011493H1001001150DAH1101101060DEH11011110743H0100001180DFH1101111190DBH11011011( 2)位码位码也叫位选,用于选中某一位数码管。

在实验图中要使第一个数码管显示数据,应在公共端 1上加低电平,即便 P2.7 口为 0,而公共端 6上加高电平,即便口为 1。

位码与段码相同和硬件连结相关。

LED动态扫描显示实验

LED动态扫描显示实验

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。

数码显示控制实验报告(3篇)

数码显示控制实验报告(3篇)

第1篇一、实验目的1. 熟悉数码显示模块的结构和工作原理;2. 掌握51单片机控制数码显示模块的方法;3. 学会使用移位寄存器实现数码显示的动态扫描;4. 提高单片机编程能力和实践操作能力。

二、实验原理数码显示模块是一种常见的显示器件,主要由7段LED组成,可以显示0-9的数字以及部分英文字符。

51单片机通过控制数码显示模块的段选和位选,实现数字的显示。

移位寄存器是一种常用的数字电路,具有数据串行输入、并行输出的特点。

在本实验中,使用移位寄存器74HC595实现数码显示的动态扫描。

三、实验仪器与材料1. 51单片机实验板;2. 数码显示模块;3. 移位寄存器74HC595;4. 电阻、电容等电子元件;5. 电路连接线;6. 编译软件Keil uVision;7. 仿真软件Proteus。

四、实验步骤1. 电路连接(1)将51单片机的P1口与数码显示模块的段选端相连;(2)将74HC595的串行输入端Q(引脚14)与单片机的P0口相连;(3)将74HC595的时钟端CLK(引脚11)与单片机的P3.0口相连;(4)将74HC595的锁存端LR(引脚12)与单片机的P3.1口相连;(5)将数码显示模块的位选端与74HC595的并行输出端相连。

2. 编写程序(1)初始化51单片机的P1口为输出模式,P3.0口为输出模式,P3.1口为输出模式;(2)编写数码显示模块的段码数据表;(3)编写74HC595的移位和锁存控制函数;(4)编写数码显示模块的动态扫描函数;(5)编写主函数,实现数码显示模块的循环显示。

3. 编译程序使用Keil uVision编译软件将编写的程序编译成hex文件。

4. 仿真实验使用Proteus仿真软件进行实验,观察数码显示模块的显示效果。

五、实验结果与分析1. 编译程序后,将hex文件下载到51单片机实验板上;2. 使用Proteus仿真软件进行实验,观察数码显示模块的显示效果;3. 通过实验验证,数码显示模块可以正常显示0-9的数字以及部分英文字符;4. 通过实验,掌握了51单片机控制数码显示模块的方法,学会了使用移位寄存器实现数码显示的动态扫描。

数码管动态扫描实验报告

数码管动态扫描实验报告

数码管动态扫描实验一、实验目的学习计数器的设计、分析合测试方法。

学习硬件扫描显示电路的设计方法。

二、实验仪器1、PC机2、SW-51PROC单片机综合实验平台三、实验内容编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:使数码管上显示1、2、3、4、5、6、7、8。

四、实验步骤:1、用Protues设计数码管动态扫描显示电路;2、在KeilC51中编写识别程序,通过后与Protues联合调试;3、启动仿真,观察数码管显示是否正确;4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。

五、电路设计及调试:1、实验电路:2、程序设计与调试:①实验程序:【12345678】#include<reg52.h>#define uintunsigned int#define ucharunsigned charuchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; uchar codeTemble[]={0,1,2,3,4,5,6,7};void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}void main(){uchar i;P0=0xff;P1=0;while(1){if(i==8)i=0;P1=Temble[i];P0=~Displsy[i+1];i++;delay(2);}}【脉冲计时】#include<reg52.h>#define uintunsigned int#define ucharunsigned charucharcodeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar codeTemble[]={0,1,2,3,4,5,6,7};uchar Flag;uint Num;void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}voidTest2(void){TR1 = 1;while(1){Num = TH1;Num = Num << 8;Num |= TL1;P1 = 7;P0 = ~Display[Num%10];delay(3);P1 = 6;P0 = ~Display[Num%100/10];delay(3);P1 = 5;P0 = ~Display[Num%1000/100];delay(3);P1 = 4;P0 = ~Display[Num%10000/1000];delay(3);P1 = 3;P0 = ~Display[Num%100000/10000];delay(3);P1 = 2;P0 = ~Display[Num%1000000/100000];delay(3);P1 = 1;P0 = ~Display[Num%10000000/1000000];delay(3);P1 = 0;P0 = ~Display[Num%100000000/1000000];delay(3);}}void main(){TMOD = 0x50;TH1 = 0x00;TL1 = 0x00;EA = 1;ET1 = 1;TR1 = 0;while(1){Test2();}}②调试:③实验结果:1、数字1~8分别显示在8个数码管上,显示无闪烁。

实验四 LED数码管显示实验报告

实验四 LED数码管显示实验报告

实验名称 LED数码管显示实验指导教师曹丹华专业班级光电1202班姓名陈敬人学号联系电话一、任务要求实验目的:理解LED七段数码管的显示控制原理,掌握数码管与MCU的接口技术,能够编写数码管显示驱动程序;熟悉接口程序调试方法。

实验内容:1.基础部分:利用C8051F310单片机控制数码管显示器。

利用末位数码管循环显示数字0-F,显示切换频率为1Hz。

2.提高部分:在数码管上显示0→199计数,计数间隔为0.5秒。

二、设计思路1.基础部分C8051F310单片机片上晶振为24.5MHz,采用8分频后为3.0625MHz ,输入时钟信号为48个机器周期,T1采用定时器工作方式1,单次定时最长可达1.027s,可以实现1s定时要求。

定时采用软件查询工作方式,利用JNB TF0, HERE实现。

置P0.6和P0.7端口为0,位选信号选定末位数码管。

通过MOVC A, @A+DPTR指令,利用顺序查表法取出显示段码数据。

寄存器R0自增1,并赋给A以取出下一个显示段码数据。

为减短代码长度,利用CJNE指令实现循环结构。

当寄存器R0增至0FH后,跳转至开头,重新开始下一轮显示。

2.提高部分定时方式及查表方式同基础部分,由于要实现三个数码管同时显示,因此采用动态扫描显示法。

三、资源分配1.基础部分P0.6: 位选信号端口P0.7:位选信号端口P1:输出段码数据R0:存放显示数据DPTR:指向段码数据表首 2.提高部分P0.6:位选信号端口P0.7:位选信号端口R0:存放个位显示数据 R5:存放十位显示数据 R6:存放百位显示数据 P1:输出段码数据DPTR: 指向段码数据表首四、流程图1.基础部分2.提高部分五、源代码(含文件头说明、语句行注释)1.基础部分;******************基础部分源代码***************************;Filename: test.asm;Decription: 末位数码管循环显示数字0-F,显示切换频率为1Hz。

实验三 数码管动态显示程序设计1综述

实验三 数码管动态显示程序设计1综述

实验三数码管动态显示程序设计实验目的1、理解数码管动态显示原理2、理解数码管动态显示电路的设计方法3、掌握数码管动态显示程序的设计方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验内容1、动态扫描显示程序2、特征位小数点控制显示程序实验电路图实验步骤及调试信息1、新建实验项目2、输入实验程序并补充完整;------------------------------------------------------;数码管动态显示程序;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;; 2009-08-20;-------------------------------------------------------LEDCLK bit P3.4LEDDIN bit P2.3LEDDATA data P0dseg at 30hdispbuf: ds 8 ;显示缓冲区8字节disppoint: ds 1 ;小数点控制数据maincode SEGMENT CODECSEG at 0LJMP StartRSEG maincodeStart: CLR E Amov sp,#0c0hmov dispbuf ,#08hmov dispbuf+1, #04hmov dispbuf+2, #00hmov dispbuf+3, #08hmov dispbuf+4, #02hmov dispbuf+5, #00hmov dispbuf+6, #02hmov dispbuf+7, #07hmov disppoint,#02h ;第2位小数点亮LCALL dispSJMP $-3;------------------------------------------------------;数码管动态显示程序;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;; 2009-08-20;-------------------------------------------------------Disp: MOV R7,#8MOV R0,#dispbufCLR LEDCLKSETB L EDDINDisp1: MOV A,@R0MOV DPTR,#DispTabMOVC A,@A+DPTRcpl a; LCALL Dispdot ;显示小数点程序MOV LEDDA TA,A ;在输出之前加入显示小数点程序LCALL DispSelection1 ;输出位选择信号,DispSelection2是第二种; lcall dispsel3LCALL Delay1msmov p2,#0ffhINC R0DJNZ R7,Disp1mov p2,#0ffhRET;-------------------------------------------------;位选码以一次一位方式输出;-------------------------------------------------dispsel3:mov dptr,#DispSTabmov a,r7movc a,@a+dptrcpl a; swap amov p2,aretDispSelection1:CJNE R7,#8,DispSelection11CLR L EDDINDispSelection11:SETB LEDCLKNOPCLR L EDCLKSETB LEDDINRET;-------------------------------------------------;位选码以一次一字节方式输出;-------------------------------------------------DispSelection2:MOV B,#8MOV DPTR,#DispSTabMOV A,R7MOVC A,@A+DPTRCPL ADispSelection21:RLC AMOV LEDDIN,CSETB LEDCLKNOPCLR L EDCLKDJNZ B,DispSelection21RETDispSTab: DB 00H,80H,20H,40H,10H,08H,04H,02H,01H;位选码数据表dispa equ 80h ;数码管各段数据定义dispb equ 40hdispc equ 20hdispd equ 10hdispe equ 08hdispf equ 04hdispg equ 02hdisph equ 01hdisp8 equ 0ffh-disphDispTab: db disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe ;0,1,2 db disp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe;3,4,5db disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe ;6,7,8,9db disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg ;a,b,cdb disp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd;d,e,fdb disp8-dispb-dispc,0ffh,00h,dispg ;H,全亮,全暗,-;--------------------------------------------------------------------;特征位小数点控制显示程序;把小数点显示程序加到显示码输出之前;输入:A : 显示译码值; R7:当前正在显示的LED编号;输出:无;--------------------------------------------------------------------Dispdot:MOV B,AMOV A,R7MOV DPTR,#DispSTabMOVC A,@A+DPTRANL A,disppointSETB C ;本行及以下4行可改成MOV C,PJZ Dispdot1CLR C;点亮小数点Dispdot1:CPL C ;本行根据情况增减MOV A,BCPL AMOV ACC.7,C ;小数点由D7控制; MOV LEDDA TA,A ;本行可以删除RETDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms:PUSH 07MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2POP 07RETEND3、编译下载实验程序,并修改错误(按附录说明)4、全速运行程序,查看实验现象。

EDA设计课程实验报告数码管动态显示实验报告

EDA设计课程实验报告数码管动态显示实验报告

EDA设计课程实验报告实验题目:数码管动态显示实验学院名称:专业:电子信息工程班级:姓名:高胜学号小组成员:指导教师:一、实验目的学习动态扫描显示的原理;利用数码管动态扫描显示的原理编写程序,实现自己的学号的显示。

二、设计任务及要求1、在SmartSOPC实验箱上完成数码管动态显示自己学号的后八个数字。

2、放慢扫描速度演示动态显示的原理过程。

三、系统设计1、整体设计方案数码管的八个段a,b,c,d,e,f,g,h(h是小数点)都分别连接到SEG0~SEG7,8个数码管分别由八个选通信号DIG0~DIG7来选择,被选通的数码管显示数据,其余关闭。

如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0~DIG7分别被单独选通,并在此同时,在段信号输入口SEG0~SEG7加上该对应数码管上显示的数据,于是随着选通信号的扫描就能实现动态扫描显示的目的。

虽然每次只有1个数码管显示,但只要扫描显示速率足够快,利用人眼的视觉余辉效应,我们仍会感觉所有的数码管都在同时显示。

2、功能模块电路设(1)输入输出模块框图(见图1)图1(2)模块逻辑表达(见表1)表1(数码管显示真值表)clk_1k dig seg↑01111111 C0↑10111111 F9注:数码管显示为01180121(3)算法流程图(见图2)(4)Verilog源代码module scan_led(clk_1k,d,dig,seg); //模块名scan_ledinput clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0]count; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据3'd0:disp_dat = d[31:28]; //第一个数码管3'd1:disp_dat = d[27:24]; //第二个数码管3'd2:disp_dat = d[23:20]; //第三个数码管3'd3:disp_dat = d[19:16]; //第四个数码管3'd4:disp_dat = d[15:12]; //第五个数码管3'd5:disp_dat = d[11:8]; //第六个数码管3'd6:disp_dat = d[7:4]; //第七个数码管3'd7:disp_dat = d[3:0]; //第八个数码管endcasecase(count) //选择数码管显示位3'd0:dig_r = 8'b01111111; //选择第一个数码管显示3'd1:dig_r = 8'b10111111; //选择第二个数码管显示3'd2:dig_r = 8'b11011111; //选择第三个数码管显示3'd3:dig_r = 8'b11101111; //选择第四个数码管显示3'd4:dig_r = 8'b11110111; //选择第五个数码管显示3'd5:dig_r = 8'b11111011; //选择第六个数码管显示3'd6:dig_r = 8'b11111101; //选择第七个数码管显示3'd7:dig_r = 8'b11111110; //选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fendcaseendendmodule四、系统调试(1)仿真代码`timescale 1ns/1nsmodule scan_ledfz;reg clk_1k;reg[31:0] d;wire[7:0] dig;wire[7:0] seg;parameter dely=100;scan_led u1(clk_1k,d,dig,seg);always #(dely/2)clk_1k=~clk_1k;initial beginclk_1k=0;d=32'h01180134;#dely ;#dely ;#dely ;#dely ;#dely ;#(dely*20);#dely $finish;endinitial $monitor($time,,,"%b,%d,%h,%h",clk_1k,d,dig,seg); endmodulemodule scan_led(clk_1k,d,dig,seg); //模块名scan_ledinput clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0] count=3'b000; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据3'd0:disp_dat = d[31:28]; //第一个数码管3'd1:disp_dat = d[27:24]; //第二个数码管3'd2:disp_dat = d[23:20]; //第三个数码管3'd3:disp_dat = d[19:16]; //第四个数码管3'd4:disp_dat = d[15:12]; //第五个数码管3'd5:disp_dat = d[11:8]; //第六个数码管3'd6:disp_dat = d[7:4]; //第七个数码管3'd7:disp_dat = d[3:0]; //第八个数码管endcasecase(count) //选择数码管显示位3'd0:dig_r = 8'b01111111; //选择第一个数码管显示3'd1:dig_r = 8'b10111111; //选择第二个数码管显示3'd2:dig_r = 8'b11011111; //选择第三个数码管显示3'd3:dig_r = 8'b11101111; //选择第四个数码管显示3'd4:dig_r = 8'b11110111; //选择第五个数码管显示3'd5:dig_r = 8'b11111011; //选择第六个数码管显示3'd6:dig_r = 8'b11111101; //选择第七个数码管显示3'd7:dig_r = 8'b11111110; //选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fendcaseendendmodule位码代码仿真代码`timescale 1ns/1nsmodule smg_tp; //测试模块的名字reg [2:0] c; //测试输入信号定义为reg型wire[7:0] dig; //测试输出信号定义为wire型parameter DEL Y=100; //延时100秒wei u1(c,dig); //调用测试对象initial begin //激励波形设定c=3'b0;#DEL Y c=3'b001 ;#DEL Y c=3'b010 ;#DEL Y c=3'b100 ;#DEL Y c=3'b101 ;#DEL Y c=3'b110 ;#DEL Y c=3'b111 ;#DEL Y $finish;endinitial $monitor($time,,,"dig=%d,c=%b ",dig,c); //输出格式i定义endmodulemodule wei(c,dig); //命名模块名字input[2:0] c;output[7:0] dig; //定义输入与输出reg[7:0] dig_r;reg[2:0] c_r; // 定义dig_r与c_r2个reg型数据assign dig=dig_r; //将reg型数据转化为wire型数据always @(*) //检测c_r的数据是否变化begin c_r=c;case (c_r)3'b000:dig_r=8'b11111110; //c_r的数据变化而dig_r对于的数据变化3'b001:dig_r=8'b11111101;3'b010:dig_r=8'b11111011;3'b011:dig_r=8'b11110111;3'b100:dig_r=8'b11101111;3'b101:dig_r=8'b11011111;3'b110:dig_r=8'b10111111;3'b111:dig_r=8'b01111111;default: dig_r=8'b11111111;endcase //结束case语句end //结束always语句endmodule //结束程序译码器代码仿真代码`timescale 1ns/1nsmodule duan_tp; //测试模块的名字reg[3:0] a; //测试输入信号定义为reg型wire[7:0] seg; //测试输出信号定义为wire型parameter DEL Y=100; //延时100秒duan u1(a,seg); //调用测试对象initial begin //激励波形设定a=4'b0;#DELY a=4'b0001;#DELY a=4'b0010;#DELY a=4'b0011;#DELY a=4'b0100;#DELY a=4'b0101;#DELY a=4'b0110;#DELY a=4'b0111;#DELY a=4'b1000;#DELY a=4'b1001;#DELY a=4'b1010;#DELY a=4'b1011;#DELY a=4'b1100;#DELY a=4'b1101;#DELY a=4'b1110;#DELY a=4'b1111;#DELY $finish;endinitial $monitor($time,,,"seg=%d,a=%b",seg,a); //输出格式i定义endmodulemodule duan(a,seg); //命名模块名字input[3:0] a;output[7:0] seg; //定义输入与输出reg[7:0] seg_r;reg[3:0] a_r; // 定义seg_r与a_r2个reg型数据assign seg=seg_r; //将reg型数据转化为wire型数据always @(*) //检测c_r的数据是否变化begin a_r=a;case(a_r) //七段译码4'b0000:seg_r = 8'hc0; //显示04'b0001:seg_r = 8'hf9; //显示14'b0010:seg_r = 8'ha4; //显示24'b0011:seg_r = 8'hb0; //显示34'b0100:seg_r = 8'h99; //显示44'b0101:seg_r = 8'h92; //显示54'b0110:seg_r = 8'h82; //显示64'b0111:seg_r = 8'hf8; //显示74'b1000:seg_r = 8'h80; ///显示84'b1001:seg_r = 8'h90; //显示94'b1010:seg_r = 8'h88; //显示a4'b1011:seg_r = 8'h83; //显示b4'b1100:seg_r = 8'hc6; //显示c4'b1101:seg_r = 8'ha1; //显示d4'b1110:seg_r = 8'h86; //显示e4'b1111:seg_r = 8'h8e; ///显示f endcase //结束case语句end //结束always语句endmodule //结束程序(2)仿真波形图(3)引脚图五、实验感想通过这次实验,让我学习动态扫描显示的原理;利用数码管动态扫描显示的原理编写程序,实现自己的学号的显示。

数码管扫描显示控制器实验报告

数码管扫描显示控制器实验报告

实验四数码管扫描显示控制器设计与实现2011211208班2011211055 4 于圣泽一、实验目的1.掌握VHDL语言的语法规范, 掌握时序电路描述方法;2.掌握多个数码管动态扫描显示的原理及设计方法。

二、实验原理三、多个数码管动态扫描显示, 是将所有数码管的相同段并联在一起, 通过选通信号分时控制各个数码管的公共端, 循环依次点亮多个数码管, 利用人眼的视觉暂留现象, 只要扫描的频率大于50Hz, 将看不到闪烁现象。

一个数码管要稳定显示要求显示频率大于50Hz, 那么6个数码管则需要50×6=300Hz以上才能看到持续稳定点亮的现象。

四、cat1~cat6是数码管选通控制信号, 分别对应于6个共阴极数码管的公共端, 当catn=‘0’时, 其对应的数码管被点亮。

因此, 通过控制cat1~cat6, 就可以控制6个数码管循环依次点亮。

五、实验内容1.用VHDL语言设计并实现六个数码管串行扫描电路, 要求同时显示0、1.2.3.4.5这6个不同的数字图形到6个数码管上, 仿真验证其功能, 并下载到实验板测试。

2.用VHDL语言设计并实现六个数码管滚动显示电路六、循环左滚动, 始终点亮6个数码管, 左出右进。

状态为: 012345→123450→234501→3450123→450123→501234→012345七、向左滚动, 用全灭的数码管填充右边, 直至全部变灭, 然后再依次从右边一个一个地点亮。

状态为:012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中‘X’表示数码管不显示。

八、设计思路和过程对50MHz时钟进行5000分频, 得到10kHZ时钟scanclk。

把scanclk作为6进制计数器的时钟, 对计数器的状态进行译码, 得到cat(5 downto 0)的选通脉冲。

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1. 6个数码管动态扫描显示驱动2. 按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3. 用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。

要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。

实验目的: 1)学会看硬件原理图, 2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机, 2)硬件实验箱, 3)Quartus II软件开发平台。

1.打开Quartus II , 连接实验箱上的相关硬件资源, 如下图1所示。

2.建立新文件, 选择文本类型或原理图类型。

3. 编写程序。

4.编译5. 仿真, 加载程序到芯片, 观察硬件输出结果(数码管显示)6.结果正确则完成。

若结果不正确, 则修改程序, 再编译, 直到正确。

模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时, 实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。

protues课件数码管动态扫描电路的仿真实验

protues课件数码管动态扫描电路的仿真实验

段码线占用一个8位I/O口,而位选控制使用一个I/O口
的4位口线。
13
图6-4 4位8段LED动态显示的原理电路

工作原理:动态显示就是通过段码线向显示器(所有
的)输出所要显示字符的段码。每一时刻,只有一位位 选线有效,其他各位都无效。逐位地每隔一定时间轮流
点亮各位显示器(扫描方式),由于LED数码管的余辉
型、“米”字型和“点阵”型LED显示器,如图10-2所
示。厂家也可根据用户的需要定做特殊字型的数码管。
图6-2
其他各种字型的LED显示器
8
6.1.2 LED数码管显示器的两种显示方式

LED数码管有静态显示和动态显示两种显示方式。
9
1.LED静态显示方式

静态显示指无论多少位LED数码管,都同时处于显示状态。
电路连接:数码管工作于静态显示方式时,各位的共阴极
(或共阳极)连接在一起并接地(或接+5V);每位的段码 线(a~dp)分别与一个8位的I/O口锁存器输出相连。

如果送往各个LED数码管所显示字符的段码一经确定,则
相应I/O口锁存器锁存的段码输出将维持不变,直到送入另 一个字符的段码为止。

优点:静态显示无闪烁,亮度较高,软件控制比较容易。
数码管显示单个数字
如图6-6所示为共阳极数码管。
7段数码管有段码和位码两个不同控制端。8
个数码管的段码a,b,c,d,e,f,g,dp并联在一起, 通过上拉电阻接到了51单片机的P0口,而每 一位数码管的位码则通过三极管分别接到51 单片机的P2口,其中P2口接三极管的基极, 发射极接到数码管的位码选择端。 电路符合数码管动态显示的原理。
11

实验二动态扫描显示电路设计

实验二动态扫描显示电路设计

实验二动态扫描显示电路设计一、设计要求1、设计要求设计一个四位LED数码显示动态扫描控制电路,显示4位十进制数或4字母的单词,要求显示内容可以通过按键切换。

2、硬件环境LP-2900开发装置的LED数码管为共阴显示器,六个显示器的七个段控制a~g及小数点dp分别对应相连,各显示器的共阴极分别由一个3线-8线译码器74138的输出Y0~Y5控制。

译码器的3位输入码分别由FPGA的I/O端口DE3、DE2、DE1控制,如图1所示。

图1 LP-2900开发装置FPGA与LED数码显示器的电路连接3线-8线译码器的3位输入码DE3、DE2、DE1为“000”~“101”时,输出Y0~Y5中有一个为0,FPGA的a~g端口将控制共阴极为0的数码管显示。

比如,当DE3、DE2、DE1为“011”时,Y3=0,数码管C4显示。

二、设计原理分析多位七段显示器的控制分为静态和动态扫描两种方法。

静态驱动方法是将所有显示器的公共端都接有效电平,各位显示器的段控制信号互不相干,分别控制。

这样,n位显示器需要7×n个控制信号(不包括小数点),即需要FPGA的56个I/O口对其进行控制。

动态扫描方法是将所有显示器的各个段控制端(a、b…、g、dp)一一对应连接,而各显示器的公共端COM由位扫描信号分别控制。

这样,n位显示器只需要8+n个控制信号(包括小数点)。

比如,LP-2900开发装置上B区的6个共阴显示器采用了动态扫描驱动方式,6个共阴端C1~C6由通过一个3线-8线译码器分时控制,电路原理如图1所示。

这样FPGA 只需要11个I/O口,其中8个控制段信号、3个输出二进制码(“000”~“101”)控制C1~C6。

1.动态显示扫描控制动态扫描驱动电路中所有的显示器由相同的段信号控制,公共端有效的显示器将显示相同的字符。

所以,要使各显示器显示不同的内容,必须控制它们的公共端分时轮流有效。

每个显示器只在其公共端为有效电平时根据段码信号显示相应的字符,公共端无效时灭显。

控制数码管显示实训报告

控制数码管显示实训报告

一、实训目的通过本次实训,使学生了解数码管的工作原理,掌握数码管驱动电路的设计方法,学会使用单片机或PLC等微控制器实现对数码管的控制,提高学生的实际动手能力和电子技术综合应用能力。

二、实训内容1. 数码管的结构与工作原理数码管是一种用来显示数字和字母的电子显示器件,通常由多个LED灯组成。

根据LED灯的连接方式,数码管分为共阴极和共阳极两种类型。

(1)共阴极数码管:LED灯的阴极相连,阳极分别独立引出,当给阳极加上高电平时,相应的LED灯点亮。

(2)共阳极数码管:LED灯的阳极相连,阴极分别独立引出,当给阴极加上低电平时,相应的LED灯点亮。

2. 数码管驱动电路设计(1)共阴极数码管驱动电路:使用译码器、驱动器和位选信号进行驱动。

(2)共阳极数码管驱动电路:使用译码器、驱动器和位选信号进行驱动。

3. 单片机控制数码管显示(1)51单片机控制数码管显示:编写程序,通过P1口输出位选信号,通过P2口输出段选信号,实现数码管显示数字0-9。

(2)PLC控制数码管显示:编写梯形图程序,通过输入/输出模块控制数码管显示。

三、实训步骤1. 准备实验器材:数码管、单片机或PLC、电源、导线等。

2. 设计数码管驱动电路,连接电路。

3. 编写单片机或PLC程序,实现数码管显示数字0-9。

4. 调试程序,观察数码管显示效果。

5. 改进程序,实现更多功能,如显示字母、动态扫描等。

四、实训结果与分析1. 数码管驱动电路设计成功,数码管显示正常。

2. 使用51单片机控制数码管显示数字0-9,程序运行正常。

3. 使用PLC控制数码管显示数字0-9,程序运行正常。

4. 通过实训,掌握了数码管的工作原理、驱动电路设计方法以及单片机或PLC控制数码管显示的基本技能。

五、实训心得1. 在本次实训中,我对数码管的结构和工作原理有了更深入的了解,掌握了数码管驱动电路的设计方法。

2. 通过编写单片机或PLC程序,实现了数码管显示数字0-9,提高了自己的编程能力。

LED数码管显示实验

LED数码管显示实验

电子信息工程系实验报告课程名称:单片机原理及接口(应用)实验项目名称: LED 数码管显示实验实验时间: 班级: 姓名: 学号:一、实 验 目 的熟悉keil 仿真软件、proteus 仿真软件、软件仿真板的使用。

了解并熟悉一位数码管与多位LED 数码管的电路结构、与单片机的连接方法及其应用原理。

学习proteus 构建LED 数码管显示电路的方法,掌握C51中单片机控制LED 数码管动态显示的原理与编程方法。

二、实 验 环 境硬件:Window XP ; 软件:keil C51单片机仿真调试软件,proteus 系列仿真调试软件;三、实 验 原 理LED 显示器是由发光二极管显示字段的显示器件。

在单片机应用系统中通常使用的是七段LED ,这种显示器有共阴极与共阳极两种。

例如共阴极,如图1所示。

管脚配置如图2所示。

图1 共阴极 图2 管脚配置共阴极LED 显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮;共阳极LED 显示器的发光二极管阳极并接。

七段LED 数码管与单片机连接时,只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。

多位七段LED 数码管与单片机连接时将所有LED 的段选线并联在一起,由一个八位I /O 口控制,而位选线分别由相应的I /O 口线控制。

例如:段选码的推导(1)要显示字母C ——则a 、f 、e 、d 灯亮。

(2)因为共阴——则a 、f 、e 、d 送0时才亮。

(3)段选dp-a 为——11000110。

由于所有位的段选码皆由一个I /O 控制,因此,在每个瞬间,多位LED 只可能显示相同的字符。

要想每位显示不同的字符,必须采用动态扫描显示方式。

即在每一瞬间只使某一位显示相应字符。

在此瞬间,位选控制I /O 口在该显示位送入选通电平(共阴极送低电平、共阳极送高电平)以保证该位显示相应字符,段选控制I /O 口输出相应字符段选码。

如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。

实验四 数码管的动态显示实验

实验四 数码管的动态显示实验

实验四数码管的动态显示实验班级通信1102 姓名谢剑辉学号20110803223 指导老师袁文澹一、实验目的熟悉掌握数码管动态显示的基本方法;根据已知电路和设计要求在实验板上实现数码管动态显示。

根据已知电路和设计要求在PROTEUS平台仿真实现控制系统。

二、实验内容1、在STC89C52实验平台的4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容。

2、思考:如何实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣。

三、实验原理实验要求“4位数码管上实现动态显示0123→1234→2345→3456→4567→5678→6789→7890→8901→9012→0123→不断反复,每隔2s切换显示内容”。

动态扫描可以实现要求。

简单地说,动态扫描就是选通一位,送一位数据。

原理图中的P10~P13是位选信号,即选择哪个数码管显示数字;P00~P07是段码,即要显示的数字。

可以通过依次选通一位7段数码管并通过P0端口送出显示数据。

由于人眼的视觉残留原理,如果这种依次唯一选通每一位7段数码管的动作在0.1s内完成,就会造成多位数码管同时点亮显示各自数字的假象。

本实验使用中断,实现每2s更新一次数字。

四、实验方法与步骤设计思路和方法:1、根据电路图,分析数码管动态显示的设计思路,使用中断实现每2秒更新一次数字的设计思路,以及实现当4位数码管显示的内容中有“1”时,蜂鸣器蜂鸣的设计思路。

(1)数码管动态显示的原理如“实验原理”里所述,不赘述;(2)使用中断实现每2s更新一次数字的设计思路:本次实验使用Timer0中断,由于其定时时间最大为65536us,不能实现2s的长延时,那么可以使用多次中断来实现,并且在中断到来时,不断地死循环显示数字,即根据动态显示原理“选通一位,来一位数据”。

由于最大的数字为9,则(x%10),(x+1)%10,(x+2)%10,(x+3)%10分别是千位,百位,十位,个位上的数字。

实验2LED数码管动态和静态显示实验

实验2LED数码管动态和静态显示实验

广东海洋大学学生实验报告书实验名称实验2 LED数码管动态和静态显示课程名称计算机控制技术系自动化系专业自动化班级1132 学生姓名袁明星/201311632223 实验地点科技楼403实验日期王波成绩指导教师一、设计目的:LED数码管动态和静态显示二、设计任务:1.LED数码管动态显示,动态扫描时间间隔可调;2.LED数码管静态显示,显示动态扫描时间间隔;三、操作流图:步骤:1.上排的三个数码管用静态扫描方式,显示动态扫描时间间隔;2.下排的6用数码管用动态扫描方式,显示时钟;3.一个独立的按键,每按一次,可增加动态扫描时间间隔四、实验要求:1、态度严谨,独立完成,勤于思考,善于总结;2、认真完成实验报告。

ORG 0000HAJMP STARTORG 0003HAJMP INT_0ORG 000BHAJMP INT_T0ORG 0030H START:MOV 30H,#0 ;秒MOV 31H,#0 ;分MOV 32H,#0 ;时MOV 33H,#1MOV SP,#40HSETB IT0MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV IE,#83HSETB TR0MOV R0,#20V1: MOV A,33HMOV B,#100DIV ABMOV DPTR,#TABMOVC A,@A+DPTRMOV P3,#4FHMOV P2,AMOV A,BMOV B,#10DIV ABMOV DPTR,#TABMOVC A,@A+DPTRMOV P3,#2FHMOV P2,AMOV A,BMOV DPTR,#TABMOVC A,@A+DPTRMOV P3,#1FHMOV P2,AMOV A,30HMOV B,#10DIV ABMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#02H MOV P0,AACALL DELAY MOV A,BMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#01H MOV P0,AACALL DELAYMOV A,31HMOV B,#10DIV ABMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#08H MOV P0,AACALL DELAY MOV A,BMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#04H MOV P0,AACALL DELAYMOV A,32HMOV B,#10DIV ABMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#20H MOV P0,AACALL DELAY MOV A,BMOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,#10H MOV P0,AACALL DELAYAJMP V1INT_T0:PUSH ACCDJNZ R0,NEXTMOV A,30HINC ACJNE A,#60,NEXT1MOV 30H,#0MOV A,31HINC ACJNE A,#60,NEXT2MOV 31H,#0MOV A,32HINC ACJNE A,#24,NEXT3MOV 32H,#0AJMP NEXT4NEXT1: MOV 30H,AAJMP NEXT4NEXT2: MOV 31H,AAJMP NEXT4NEXT3: MOV 32H,ANEXT4: MOV R0,#20 NEXT: MOV TH0,#3CHMOV TL0,#0B0HPOP ACCRETIINT_0: PUSH ACCMOV A,33HCJNE A,#100,NEXT01MOV 33H,#1AJMP NEXT0NEXT01:MOV B,#10MUL ABMOV 33H,ANEXT0: POP ACCRETIDELAY:MOV R7,33HDEL1: MOV R6,#4NOPDEL2: MOV R5,#123DEL3: DJNZ R5,DEL3DJNZ R6,DEL2DJNZ R7,DEL1RETTAB: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H END六、实验心得:通过实验,让我对这门课程有了更深入的了解。

数码管实验报告实验原理(3篇)

数码管实验报告实验原理(3篇)

第1篇一、实验背景数码管是一种常用的显示器件,它可以将数字、字母或其他符号显示出来。

数码管广泛应用于各种电子设备中,如计算器、电子钟、电子秤等。

本实验旨在通过实践操作,让学生了解数码管的工作原理,掌握数码管的驱动方法,以及数码管在电子系统中的应用。

二、实验原理1. 数码管类型数码管分为两种类型:七段数码管和液晶数码管。

本实验主要介绍七段数码管。

七段数码管由七个发光二极管(LED)组成,分别代表七个笔画。

当七个LED中的某个或某几个LED点亮时,就可以显示出相应的数字或符号。

根据发光二极管的连接方式,七段数码管可分为共阳极和共阴极两种类型。

2. 数码管驱动方式(1)静态驱动静态驱动是指每个数码管独立驱动,每个数码管都连接到单片机的I/O端口。

这种方式下,数码管显示的数字或符号不会闪烁,但需要较多的I/O端口资源。

(2)动态驱动动态驱动是指多个数码管共用一组I/O端口,通过控制每个数码管的扫描时间来实现动态显示。

这种方式可以节省I/O端口资源,但显示的数字或符号会有闪烁现象。

3. 数码管显示原理(1)共阳极数码管共阳极数码管的特点是七个LED的阳极连接在一起,形成公共阳极。

当要显示数字时,将对应的LED阴极接地,其他LED阴极接高电平,即可显示出相应的数字。

(2)共阴极数码管共阴极数码管的特点是七个LED的阴极连接在一起,形成公共阴极。

当要显示数字时,将对应的LED阳极接地,其他LED阳极接高电平,即可显示出相应的数字。

4. 数码管驱动电路(1)BCD码译码驱动器BCD码译码驱动器是一种将BCD码转换为七段数码管所需段码的电路。

常用的BCD码译码驱动器有CD4511、CD4518等。

(2)74HC595移位寄存器74HC595是一种8位串行输入、并行输出的移位寄存器,常用于数码管的动态驱动。

它可以将单片机输出的串行信号转换为并行信号,驱动数码管显示。

三、实验目的1. 了解数码管的工作原理和驱动方式。

数码管动态扫描显示实验综述

数码管动态扫描显示实验综述

实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。

2、掌握中断处理程序的方法。

3、掌握数码管与单片机的连接方法和简单显示编程方法。

4、学习和理解数码管动态扫描的工作原理。

二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。

2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。

3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。

4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。

三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。

本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。

公共端1控制左面的数码管;公共端6控制右面的数码管。

正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)(2)位码位码也叫位选,用于选中某一位数码管。

在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。

位码与段码一样和硬件连接有关。

(3)拉电流与灌电流单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。

一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。

一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。

本实验电路中采用拉电流方式(用共阴数码管)。

动态扫描实验报告总结(3篇)

动态扫描实验报告总结(3篇)

第1篇一、实验背景随着科技的不断发展,数码管在电子设备中的应用越来越广泛。

动态扫描数码管作为一种高效、实用的显示方式,在电子设备中扮演着重要角色。

本实验旨在通过设计并实现动态扫描数码管电路,深入了解动态扫描原理,掌握动态扫描数码管的设计与实现方法。

二、实验目的1. 理解动态扫描数码管的工作原理。

2. 掌握动态扫描数码管电路的设计方法。

3. 学会使用Verilog HDL进行层次化设计电路。

4. 通过仿真验证动态扫描数码管电路的正确性。

三、实验内容1. 动态扫描数码管原理介绍动态扫描数码管由多个七段数码管组成,通过位选线和段选线分别控制数码管的位和段。

动态扫描数码管显示时,先选中某个数码管,然后显示该数码管的段码,随后快速切换到下一个数码管,重复此过程,使多个数码管轮流显示,从而实现多位数码管的显示。

2. 动态扫描数码管电路设计本实验采用Verilog HDL进行动态扫描数码管电路的设计。

主要设计内容包括:(1)位选信号生成模块:生成动态扫描数码管的位选信号,控制数码管的显示顺序。

(2)段选信号生成模块:生成动态扫描数码管的段选信号,控制数码管的显示内容。

(3)七段数码管驱动模块:将段选信号和位选信号转换为数码管的段码,驱动数码管显示。

3. 动态扫描数码管电路仿真使用Verilog HDL进行动态扫描数码管电路的仿真,验证电路的正确性。

主要仿真内容包括:(1)位选信号和段选信号的波形分析。

(2)数码管显示内容的波形分析。

(3)动态扫描数码管电路的整体性能分析。

四、实验结果与分析1. 仿真结果分析通过仿真实验,验证了动态扫描数码管电路的正确性。

位选信号和段选信号波形正常,数码管显示内容正确,动态扫描数码管电路整体性能良好。

2. 实验结果分析(1)动态扫描数码管电路设计过程中,位选信号和段选信号生成模块是关键部分。

位选信号需要满足轮流显示的要求,段选信号需要满足数码管显示内容的要求。

(2)动态扫描数码管电路在实现多位数码管显示时,可以有效减少引脚数量,降低硬件成本。

单片机课程设计-8位8段LED数码管动态扫描显示

单片机课程设计-8位8段LED数码管动态扫描显示

华南理工大学广州汽车学院单片机课程设计题目:8位8段LED数码管动态扫描专业:电子信息工程班级:09电信(1)班姓名:付锦辉学号:200930062745一、内容要求:在8位8段LED数码管显示“8.8.8.8.8.8.8.8.”持续500ms,之后灭显示器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口线,又增加驱动能力。

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

单片机实验五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 0000H
AJMP MAIN
ORG 0100H
MAIN: SP,#60H
MOV 30H,#02H
MOV 31H,#00H
MOV 32H,#01H
MOV 33H,#04H
MOV 34H,#00H
MOV 35H,#05H
MOV 36H,#02H
MOV 37H,#00H
START:MOV R0,#30H
MOV R3,#0FEH
NEXT: MOV P1,#0FFH
MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV P1,R3
LCALL DLY2MS
INC R0
JNB P1.7,STRAT
MOV A,R3
RL A
MOV R3,A
AJMP NEXT
DLY2MS:MOV R6,#2
DL2: MOV R7,#250
DL1:NOP
NOP
DJNZ R7,DL1
DJNZ R6,DL2
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END。

相关文档
最新文档