八位共阴极数码管动态显示时间,可调节,调节的数闪烁显示
- 格式:doc
- 大小:30.00 KB
- 文档页数:5
【技术分享】数码管显示常见问题总结2015—03-30吴鉴鹰(原创)一、数码管显示原理我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。
所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形.数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
其原理图如下。
其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。
一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。
显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。
数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。
所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。
可以看出两个编码的各位正好相反.如下图。
二、数码管出现暗红现象现象描述:单片机穿行口的范式0为同步移位寄存器方式,外接一个串入并出的移位寄存器,可以扩展为一个并行口。
但是发现数码管显示数据的时候,出现暗红现象。
电路连接图原因:数据在串行输出期间,输出允许控制端没有关闭,从而导致串口输出端不稳定产生暗红现象。
三、数码管闪烁1:动态扫描驱动的时候,时间调整的不对,时间太短,就会闪烁,时间太长,就会出玩不应该亮的位微亮,所以,这是调整延时时间的事ﻫ2:有可能是程序要求这样闪烁吧,别说不可能,有时候在某些系统中,还故意设有这种功能.3:即使用专用芯片,只要是扫描式的驱动,他也会闪烁,只是我们看起来不太明显。
4:如果从程序中讲的话,即使扫描时间合理,也有可能会因为程序的不合理性而出现闪动,这种情况一般为两种失误:a中断时间影响了扫描周期的时间,即中断时间长于扫描周期,就会出现闪烁 b闪烁的常用数据内存被快速更改后又改过来,属于寄存器的重复使用,这两种情况我都碰到过。
8位共阴极数码管一、介绍共阴极数码管是一种常用于数字显示的电子元件,其中的8位指的是它具有8个可独立控制的数字显示部分。
本文将深入探讨8位共阴极数码管的工作原理、使用方法以及一些注意事项。
二、工作原理1.共阴极:共阴极数码管的每个数字显示部分都有一个对应的阴极,这些阴极都是共用一个地(GND)引脚的。
当某一段数码管需要显示数字时,需要给对应的阴极引脚提供高电平信号,使其与共阳极相连。
2.数码管译码:为了方便控制,通常使用译码器将数字信号转换为相应的阴极控制信号。
数码管的引脚按照某种编码规则与译码器相连,译码器根据输入的数字信号选择响应的阴极控制信号输出。
3.共阴极激活:为了显示多个数字或字符,需要以高速循环的方式激活每个数码管的阴极,并通过译码器设置正确的数字显示。
每个数码管的激活时间非常短暂,通过高速切换,人眼会感知到所有数码管同时显示的效果。
三、使用方法1.连接:将8位共阴极数码管的阴极引脚与译码器相连,根据译码器的输入引脚将其与控制器或微控制器连接。
2.设置显示:通过编程或控制信号,向译码器发送需要显示的数字或字符信息。
3.电源:为8位共阴极数码管提供稳定的电源供电,一般使用较小的电流。
四、常见问题1.数字显示不准确:可能是由于编程错误或信号干扰导致的。
检查编程代码,确认信号线路没有被其他组件干扰。
2.数码管闪烁现象:如果没有正确设置刷新频率,可能会导致数码管显示时出现闪烁。
调整刷新频率可以解决这个问题。
3.电流过大:如果数码管发热量较大,可能是由于信号电流过大导致的。
检查信号电流是否符合数码管的额定电流要求,如果不符合,使用限流电阻来控制电流。
五、优势与应用1.显示灵活:8位共阴极数码管可以显示数字、字母、符号等多种信息,使用广泛。
2.简单控制:通过使用译码器和控制器,可以轻松地控制8位共阴极数码管的显示内容。
3.成本较低:与其他显示设备相比,8位共阴极数码管的价格较为便宜,适合大规模应用。
8位共阴数码管实验报告一、引言数码管是一种常见的数字显示器件,广泛应用于各种电子设备中。
8位共阴数码管是一种常见的数码管类型,本实验旨在通过实际操作,了解8位共阴数码管的原理和使用方法,并通过编程控制,实现数字的显示。
二、实验原理1. 共阴数码管原理共阴数码管是一种常见的数码管类型,它由8个LED发光二极管组成。
在共阴数码管中,所有的LED的阴极都是连接在一起的,而阳极则分别连接到控制芯片的不同引脚上。
当某个LED的阳极接通时,与之对应的数字就会在数码管上显示出来。
2. 数码管的控制为了控制数码管显示不同的数字,我们需要通过控制芯片的引脚电平来控制数码管的阳极。
具体来说,我们可以通过将某个引脚拉低,使得与之相连的数码管的阳极接通,从而显示对应的数字。
三、实验材料和器件•Arduino开发板•8位共阴数码管•杜邦线四、实验步骤1. 连接电路将Arduino开发板和8位共阴数码管通过杜邦线连接起来。
具体的连接方式如下:- 将数码管的共阴极连接到Arduino开发板的GND引脚。
- 将数码管的8个阳极分别连接到Arduino开发板的数字引脚2-9。
2. 编写程序打开Arduino开发环境,编写以下程序代码:int digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};int digits[10][7] = {{1, 1, 1, 1, 1, 1, 0}, // 数字0的显示编码{0, 1, 1, 0, 0, 0, 0}, // 数字1的显示编码{1, 1, 0, 1, 1, 0, 1}, // 数字2的显示编码{1, 1, 1, 1, 0, 0, 1}, // 数字3的显示编码{0, 1, 1, 0, 0, 1, 1}, // 数字4的显示编码{1, 0, 1, 1, 0, 1, 1}, // 数字5的显示编码{1, 0, 1, 1, 1, 1, 1}, // 数字6的显示编码{1, 1, 1, 0, 0, 0, 0}, // 数字7的显示编码{1, 1, 1, 1, 1, 1, 1}, // 数字8的显示编码{1, 1, 1, 1, 0, 1, 1} // 数字9的显示编码};void setup() {for (int i = 0; i < 8; i++) {pinMode(digitPins[i], OUTPUT);}}void loop() {for (int i = 0; i < 10; i++) {displayNumber(i);delay(1000);}}void displayNumber(int number) {int *digit = digits[number];for (int i = 0; i < 7; i++) {digitalWrite(digitPins[i], digit[i]);}}3. 烧录程序将编写好的程序通过USB线烧录到Arduino开发板中。
数码管显示不正常的调试方法与步骤总结分类:单片机2011-10-12 21:50 1940人阅读评论(0) 收藏举报数码管显示不正常大概有以下几种现象:1,完全不显示;2,显示部分段码;3,显示部分位码;4,显示闪烁;5,以上几种综合。
解决办法:步骤:1,确定数码管是共阴还是共阳2,检查数码管每段是否完好.如果上面两条没问题,则:若完全不显示:检查电压是否加反,共阴的位选送低电平,共阳的位选送高电平若某一位只显示部分段:检查程序所送段码是否正确,注意共阴的段选送高电平,共阳的段选送低电平若有一位或几位完全不显示:(1)若静态显示(所有位显示一样的数):只需检查程序这几位送的电平是否正确(2)若动态显示(扫描显示不同的数):若数字滚动显示或闪烁,则动态扫描速度过慢,应减少延时,加快扫描若显示的数字缺胳膊少腿或三头六臂:这种现象只存在于动态扫描情况下,称为鬼影。
原因是扫描过快导致上一个字符(视觉暂留结果)显示在当前字符上产生重叠解决办法:增长延时,减慢扫描还有一种情况若采用同时送段码和位码,则注意送段码前数据口要清零,如下[cpp]view plaincopyprint?1.INT_T0:2.MOV TH0,#(65536-2000) / 256 ;2ms 2000us3.MOV TL0,#(65536-2000) MOD 2564.MOV P0,#00h;新加该程序最大的Bug在这里,之所以显示不全是因为前几次显示加在后一次显示上导致重叠5. ; 或影藏,解决办法是每次显示之前将所有段码清零6.MOV A,#DISPBUF7.ADD A,DISPBIT ;DISPBIT+DISPBUF=40H-48H8.MOV R0,A9.MOV A,@R010.M OV DPTR,#TABLE11.M OVC A,@A+DPTR12.M OV P0,A ;段选13.14.M OV A,DISPBIT15.M OV DPTR,#TAB16.M OVC A,@A+DPTR17.M OV P2,A ;位选18.19.I NC DISPBIT20.M OV A,DISPBIT21.C JNE A,#08H,KNA ;08h22.M OV DISPBIT,#00H今天帮同学调了一下这个程序,在这里记下一笔,做个小结。
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仿真。
原理图: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),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
电子课程设计—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的另一端高电平,它便能点亮。
而共阳极就是将八个LED的阳极连在一起。
八位数码管显示原理
八位数码管是一种常见的数字显示器件,广泛应用于电子设备中。
它由七段数
码管和一个小数点组成,可以显示0-9的数字和一些字母。
在本文中,我们将介绍
八位数码管的显示原理及其工作方式。
八位数码管由七段数码管和一个小数点组成,每个数码管由7个发光二极管组成,分别对应显示数字的每一段。
通过控制这些发光二极管的通断,就可以显示出不同的数字和字母。
而小数点则是用来显示小数部分的。
八位数码管的显示原理基于这些发光二极管的组合和控制。
八位数码管的工作方式是通过控制每个发光二极管的通断来显示不同的数字和
字母。
具体来说,当需要显示某个数字或字母时,通过控制相应的发光二极管通断,使其显示出所需的图案。
这种控制可以通过数字电路或者微控制器来实现,其中数字电路一般采用BCD码或者二进制码来控制,而微控制器则可以通过编程来实现。
在实际应用中,八位数码管可以用于显示各种数字信息,比如温度、时间、计
数等。
通过合理的控制,可以实现不同数字的显示,满足各种需求。
而且由于其结构简单、成本低廉,因此在电子设备中得到了广泛的应用。
总的来说,八位数码管的显示原理基于七段数码管和小数点的组合控制,通过
控制发光二极管的通断来显示不同的数字和字母。
它的工作方式可以通过数字电路或者微控制器来实现,广泛应用于电子设备中。
希望本文能够帮助读者更好地理解八位数码管的显示原理和工作方式。
一、课程设计要求设计一个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段数码管显示计数值。
简要描述数码管的静态显示方式和动态显示方式数码管是一种常见的数字显示设备,广泛应用于各种计数、计时、测量等数字显示场景。
数码管的显示方式主要分为静态显示和动态显示两种。
静态显示是指在一段时间内,数码管的每一位显示的数字保持不变。
这种显示方式简单直观,适合单个数字的显示。
静态显示通常采用共阴极或共阳极的数码管。
在共阴极的数码管中,所有的阴极端均连接在一起,而七段数码管的七段LED共阳极加电,使得每一位数字能够在给定的电压下点亮。
静态显示通过改变每一位数字对应的LED的亮灭状态来显示不同的数字。
例如,在显示数字2时,将数码管的第2位点亮(或者熄灭),其他位保持熄灭(或者点亮),就能实现数字2的显示。
动态显示是指在一段时间内,数码管的每一位显示的数字按照一定的时间顺序不断变化。
通过快速地轮流显示不同数字,可以实现多个数字的同时显示。
动态显示通常采用共阳极的数码管。
在动态显示中,数码管的每一位数字通过快速切换的方式显示,使得人眼有一种连续的感觉。
例如,在一个四位数码管中显示时间,可以将每一位数字的显示时间设定为几毫秒,然后按照设定的时间顺序切换每一位数字的显示。
这样,人眼看到的效果就是四个数字同时显示出来。
静态显示和动态显示各有适用的场景。
静态显示适用于杂乱信息较少、每次显示一个数字的场景,如计量、测量等。
而动态显示适用于需要同时显示多个数字的场景,比如显示时间、温度等。
同时,动态显示也可以通过频率的调整,实现变化的效果,如电子钟中的闪烁冒号。
总之,无论是静态显示还是动态显示,数码管都是一种非常便捷、可靠的数字显示设备。
其显示方式灵活多样,能够适应不同的显示需求。
无论是在家庭生活中还是工业领域中,数码管都发挥着重要的作用。
电子课程设计——8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:自动化姓名:学号:指导教师:2014年12月目录一、设计任务与要求...................... 错误!未定义书签。
二、总体框图............................ 错误!未定义书签。
2.1、设计思想....................... 错误!未定义书签。
2.2、设计方案....................... 错误!未定义书签。
2.3、对方案的分析................... 错误!未定义书签。
三、选择器件 (4)3.1、实验所需器件: (4)3.2、器件说明: (4)四、功能模块 (7)4.1、脉冲模块设计 (7)4.2、扫描电路模块设计 (8)4.3、显示电路模块设计 (9)五、总体设计电路图 (10)5.1总体设计原理 (10)5.2、总体设计电路图 (11)5.3、仿真结果 (11)5.4、硬件实验 (13)六、心得体会 (14)8位数码管动态显示电路设计一、设计任务与要求1.设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
(第一至第八个数码管依次显示1、2、3、4、5、6、7、8)2.要求在某一时刻,仅有一个LED数码管发光。
3.该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4.当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5.研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图2、1、设计思想电路有八种显示状态,在第一脉冲周期内,第一个数码管显示1;第二个脉冲周期内,第二个数码管显示2;在第三脉冲周期内,第三个数码管显示3;第四个脉冲周期内,第四个数码管显示4;在第五脉冲周期内,第五个数码管显示5;第六个脉冲周期内,第六个数码管显示6;在第七脉冲周期内,第七个数码管显示7;第八个脉冲周期内,第八个数码管显示8。
试题9 参考答案一、填空1.AT89S51单片机的CPU由(运算器)和(控制器)组成。
2.AT89S51单片机中,程序计数器PC、DPTR和定时器/计数器都是16位的功能部件,其中,对(PC)不能进行直接的访问,对(定时器/计数器)的访问只能对其高8位和低8位分别进行读写,对(DPTR )则可以进行16位的读写。
3.设(A)=0A3 H,(R3)=2CH,(Cy)=1,执行指令ADDC A,R3后,(Cy)=(0),(Ac)=(1),(P)=(1)。
4.74LS138是具有3个输入的译码器芯片,其输出常作片选信号,可选中(8)片芯片中的任一芯片,并且只有1路输出为(低)电平,其它输出均为(高)电平。
5.AT89S51单片机有(5)个中断源,( 6 )个中断标志,( 2 )中断优先级。
6.定时器/计数器T0工作在方式3下时,会占用T1的两个控制位:即(计数运行控制位或TR1 )和(中断标志位或计数溢出标志位或TF1 )。
7.AT89S51单片机串行口的4种工作方式中,(方式1 )和(方式3 )的波特率是可调的,与定时器/计数器T1的溢出率有关,另外两种方式的波特率是固定的。
8.DAC0832的单缓冲方式,适用于只有(1)路模拟输出,或者(多)路但不要求同步输出的场合。
9.AT89S51单片机的堆栈采用先进(后)出的原则,指针SP始终指示(栈顶)的地址。
10.AT89S51单片机通过ADC0809进行模数转换时,需要通过指令(MOVX @DPTR,A或MOVX @Ri,A)启动转换,转换结束后需通过指令(MOVX A,@DPTR或MOVX A,@Ri )将转换结果保存在A中。
11.已知8段共阴极LED显示字符“H”的段码为76H,则8段共阳极LED显示该字符的段码为(89H)。
12.常用的单片机编程语言有汇编和C51,其中( C51 )编程效率高,(汇编语言)执行效率高。
13.若单片机的时钟频率为f osc,则定时器/计数器T1工作在方式2时,最小的波特率为(f osc/98304),最大的波特率为(f osc/12或f osc/192 )。
华南理工大学广州汽车学院单片机课程设计题目: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口线,又增加驱动能力。
硬件实验6 八段数码管显示实验1.实验目的1)了解数码管实现显示字符的7段码编制方法;2)掌握查表法获得0-F的7段码的方法;3)掌握静态显示和动态显示的原理,硬件连接方式和程序编写方法。
2.预习要求1)了解数码管静态显示和动态显示接口电路的设计方法和特点;2)了解数码管动态显示的程序设计方法;3)理解运用串行口工作方式0扩展I/O连接数码管的方法;4)认真预习本节实验内容,设计实验硬件连接电路,编写实验程序。
3.实验说明1)LED数码管显示原理8段LED数码管有共阴极和共阳极两种结构。
对于共阴数码管,其8个LED的阴极连接在一起作为公共COM端;而共阳数码管中8个LED的阳极连接在一起作为公共COM端。
共阴数码管显示的必要条件是其COM端接地或接具有较大灌电流能力的输入端口,此时当某个发光二级管的阳极为高电平时,该发光二极管点亮;共阳数码管显示的必要条件是共阳极接电源或具有较强电流输出能力的输出端口,此时当某个发光二极管的阴极接低电平时,该发光二级管被点亮。
2)LED数码管显示方式A.静态显示方式静态显示的特点是每个数码管需要一个具有锁存功能的8位输出口,用来锁存待显示的段码。
将要显示数的7段码输出到端口,数码管就会显示并一直保持到接收到新的显示段码为止。
静态显示的优点:显示程序简单,占用CPU时间少。
但当数码管数量较多时,就需要外扩较多的输出端口,因此静态显示的缺点是占用硬件资源多,成本较高。
B.动态显示方式动态显示的特点是将多个数码管的相应段码线连在一起,接到一个8位输出端口,该端口称为段码输出口;同时将各个(如8个)数码管的COM端连接到一个8位输出端口,该端口称为位控输出口。
这样的连接使得8个数码管只要2个输出端口就可以实现控制,大大简化硬件电路。
但是由于多个数码管的段码是连在一起的,所以需要结合位控信号,分时输出不同数码管上显示的7段码,即需要采用动态显示扫描,轮流向段码输出口输出段码和向位控输出口输出位选信号,并进行1~2ms的短时延时;8个数码管轮流输出一遍后,约20ms后,就要进行一次显示刷新,这样才能利用发光管的余辉和人眼视觉暂留作用,得到全部数码管同时稳定显示的效果。
电子课程设计—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 的另一端高电平,它便能点亮。
八位数码管显示原理
八位数码管显示原理是一种通过八个数码管显示数字或字符的技术。
每个数码管由七个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;}}//===============。
8位共阴极数码管动态显示时间,可调节,调节的数闪烁显示
//本例程为共阴极数码管;
//在普中单片机上通过实验;
//8位数码管动态显示时间,可调节,
//调节时间时,调节的数闪烁显示;
//比较两种闪烁的方法;
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit 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;
else
P0=table[dula[i]];}
else
P0=table[dula[i]];break;
case 2:
if(i>2&&i<5)
{if(flag_1s==1)
P0=0;
else
P0=table[dula[i]];}
else
P0=table[dula[i]];break;
case 3:
if(i>=0&&i<2)
{if(flag_1s==1)
P0=0;
else
P0=table[dula[i]];}
else
P0=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;
}
}
//===============。