8段数码管动态显示详解
- 格式:doc
- 大小:153.50 KB
- 文档页数:3
S T M328位数码管动
态扫描说明书
-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
8位数码管动态扫描说明书
一:原理图
数码管电路图
LED数码管引脚定义
二:工作原理
数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一定的电压差值时,便会点亮该段。
当E3输入为1,也就是LED_SEL输入为0时,根据SEL0~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
寄存器的具体说明可参考《STM32中文参考资料》。
三:实验现象及操作
对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。
无其他操作。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。
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--;}}。
8个数码管动态显示南昌大学实验报告学生姓名:王崇伙学号:6103413026专业班级:生医131实验类型:□验证□综合设计□创新实验日期:2022/10/9实验成绩:实验二、8个数码管动态显示1~8一、实验目的1、掌握汇编查表法实现动态数码管显示。
2、熟练使用proteu仿真工具。
二、实验工具1、PC机2、keil程序编辑工具3、proteu仿真工具三、实验原理八路七段数码管动态显示原理其实和一个数码管显示0~F原理相同,不同在于显示数字的数码管有一个一次变成八个显示0~8,P0控制段选,P1控制位选,由本次实验使用八路共阴极数码管(如下图),当P0=0某7F(8)时,位码P1=0某fe既选通第八个数码管其余位选高电平不导通,结果就为第八个数码管显示8,依次P0段选‘1’时P1位选第一个数码管结果就为第一个数码管显示‘1’,延时0.2再依次循环输入1~8位选依次选一~八达到八位数码管循环显示1~8。
四、实验程序框图开始初始化端口设置断码表、位码表设定i=0,i++N显示i指向的内容Yi<8五、实验程序#include#include#include#defineucharunignedcharbitP_HC595_SER=P0^0;bitP_HC595_RCLK=P 2^4;bitP_HC595_SRCLK=P0^3;ucharcodeSEG7[]={0某3F,0某06,0某5B,0某4F,0某66,0某6D,0某7D,0某07,0某7F,0某6F,0某77,0某7C,0某39,0某5E,0某79,0某71,0某00};ucharcodeScon_bit[]={0某fe,0某fd,0某fb,0某f7,0某ef,0某df,0某bf,0某7f};uchardataDi_buf[]={16,16,16,16,16,16,16,0};voidDelay1m(){ unignedchari,j;_nop_();_nop_();_nop_();i=11;j=190;do{while(--j);}while(--i);}voidF_Send_595(uchar某){uchari;for(i=0;i<8;i++){某=某<<1;P_HC595_SER=CY;P_HC595_SRCLK=1;P_HC595_SRCLK=0;}}voiddiplay(void){uchari;for(i=0;i<8;i++){F_Send_595(Scon_bit[i]);F_Send_595(SEG7[Di_buf[i]]);P_HC595_RCLK=1;P_HC595_RCLK=0;De lay1m();}}六、实验结果六、实验总结延时0.2S,8个数码管动态显示1~8通过本次实验让我加深了对数码管显示功能的理解,并进一步也掌握了使用proteu仿真。
实验八数码管动态显示一、实验目的1、掌握数码管的显示原理。
2、掌握利用数码管显示计算数机内部信息。
3、掌握数码管动态显示的原理及使用。
二、实验技术准备1、数码管排列图实验箱共有8个共阴极数码管。
段码输入端:A、B、C、D、E、F、G、DP,8个数码管的段码是并联的,每个段码都通74LS244驱动器加以驱动。
位码控制端:S0、S1、S2、S3、S4、S5、S6、S7,8个位码是独立的,每个位码控制端经过一个与非门。
要使数码管显示数字,相应的段码应输入高电平,对于的位码也为高电平。
(注:位码段浮空均为高电平。
)2、 AL与段码的对应关系dp g f e d c b a3、特殊字符有H P C F E L h c d b等,要会写出对应的十六进制表示的七段代码。
三、动态显示原理因为实验箱8个数码管的段码是并联在一起的,一次只能显示一种字符。
要使多位数码管分别显示不同的字符,先使第一个数码管显示第一种字符, 位码控制端S0保持几个毫秒之后, 使第二个数码管显示第二种字符, 第二个位码控制端S1保持几个毫秒后, 然后再指向下一个数码管…这样循环显示。
由于人眼的视觉惯性(暂留)作用,在感觉上好象是多位数码管“同时”显示不同的字符。
由于数码管点亮后熄灭存有余晖,会造成显示上的模糊。
为了不造成数码管显示上的混乱,在显示每位字符之前,•都必须通过关闭显示将数码管上的显示清除掉,即:使对应的数码管位码为低电平。
若位码控制地址为280H,则关闭数码管显示为:MOV DX,280HMOV AL,00HOUT DX,AL数码管动态显示框图位码地址选用Y0, 段码地址选用Y1。
四、硬件调试先调试位码控制是否正常。
1、位码部分接线完毕检查无误后,点击工具栏中的“工具软件”,选“接口调试工具”。
2、在数据发送框里,选“IO地址”,在“起始地址”栏里填写位码端口地址,在右边输入框内填写要输出的数据,控制位码监控灯LED1、LED2的亮灭。
华南理工大学广州汽车学院单片机课程设计题目: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. 了解数码管动态显示的原理。
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程序设计思路8位数码管动态扫描是经典的测试数码管是否正常工作和学习使用数码管显示的案例,首先要理解段选和位选概念,段选是选择一个数码管上哪个发光二极管发光,而位选则是选择八个数码管中哪个数码管来显示。
8位数码管动态扫描电路连接示意图2关键代码设计说明2.1公共变量定义及说明sbit Sel0=P2^0;//sbit Sel1=P2^1;//sbit Sel2=P2^2;//位选的三个引脚控制位uchar show_w1;uchar show_w2;uchar show_w3;uchar show_w4;uchar show_w5;uchar show_w6;uchar show_w7;uchar show_w8;//show_wi(i=1,2,3,4,……,8)分别是对应左到右的各个数码管上的显示的数字uchar flag;//分频作用,同时用作位选下标uchar count;//分频作用的变量uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x40,0x00}; //段选,显示0-fuchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //位选,选择是0-7中的一个数码管2.2 Init():完成初始化配置;(1)P0和P2口需要设置成推挽模式输出,以驱动LED数码管正常显示。
P2M1=0x00; P2M0=0xff; P0M1=0x00; P0M0=0xff;(2)TMOD=0x01; //定时器0采用模式1(3)打开中断并允许定时器0中断EA=1;//打开总中断ET0=1;//允许定时器0中断TR0=1;//启动定时器0(4)设置定时器初始值TH0=(65535-1000)/256; TL0=(65535-1000)%256;(5)设置位选位flag初始值为0;(6)为每个数码管要显示的内容赋初值show_w1=0;show_w2=1;show_w3=2;show_w4=3;show_w5=4;show_w6=5;show_w 7=6;show_w8=7;2.3void timer0() interrupt 1当定时器0初始值不断加一最终溢出时激发的处理方法。
电子课程设计— 8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
2. 要求在某一时刻,仅有一个LED数码管发光。
3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5、研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图设计的总体框图如图2-1所示。
图2-1总体框图三、选择器件 1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。
U13DCD_HEX图1 数码管数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。
8位动态LED数码管显示实验(精)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位数码管。
动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h//----------------------------------------------------------//程序作用:显示头文件display_s.h//----------------------------------------------------------#ifndef _display_#define _display_#includesbit 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,0x 89,0x8C };//定义段码//延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)< bdsfid="131" p=""></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#include //调用显示头文件main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6, 0x7};//显示01234567 while(1){display(a); //显示数据}}。
//LED数码管动态显示//P1-->位选P2-->段选#include<reg52.h>//函数声明区void delay(unsigned int xms);void changeNumber2display_number(unsigned int number);void display(unsigned int number);//变量定义区unsigned int a=222;unsigned char display_number[8];//#define gongyi#ifdef gongyi//共阴极编码unsigned code num_table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71} ;#else//共阳极编码unsigned code num_table[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e} ;#endifvoid main(){EA=1;ET0=1;TR0=1;TMOD=0x01;while(1){display(a);}}//0.5s定时void T0_time()interrupt 1{unsigned char num;TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==20){num=0;a++;}}//把一个数转化成8个字符数存放到数组里void changeNumber2display_number(unsigned int number) {unsigned char i,j;unsigned int temp;temp=number;for(i=0,j=0;i<8;i++,j++){display_number[j]=temp%10;temp=temp/10;}}//8位数码管动态显示void display(unsigned int number){unsigned char i,j;changeNumber2display_number(number);//显示第一个数P1=0xfe;P2=num_table[display_number[7]];delay(2);P1=0xff;//显示第二个数P1=0xfd;P2=num_table[display_number[6]];delay(2);P1=0xff;//显示第三个数P1=0xfb;P2=num_table[display_number[5]];delay(2);P1=0xff;//显示第四个数P1=0xf7;P2=num_table[display_number[4]];delay(2);P1=0xff;//显示第五个数P1=0xef;P2=num_table[display_number[3]];delay(2);P1=0xff;//显示第六个数P1=0xdf;P2=num_table[display_number[2]];delay(2);P1=0xff;//显示第七个数P1=0xbf;P2=num_table[display_number[1]];delay(2);P1=0xff;//显示第八个数P1=0x7f;P2=num_table[display_number[0]];delay(2);P1=0xff;}void delay(unsigned int xms){unsigned int i,j;for(i=xms;i>0;i--)for(j=120;j>0;j--);}。
8位数码管动态显示的频率计第一篇:8位数码管动态显示的频率计一、课程设计要求设计一个8位数码管显示的频率计(频率分辨率为0.1Hz)。
二、总体结构框图系统时钟分频及控制待测频率计数数据锁存动态扫描数码管段选数码管位选数码管显示图1 总体结构框图三、课程设计原理在电子技术中,频率是最基本的参数之一,并且与许多点参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得尤为重要。
测量频率的方法有很多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:一是直接测频法,即在一定的闸门时间内测量被测信号的脉冲个数;二是间接测频法即周期法,如周期测频法。
直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数阀门的时间长短以达到不同的测量精度;间接测频法适用于低频信号的频率测量。
本次课程设计中使用的是直接测频法,即用计数器在计算机10s 内输入信号周期的个数,其测频范围为0Hz-9999999.9Hz。
四、器件的选择1、装有QuartusII软件的计算机一台。
2、芯片:使用altera公司生产的Cyclone系列芯片,本实验箱中为EP1C8Q208C8N芯片。
3、EDA实验箱一个。
4、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载。
5、时钟源。
五、功能模块和信号仿真图以及源程序(1)系统时钟分频及控制的功能模块图及其源程序图2 功能模块图作用:将试验箱上的20MHz的晶振分频,输出CLOCK为数码管提供1kHz的动态扫描频率。
TSTEN输出为0.05s的信号,对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制,当TSTEN高电平时允许计数,低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁存器REG32B中,并由外部的十进制7段数码管显示计数值。
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(发光二极管)组成,分别代表数码管的不同段或区域。
数码管段的结构通常按照a至g的顺序命名,其中a代表上部分的水平段,b和c代表左上和右上的斜段,d代表中间的水平段,e和f代表左下和右下的斜段,g代表底部的水平段。
根据这些数码管段的状态(点亮或熄灭),可以显示不同的数字或字符。
八位数码管的每个位(digit)由一个数码管和一个对应的译码器组成。
译码器是负责将输入的数字或字符转换为相应的数码管段的驱动信号。
通过逐个控制这八个位,可以实现多位数的显示。
在八位数码管显示原理中,需要一个控制电路或芯片来依次选择每个位。
选择位的控制通常是通过一个二进制计数器进行实现。
计数器每计数一次,就会选择下一个位。
同时,译码器接收到对应的数或字符后,会将对应的数码管段驱动信号输出,使其相应的数码管段点亮。
为了实现动态显示,在数码管中需要进行快速的刷新。
一般情况下,每个位的刷新周期在几十毫秒左右,就能够产生连续的显示效果。
这种刷新方式称为多路复用,通过快速地在不同的位之间切换,人眼会感觉到所有位都在同时显示。
总之,八位数码管显示原理是通过控制译码器和多路复用方式来实现数字或字符的显示。
通过逐位刷新,使得多个数码管能够同时显示不同的数字或字符,从而实现更复杂的信息显示。
8位共阴极数码管动态显示时间,可调节,调节的数闪烁显示//本例程为共阴极数码管;//在普中单片机上通过实验;//8位数码管动态显示时间,可调节,//调节时间时,调节的数闪烁显示;//比较两种闪烁的方法;#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit tiaojie=P3^0;sbit jia=P3^1;sbit jian=P3^2;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};uchar a,b,num1,num2,flag100ms,flag1s,flagtj;uchar miao,fen,shi,flagjia,flagjian;bit flag_1s;uchar code wela[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar dula[8]={0,0,1,1,2,2,3,3};void delay(uint z);void intc();void keyscan();void disp();void main(){intc();while(1){keyscan();disp();}}//================void intc(){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;EA=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;a++;if(a==10){flag100ms=1;}if(a==100){a=0,flag1s=1,miao++;flag_1s=~flag_1s;}if(miao==60){miao=0,fen++;}if(fen==60){fen=0,shi++;if(shi>12)shi=1;}}//====================void disp(){uchar i;dula[7]=miao%10;dula[6]=miao/10;dula[5]=10;dula[4]=fen%10;dula[3]=fen/10;dula[2]=10;dula[1]=shi%10;dula[0]=shi/10;/*switch(flagtj)//第一种方法实现闪烁显示{case 1: if(flag_1s==1){dula[7]=11;dula[6]=11;}else{dula[7]=miao%10;dula[6]=miao/10;}break;case 2: if(flag_1s==1){dula[4]=11;dula[3]=11;}else{dula[4]=fen%10;dula[3]=fen/10;}break;case 3: if(flag_1s==1){dula[1]=11;dula[0]=11;}else{dula[1]=shi%10;dula[0]=shi/10;}break;case 0:break;}for(i=0;i<8;i++){ P0=table[dula[i]];P2=wela[i];delay(10);P0=0;}*/for(i=0;i<8;i++)//第二种闪烁显示方法{switch(flagtj){case 1:if(i>5&&i<8){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 2:if(i>2&&i<5){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 3:if(i>=0&&i<2){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 0:P0=table[dula[i]];break;}P2=wela[i];delay(10);P0=0;}}//=====================void delay(uint z){uint x;uchar y;for(x=0;x<z;x++)for(y=0;y<112;y++);}//===========================void keyscan(){if(tiaojie==0)delay(100);if(tiaojie==0){while(!tiaojie);flagtj++;if(flagtj>3)flagtj=0;}if(jia==0)delay(100);if(jia==0){while(!jia);flagjia=1;}if(jian==0)delay(100);if(jian==0){while(!jian);flagjian=1;}if(flagtj!=0)switch(flagtj){ case 1: if(flagjia==1){flagjia=0;miao++;if(miao>60)miao=0;}if(flagjian==1) {flagjian=0;if(miao<1)miao=1;miao--;}break;case 2: if(flagjia==1) {flagjia=0;fen++;if(fen>60)fen=0;}if(flagjian==1) {flagjian=0;if(fen<1)fen=1;fen--;}break;case 3: if(flagjia==1) {flagjia=0;shi++;if(shi>12)shi=1;}if(flagjian==1) {flagjian=0;if(shi<1)shi=1;shi--;}break;}}//===============。
实验一八段数码管显示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或串口连接起来,打开实验箱电源。
原理图: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),由于人的视觉暂留
现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要
扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
例如数码管显示 01234567 这么 8 个数,在单片机中实际的工作流程如下:先打开 P2.0,送 0, 然后关掉 P2.0,开 P2.1 送 1, 再关掉 P2.1,打开 P2.2 送 2 , 依次向下,由于速度足够快, 那么我们将连续的看到
01234567 这 8 个数。
程序运行照片:
1、接 8 位数码管的数据线。
将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51.
2、接 8 位数码管的显示位线。
将数码管部份的显示位口 JP8 接到 CPU 部份
的 P2 口 JP52.
程序流程图:。