实例(5)-数码管动态显示
- 格式:pdf
- 大小:218.67 KB
- 文档页数:4
02实验二数码管动态显示程序设计数码管是一种常见的数字显示器件,通常由七段LED组成。
通过控制不同的LED亮灭状态,可以显示出0到9的数字和一些字母。
数码管通常被广泛应用于计时器、温度显示器等设备中,用于显示数字和一些特定的符号。
数码管的动态显示是指通过快速切换数码管显示的内容,从而实现多个数码管连续显示不同的数字。
这种显示方式使得数字的显示看起来像是连续变化的,给人一种流动的感觉。
在进行数码管动态显示的程序设计时,需要考虑以下几个方面:1.数码管的接口:数码管通常使用共阴极或共阳极的接口方式,需要根据实际的硬件接口进行相应的程序设计。
2.显示内容的切换:数码管需要显示不同的数字,需要通过程序控制数码管的显示内容。
可以通过数组或者其他数据结构来存储需要显示的数字,并通过循环,依次将不同的数字输出到数码管上。
3.显示周期的控制:数码管动态显示的关键是控制显示的刷新速度。
数码管的刷新速度通常以帧率进行表示,即每秒显示的帧数。
常见的数码管帧率为50Hz或60Hz,即每秒刷新50次或60次。
程序需要根据帧率来控制数码管显示的频率。
4.数码管的亮度控制:数码管的亮度通常通过PWM(脉宽调制)来控制,即快速开关数码管的亮灭状态,通过调整开关的占空比来控制数码管的亮度。
程序需要实现相应的PWM控制函数,可以通过改变PWM的占空比来控制数码管的亮度。
下面是一个简单的数码管动态显示的程序设计示例:```c++#include <arduino.h>//数码管引脚定义const int digitPins[] = {2, 3, 4, 5};const int segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; //数码管显示的数字const int numbers[] =// abcdefg};//数码管显示的当前数字int currentNumber = 0;// 数码管显示的刷新速度,单位为msconst int refreshRate = 10;void setu//设置数码管引脚的模式for (int i = 0; i < 4; ++i)pinMode(digitPins[i], OUTPUT);}for (int i = 0; i < 7; ++i)pinMode(segmentPins[i], OUTPUT);}void loo//刷新数码管显示refreshDisplay(;//数码管显示的数字切换currentNumber = (currentNumber + 1) % 10; //延时delay(refreshRate);//刷新数码管显示的函数void refreshDispla//显示当前数字for (int i = 0; i < 4; ++i)digitalWrite(digitPins[i], LOW); setSegments(numbers[currentNumber]); delayMicroseconds(500);digitalWrite(digitPins[i], HIGH);}//设置数码管的段void setSegments(int segments)for (int i = 0; i < 7; ++i)digitalWrite(segmentPins[i], (segments >> i) & 1);}```该程序通过设置数码管引脚的模式来控制数码管的显示。
【006】多位数码管动态显示[51]点击数:2102 发布日期:2006-4-16 16:04:00实验目的:数码管动态显示多位数字。
实验参考:笨笨工作室实验五、多位数码动态显示。
()实验板: FB51A()。
该实验用到实验板的资源电路图如下:其中P0口是段码,低电平有效。
P2口是位码,高电平有效。
口操纵第1个数码管,一直到口操纵第8个。
该板的段码表如下:各个数码管的段码都是p0口的输出,即各个数码管输入的段码都是一样的, 为了使其别离显示不同的数字, 可采纳动态显示的方式,即先只让最低位显示0 (含点),通过一段延时,再只让次低位显示1,如此类推。
由视觉暂留,只要咱们的延不时刻足够短,就能够够使得数码的显示看起来超级的稳固清楚。
进程如以下图。
采纳上述方式思路编写如下:org 0000hstart: mov a,#08h ;0 ;段码mov p0,amov p2,#01h ;位码lcall delay_1msmov a,#0abh ;1mov p0,amov p2,#02hlcall delay_1msmov a,#12h ;2mov p0,amov p2,#04hlcall delay_1msmov a,#22h ;3mov p0,amov p2,#08hlcall delay_1msmov a,#0a1h ;4mov p0,amov p2,#10hlcall delay_1msmov a,#24h ;5mov p0,amov p2,#20hlcall delay_1msmov a,#04h ;6mov p0,amov p2,#40hlcall delay_1ms; mov a,#0aah ;7; mov p0,amov p0,#0aah ;感觉用这句和上面两句实现一样,可能这种适应以后会有效吧mov p2,#80hlcall delay_1msljmp startdelay_1ms: mov r6,#2temp: mov r5,#0ffhdjnz r5,$djnz r6,tempretend下载到板上取得测结果为从低到高八位别离显示0到7(含点)。
实验十二数码管动态显示一、实验目的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,280H ;置位控地址MOV AL,00H ;使位码均为低电平OUT DX,AL ;输出位控信号2位数码管动态显示框图提示:第2题位码地址选用Y0,段码地址选用Y1。
第3题位码地址选用282H,不是直接引用Y0。
设计一个简单的逻辑电路,利用Y0、A0、A1信号来分离出282H。
四、硬件调试先接好位码部分线路,调试位码部分。
1、位码部分接线完毕检查无误后,点击工具栏中的“工具软件”,选“接口调试工具”。
数码管动态显示及实现方法作者:张成法孙月兴来源:《电子技术与软件工程》2016年第22期摘要本文讲述利用74HC573锁存器和定时器来实现对数码管的动态显示,通过从左向右让六位数码管中的每一位每隔一秒依次显示123456来阐述数码管动态显示具体实现方法。
【关键词】动态显示数码管锁存器数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调、热水器和冰箱等)得到了极为广泛的应用。
在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容。
鉴于此,本文通过实际案例详细阐述了数码管的动态显示特点及实现方法。
1 系统整体设计本系统是由AT89C52单片机、2个74HC573锁存器U3和U4,1个10K的电阻排,6个7段共阴极数码管、电源电路和复位电路组成。
74HC573锁存器的锁存端LE是高电平的时候,它的输入端D0~D7和输出端Q0~Q7是直通的,此时输入端数据会直接输出给输出端。
74HC573锁存器的锁存端LE是低电平的时候,输入端和输出端断开,输出端保持原来的数值。
通过2个74HC573锁存器可以实现对数码管的段选和位选的选择。
所谓段选是表示数码管中亮的内容(比如 1,2,3,4,5.......),而位选是表示让哪一个数码管亮,本系统中同时接入了6个数码管,通过对位选的赋值,可以选择让哪一个数码管亮。
锁存器U3的输出WE1、WE2、WE3、WE4、WE5和WE6用来控制数码管的位选,锁存器U4的输出a、b、c、d、e、f、g和h用来控制数码管的段选,这两个锁存器的输入端全部接在了P0口上,P0口的内部无上拉电阻,需在它的外部加一个10K的上拉电阻排P1,这样的话,单片机一上电后,P0口就是高电平。
2 数码管显示分析如果想让哪个数码管亮,那么先将控制位选的锁存器U3的锁存端LE设为高电平,然后通过P0口送数值选择哪一位数码管亮,当这一位的数码管亮了以后,然后把锁存端LE设为低电平,锁存器的数据输出端的位选就保持住了,然后再把控制段选的锁存器U4的锁存端LE设置为高电平,然后通过P0口送数值,使数码管显示相应的数值,然后再把锁存器U4的锁存端LE设置为低电平,这时候段选和位选都赋上值了,数码管就亮了,并且显示相应的数值。
1 / 3 #include52.h> //#include #define uchar unsigned char #define uint unsigned int sbitwe0=P3^4; sbitwe1=P3^5; sbitwe2=P3^6; sbitwe3=P3^7; sbit led0=P2^0; sbit led1=P2^0; sbit led2=P2^0; sbit led3=P2^0; sbit led4=P2^0; sbit led5=P2^0; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//89ABCDEFvoid delay_ms(uint x){uint i,j;
for(i=x;i>0;i--) for(j=240;j>0;j--);}void main(){while (1){we3=0; P0=~table[1]; 2 / 3
we0=1; we1=1; we2=1; delay_ms (1); we2=0; P0=~table[2]; we0=1; we1=1; we3=1; delay_ms (1); we1=0; P0=~table[3]; we0=1; we3=1; we2=1; delay_ms (1); we0=0; P0=~table[4]; 3 / 3
we3=1; we1=1; we2=1; delay_ms (1);}}
#include<reg52.h>#define uint unsigned int //宏定义#define uchar unsigned char //宏定义uchar temp,aa,bai,shi,ge;sbit dula=P2^6; //段选信号位定义sbit wela=P2^7; //位选信号未定义uchar code table[]={ //共阴极数码管编码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void display(uchar bai,uchar shi,uchar ge); //显示程序void delay(uint z); //延时程序void init(); //初始化程序void main() //主程序{init();//初始化子程序while(1){if(aa==20) // 每隔1s数码管加一{aa=0;temp++;if(temp==100){temp=0;}bai=temp/100; //将temp分离出来分别显示出来shi=temp%100/10;ge=temp%10;}display(bai,shi,ge);}}void delay(uint z) //延时程序大概1ms{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar bai,uchar shi,uchar ge){dula=1; //这里的段选和位选全P0=table[bai]; //部有P0口输入,所以dula=0; //用两个锁存器来帮助P0=0xff;wela=1;P0=0xfe;wela=0;delay(5);dula=1;P0=table[shi];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(5;dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(5);}void init(){wela=0;dula=0;temp=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void timer0() interrupt 1 //用定时器0来进行定时{TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}。