一、设计背景
数码管是一种常见的数字显示设备,它主要由发光二极管(LED)和控制电路组成。LED数码管可以分为共阳(公共阳极)和共阴(公共阴极)两种类型。在共阳数码管中,每个数码管的阳极(P端)都是连接在一起的,而每个数码管的阴极(N端)是独立的。控制电路根据需要将电流引入相应的阴极,使其发亮,从而显示特定的数字或字符。在共阴数码管中,每个数码管的阴极(N端)都是连接在一起的,而每个数码管的阳极(P端)是独立的。控制电路根据需要将电流引入相应的阳极,使其发亮,从而显示特定的数字或字符。
无论是共阳还是共阴数码管,电流通过LED的发光使其显示。每个数码管的数字或字符通过在特定的时序下,点亮不同的LED组合来实现。数码管通常用于显示数字、字母、符号等,广泛应用于计时器、温度计、计数器、电子钟等各种电子设备中。由于其低功耗、可靠性高以及易于控制等特点,数码管在数字显示领域仍然是一种重要的显示技术。本文将使用51单片机芯片,结合14SEG-MP-CA-BULE数码管实现天大两个汉字的滚动显示。
二、实现功能
本设计以51单片机为控制核心,利用14段数码管实现天大两个汉字的滚动显示,可具体实现以下功能:
(1)利用14SEG-MP-CA-BULE数码管实现天大两个汉字的循环滚动显示;
(2)图形滚动速度为每秒变换一次;
(3)滚动顺序为:XXX天-XX天大-X天大X-天大XX-大XXX(X表示不显示);
三、仿真演示
数码管显示XXX天。
数码管显示XX天大。
数码管显示X天大X。
数码管显示天大XX。
数码管显示大XXX。
四、源程序
#include <reg51.h> //51头文件
#define uchar unsigned char //0——255
#define uint unsigned int //0——65535
uchar locCode[4] = {0x08,0x04,0x02,0x01};//位码
uchar disCode[2] = {0x7e,0x7f}; //数码管段码(天,大)
uint smg_c = 0; //定时器计时次数
uchar smg_s = 0; //显示状态变化
void displayTime(void); //刷新显示
void disPlay(uchar dis,uchar loc); //数码管段选及位选
void delay_us(unsigned int t);//毫秒延时
void Timer_Init(void);//定时器0初始化
void Timer_Init(void)
{
TMOD=0x01; //方式一
TH0= (65536-50000)/256;
TL0= (65536-50000)%256; // 50ms
TR0=1; //开启T0
ET0=1; //T0中断允许
EA=1; //总中断开启
}
void T0_INT0(void) interrupt 1
{
smg_c++; //中断次数累加
if(smg_c == 20) //1s时间到
{
smg_c = 0; //中断次数清零
smg_s++; //显示状态改变
if(smg_s == 5)
{
smg_s = 0; //显示状态回到初始状态
}
}
}
void main(void)
{
Timer_Init(); //定时器0初始化
while(1)
{
displayTime(); //刷新显示
}
}
void displayTime(void) //刷新显示函数
{
switch(smg_s)
{
case 0:disPlay(0,0);break; // ** ** ** 天 //
case 1:disPlay(0,1);disPlay(1,0);break; // ** ** 天 大 //
case 2:disPlay(0,2);disPlay(1,1);break; // ** 天 大 ** //
case 3:disPlay(0,3);disPlay(1,2);break; // 天 大 ** ** //
case 4:disPlay(1,3);break; // 大 ** ** ** //
}
}
void disPlay(uchar dis,uchar loc) //数码管段选及位选
{
P1 = locCode[loc]; //位码输出
P0 = disCode[dis]; //段码输出
P2 = 0xC9; //段码输出
delay_us(100); //延时
}
void delay_us(unsigned int t) //毫秒延时
{
while(t--);
}
仿真源文件及程序百度网盘链接:https://pan.baidu.com/s/11V14JkkISQ3hjamJIM2-eA
提取码:6qau