四位数码管动态显示
- 格式:docx
- 大小:419.93 KB
- 文档页数:4
3.6显示电路及其相关元件介绍3.6.1 7段数码管及74LS164介绍数码管是由发光二极管组成的显示器[13],有7段和“米”字段之分,如图3-9所示的段数码管有共阴极和共阳极接法两种。
共阳极数码管的发光二极管的阳极连接在一起,通常此公共阳极接+5V,当某个发光二极管的阴极为低电平时,发光二极管电亮,相应的端被显示。
图3-9 七段数码管结构74LS164是8位串入/并出的移位寄存器[14],无并行输出控制端,在串行输入过程中,其输出状态会不断的变换。
其真值表如表3-3所示。
表3-3 74LS164真值表Q A0、Q B0和Q H0是在稳态输入状态输入条件建立之前Q A、Q B和Q H相应的电平; Q An和Q Bn是最近时钟脉冲在上升沿转换之前Q An和Q Bn的电平,表示移一位。
图3-10 显示电路3.6.2数码管显示电路介绍显示电路有静态和动态两种。
所谓动态显示就是在执行相应的显示指令时才会点亮相应的数码管,相关指令执行完后就会熄灭,依靠人的视觉暂留给人一种数码管被一直点亮的感觉,而实际上数码管是闪烁的,应用于程序不大的系统中;而静态显示是是当数码管显示某一个字符时,相应的发光二极管恒定地导通或截止。
考虑到本设计程序并不庞大,所以选用四位7段数码管组成动态显示电路。
如图3-10所示。
单片机的串行口工作于模式0[15],即同步移位寄存器模式。
数据由RXD端发送,同步移位脉冲由TXD端输出。
通过74LS164转换为并行输出,构成4位7段数码管的段选。
数码管的位选分别由单片机的P3.3、P3.4、P3.5和P3.7 口构成。
图中的四个PNP型三极管用于控制四个数码管的选通,反相器7404是为了防止+5V直接与单片机I/O口导通导致单片机I/O口烧毁。
当P3.3、P3.4、P3.5和P3.7中有一个输出高电平时,经过反向器7404变为低电平后导通相应的三极管从而将+5V加到该路数码管的共阳极上。
当74LS164发出的段码全为0时,则该路数码管的发光二极管全亮。
一、实验目的1. 掌握数码管动态扫描显示的原理和编程实现方法;2. 熟悉单片机与数码管之间的接口连接;3. 学会使用定时器中断控制数码管的动态显示;4. 培养动手能力和问题解决能力。
二、实验原理数码管动态显示是通过单片机控制多个数码管同时显示不同的数字或字符,利用人眼的视觉暂留效应,实现快速切换显示内容,从而在有限的引脚数下显示更多的信息。
实验中,我们采用动态扫描的方式,依次点亮数码管,通过定时器中断控制扫描速度。
三、实验器材1. 单片机开发板(如51单片机、AVR单片机等);2. 数码管(共阳/共阴自选);3. 连接线;4. 电阻;5. 实验台;6. 编译器(如Keil、IAR等)。
四、实验步骤1. 设计电路图:根据实验要求,设计单片机与数码管的连接电路图,包括数码管的段码、位选信号、电源等。
2. 编写程序:使用C语言或汇编语言编写程序,实现数码管的动态显示功能。
(1)初始化:设置单片机的工作模式、定时器模式、端口方向等。
(2)显示函数:编写显示函数,实现数码管的点亮和熄灭。
(3)定时器中断服务程序:设置定时器中断,实现数码管的动态扫描。
3. 编译程序:将编写的程序编译成机器码。
4. 烧录程序:将编译后的程序烧录到单片机中。
5. 连接电路:将单片机与数码管连接好,包括数码管的段码、位选信号、电源等。
6. 运行实验:打开电源,观察数码管的显示效果。
五、实验结果与分析1. 实验结果:数码管按照预期实现了动态显示功能,依次点亮每位数码管,并显示出不同的数字或字符。
2. 分析:(1)通过调整定时器中断的周期,可以改变数码管的扫描速度,从而控制显示效果。
(2)在编写显示函数时,要考虑到数码管的共阳/共阴特性,选择合适的点亮和熄灭方式。
(3)在实际应用中,可以根据需要添加其他功能,如显示时间、温度等。
六、实验总结1. 通过本次实验,掌握了数码管动态显示的原理和编程实现方法。
2. 熟悉了单片机与数码管之间的接口连接,提高了动手能力。
《FPGA设计与应用》数码管显示实验一、实验目的1.学习动态数码管的工作原理;2.实现对EGO1开发板四位动态数码管的控制;二、实验内容实现对EGO1开发板四位动态数码管的控制,使其能够正常工作;三、实验要求在EGO1开发板上显示想要的数字。
四、实验背景知识1.LED数码管基础知识在数码管上显示数字就是将相应的段位点亮组成要显示的数字,共阴数码管的码值表如下所示,‘1’代表相应的管脚输出高电平,点亮相应段位,‘0’代表相应的管脚输出低电平,不点亮相应段位。
2.动态数码管原理EGO1 开发板上使用的是共阴极动态数码管,这种数码管有四个共阴极分别选通对应的每位数码管,四位数码管的八个段码脚连接在一起。
动态数码管显示的原理是:每次选通其中一位,送出这位要显示的内容,然后一段时间后选通下一位送出对应数据,4 个数码管这样依次选通并送出相应的数据,结束后再重复进行。
这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
五、实验方案及实现1、数码管显示的设计共分3个模块:(1)数码管封装模块(2)数码管设计模块(3)顶层模块数码管封装模块代码:module smg_ip_model(clk,data,sm_wei,sm_duan);input clk;input [15:0] data;output [3:0] sm_wei;output [7:0] sm_duan;integer clk_cnt;reg clk_400Hz;always @(posedge clk)if(clk_cnt==32'd100000)begin clk_cnt <= 1'b0; clk_400Hz <= ~clk_400Hz;endelseclk_cnt <= clk_cnt + 1'b1;reg [3:0]wei_ctrl=4'b1110;always @(posedge clk_400Hz)wei_ctrl <= {wei_ctrl[2:0],wei_ctrl[3]}; reg [3:0]duan_ctrl;always @(wei_ctrl)case(wei_ctrl)4'b1110:duan_ctrl=data[3:0];4'b1101:duan_ctrl=data[7:4];4'b1011:duan_ctrl=data[11:8];4'b0111:duan_ctrl=data[15:12];default:duan_ctrl=4'hf;endcasereg [7:0]duan;always @(duan_ctrl)case(duan_ctrl)4'h0:duan=8'b0011_1111;4'h1:duan=8'b0000_0110;4'h2:duan=8'b0101_1011;4'h3:duan=8'b0100_1111;4'h4:duan=8'b0110_0110;4'h5:duan=8'b0110_1101;4'h6:duan=8'b0111_1101;4'h7:duan=8'b0000_0111;4'h8:duan=8'b0111_1111;4'h9:duan=8'b0110_1111;4'ha:duan=8'b0111_0111;4'hb:duan=8'b0111_1100;4'hc:duan=8'b0011_1001;4'hd:duan=8'b0101_1110;4'he:duan=8'b0111_1000;4'hf:duan=8'b0111_0001;数码管设计模块module test(clk,data);input clk;output [15:0]data;reg clk_1Hz;integer clk_1Hz_cnt;always @(posedge clk)if(clk_1Hz_cnt==32'd2*******-1)begin clk_1Hz_cnt <= 1'b0; clk_1Hz <= ~clk_1Hz;end elseclk_1Hz_cnt <= clk_1Hz_cnt + 1'b1;reg [39:0]disp=40'h1234567890;reg [15:0]data;always @(posedge clk_1Hz)begindisp <= {disp[35:0],disp[39:36]};data <= disp[39:24];endEndmodule顶层模块module smg_ip(clk,sm_wei,sm_duan);input clk;output [3:0]sm_wei;output [7:0]sm_duan;wire [15:0]data;wire [3:0]sm_wei;wire [7:0]sm_duan;test U0 (.clk(clk),.data(data));smg_ip_model U1(.clk(clk),.data(data),.sm_wei(sm_wei),.sm_duan(sm_duan)); endmodule六、实验结果Vivado仿真:上实验板实操:七、实验心得次实验主要学习了利用vivado软件实现数码管的显示,利用编程来实现,并且还对动态数码管的原理进行了一定的学习,包括上次实验学习到的模块化设计,方便程序的调试,程序运行过程中并不顺利,一直没有创建出pin文件夹,最后还是在老师的帮助下完成了pin文件夹的创建,导入到板子后完成了本次实验的设计。
《数字电路》课程设计四位LED动态扫描设计目录1前言(引言)随着计算机技术和电子技术的飞速发展和广泛应用,电器设备的输出显示技术也变得复杂多样,诸如CRT显示、LCD显示、多位LED显示及发光二极管显示等应运而生。
在这些显示当中,LED及发光二极管显示电路较为简单,成本也较低,在功能单一的仪器仪表与机电设备中应用较广。
但当设备显示的点或位较多时,就需要采用一定的驱动电路与相应的驱动方式。
通过我们所学的数字电路,模拟电路,设计一个电路,实现一些功能。
此次设计锻炼我们的动手能力,解决问题的能力!2设计任务及方案论证用四位编码开关编码,将编出来的数字(0~9)以动态扫描的形式显示在LED数码管上,并且能够调节扫描频率。
1.通过编码开关,编出0000~9999的数字。
2.通过两个四选一的选择开关(74LS153),选择输出位数。
3.将选择输出的四位进行排序,接入数码管译码器(C4511)。
4.将对应的编码通过译码器显示在数码管上。
5.由于要求动态扫描:接入一个时钟脉冲。
产生时钟脉冲需要接入555多些振荡器。
产生的CP脉冲,通过计数器产生00~11的二进制数。
两位二进制数与四选一选择开关和2—4的计数器同步,产生1110,1101,1011,0111的四位二进制数作为数码管的驱动电压。
将设计的电路,经过理论计算,做出电路板,进行调试,从而来验证试验设计的真确性。
3电路设计原理与实验电路3.1设计任务及要求利用数字集成电路(如:74LS353、48、139、393,NE555等)和分立元件设计一个四位LED显示器动态扫描驱动电路。
(1)基本要求①显示范围:0000~9999;②显示方式:LED显示;③扫描频率:1Hz~1000Hz连续可调;④可预置数:0000~9999。
(2)发挥部分①扫描频率:1Hz~1000Hz连续可调;②自制符合要求电源。
3.2 设计方案通过编码开关对0到9的数字进行编码,送入四选一的选择器(74LS153),通过由低位到高位的排序,将选择的数字传入到译码器(74HC4511)中,并通过输出中间级使其数据传送到LED七段数码显示管。
单片机数码管动态显示实验报告单片机数码管动态显示实验程序(汇编)单片机数码管动态显示实验程序org 00hajmp headorg 0030hhead:mov sp,#0070hnum equ p0 ;p0口连接数码管reset:mov dptr ,#tabmov r0,#4sh:acall show_tabcall dptr_adddjnz r0,shmov r0 ,#4sjmp resetdptr_add:inc dptrinc dptrinc dptrinc dptrrettab :db0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;;;;;;;;;;;;;;;;;;;;; 函数的功能是用来动态显示dptr上的四个数据 ;;;;;;;;;;;;;;;;;;;;;; show_tab:clr amov r2,#0mov r3,#148mov p2,#238loop:movc a,@a+dptrmov num ,aacall delay_5msinc r2mov a,r2;调用片选函数前注意A的变化acall select_movcjne r2,#4,loopmov r2,#0clr adjnz R3,loopret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;select_mov:;p2的初值238push 0e0hmov a,p2rl amov p2,apop 0e0hretdelay_5ms:mov r6,#5signed_5ms:call delay_1msdjnz r6,signed_5msret篇二:单片机动态数码显示设计实验报告微机原理与接口技术实验报告实验题目:指导老师:班级:计算机科学与技术系姓名:动态数码显示设计2014年 12月3日实验十三动态数码显示设计一、实验目的1.掌握动态数码显示技术的设计方法。
//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止//使用时需采用锁存器#include 〈reg52.h〉#include”stdio。
h"unsigned char code LED[]={0xc0,0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};unsigned char LEDbuff[]={0xff,0xff,0xff,0xff};//定义数码管的位选段sbit SEG_bit_1 = P0^1;sbit SEG_bit_2 = P0^2;sbit SEG_bit_3 = P0^3;sbit SEG_bit_4 = P0^4;unsigned int cnt=0;unsigned int sec =0;unsigned int mini=0;unsigned int hour=0;unsigned char i=0;/*void delay(unsigned int z ){unsigned int x,y;for(x=z;x>0;x--)for(y=110;y>0;y-—);}*/void interrupttimer0() interrupt 1 /*设置中断函数*/{TH0=0xfc;TL0=0x18;cnt++;//P1=0x80;//delay(1);switch(i){case 0:SEG_bit_1 = 0;SEG_bit_4 = 1;P1=LEDbuff[0];i++;break;case 1:SEG_bit_4 = 0;SEG_bit_3 = 1;P1=LEDbuff[1];i++;break;case 2: SEG_bit_3 = 0;SEG_bit_2 = 1;P1=LEDbuff[2]&;i++;break;case 3:SEG_bit_2 = 0;SEG_bit_1 = 1;P1=LEDbuff[3];i=0;break;default:break;}}/************************************************ void serial_init(){//TMOD = 0x20;//定时器T/C1工作方式2SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收) TH1 = 0xF3; //定时器初值高8位设置TL1 = 0xF3; //定时器初值低8位设置PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)TR1 = 1; //定时器启动}**********************************************/ void main(){//serial_init(); //串口初始化//TMOD=0x21;/*设置定时器*/TMOD=0x01;TH0=0xfc;TL0=0x18;TR0=1;EA=1; /*设置中断*/ET0=1;while(1){if(0==TF0){if(cnt〉=1000){cnt=0;sec++;if (sec>=60){sec=0;mini++;if (mini>=60){mini=0;hour++;if (hour>=24) hour=0;}}LEDbuff[0]=LED[sec%10];//*设置数码管显示位*/LEDbuff[1]=LED[sec/10%10];LEDbuff[2]=LED[mini%10];LEDbuff[3]=LED[mini/10%10];// TI=1; //使用printf函数前须先将发送标志位TI置1// printf(”%4d %x ,%x %x\n ”,sec,LEDbuff[0],LEDbuff[1],LEDbuff[2]);// TI=0;}}}}。
/*-----------------------------------------------------方案要求:上电一个LED一直闪,四位数码管9999循环正计数思路:用两个定时器分别控制LED和数码管----------------------------------------------------------*/#include <reg51.h>//51头文件#define Uchar unsigned char//宏定义,用Uchar来代表关键词unsigned char(无符号字符型数据)#define Uint unsigned int//宏定义,用Uchar来代表关键词unsigned int(无符号整型数据)sbit seg = P2^6; //位声明,声明该位用于控制数码管的笔画.sbit com = P2^7;//位声明,声明该位用于控制数码管的公共端.sbit LED = P1^0;//位声明,声明该位用于控制一个LED亮灭.Uchar displ[]= //声明数组,displ是自定义数组名,[]是叫下标的,里面本应填元素个数,但可以不填.{0x3f,0x06,0x5b,0x4f, //这些都是叫数组的元素,按顺序排放,从左到右,从上到下.0x66,0x6d,0x7d,0x07,0x7f,0x6f,//这是共阴数码管,ox7f=01111111 ,如果该数(8字)是10000000则是共阳.};Uint number, number1, number2, qian, bai, shi, ge; //定义多个全局变量,以便后面要用到void delay_mS (Uint k)//延时子程序,k为形参,在显示子程序里会传递实参来进行计算{Uint i,j;//定义两个局部变量for(i=k; i>0; i--)//k接到实参后,如果i大于0,那么让i自减1,再执行{ }内的for语句,然后再判断i是否大于0,{for(j=110; j>0; j--);}//直到i=0(不大于0),该延时子程序才算执行完成,跳出。
实验名称:实验名称四位数码管动态显示
一、实验目的
1.通过AT89C52单片机控制四位数码管动态显示数字“3210”。
2.用Protues设计、仿真以AT89C52为核心的四位数码管动态显示实验装置。
3.掌握四位数码管的控制方法。
二、实验任务
P1端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,接通电源时,显示“”字样;
三、实验设备
微机1台、Proteus软件1套、GL10型51单片机学习开发板1台。
四、实验电路绘制
五、汇编语言程序设计
1.设计原理
动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。
在进行数码显示的时候,要对显示单元开辟4个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。
对于显示的字形码数据我们采用查表方法来完成。
2.程序框图
3.汇编程序
ORG 0000H ;初始化
START:MOV R0,#0FFH ;控制段选,给R0传递一个初值1111 1111
MOV DPTR,#TABLE ;将表头的地址传递给数据指针
NEXT:MOV A,R0 ;R0的值传给累加器A
MOVC A,@A+DPTR ;查表指令,将TABLE的值按底标给A
MOV P2,A ;A的值传给P2接口,显示数字0
LCALL DELAY ;调用延时函数,延时
INC R0 ;R0加一,
MOV A,R0 ;R0的值再次传给A,控制位选移动
MOV P1,A ;A的值传给P1口,
CJNE R0,#04,NEXT ;判断R0是否等于4,若不等于,转NEXT继续执行,若等于,继续执行下一条程序SJMP START,相当于将值初始化,重新开始。
SJMP START ;跳转到START,R0,R1初始化,重新执行一轮。
DELAY:MOV R6,#4 ;延时程序
DL2:MOV R7,#248
DL1:DJNZ R7,$
DJNZ R6,DL2
RET
TABLE:DB 3FH,06H,5BH,4FH ;以table为表头地址,依次存入二进制的
0.1.2.3
END
六、Proteus软件模拟仿真
七、GL10单片机仿真系统
1.实验板连线
2.实验操作步骤
先把“单片机系统”区域中的P1.0/AD0-P1.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;再把“单片机系统”区域中的P2.0/A8-P2.3/A15用4芯排线连接到“动态数码显示”区域中的0-N端口上。
八、实验结果
四位数码管显示出“0123”。
九、总结与体会
这个实验让我了解了keil软件的编程过程,同时对于protues的电路仿真过程有了更加深入的了解,知道了四位数码管如何进行片选和段选。