历史上的今天

今天是:2025年08月11日(星期一)

正在发生

2021年08月11日 | 51单片机——八段数码管

发布者:sdlg668 来源: eefocus关键字:51单片机 手机看文章 扫描二维码
随时随地手机看文章

在对LED灯的应用有了一定的了解之后,我开始学习了一些关于数码管的应用。


在我的开发板上,有独立共阳管和八位共阴管 。数码管从高位到低位的段码依次是h(dp),g,f,e,d,c,b,a共八位。共阴管是“1”表示亮,“0”表示灭,而共阳管则是相反的。顺便提一句,若是要检测数码管是否完好,可以用数码管“8”来检测。


若是要在数码管上显示0~F,则可以用一套固定的十六进制数表示,可以放在数组中,为{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}。这一个数组是用来表示共阴管的亮的,而若是共阳管的时候,需要在前面加上“~”。


独立共阳管显示0-F


自己写的几个延时函数


void DelayUs2X(unsigned char t)//微秒级延时

{

while(t--);

}

void DelayMs(unsigned char t)//毫秒级延时

{

while(t--)

{

DelayUs2X(245);

DelayUs2X(245);

}

}

void DelayS(unsigned char t)//秒级延时

{

while(t--)

{

DelayMs(245);

}

}

段码和位码的用数组存放


unsigned char code Seg_Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 

//段码,显示器现实的数字对应0~15 

unsigned char code Bit_Code[]={0xfe,0xfd,0xfb,0xf7,0xef,0x0df,0xbf,0x7f};

//位码,对应8个数码管

unsigned char code LOVE[]={0x06,0x00,0x38,0x3f,0x3e,0x79,0x00,0x3e};

//                           I         L    O    V    E         U


单个数码管从0——15的显示,因为板子上的单个数码管是共阳极的,所以需要给代码去反


void main()//单个数码管零到16的显示

{

    while(1)

    {

    if(i==16)

{

i=0;

}

P1 =~Seg_Code[i];

i++;

DelayS(5);//相当于1秒的延迟

    }

}


八位数码管一次显示从1到15,每次位选一个数码管 


void show_0_15()//0到15的八位数码管一次显示

{

DataPort = 0;//清除数据,防止重影

for(i=0;i<16;i++,j++)//先送位码,再选段码

{

if(j==8)

{

j=0;

}

DataPort =Bit_Code[j];//送位码确定哪个数码管显示

Bit_Latch = 1;//开门

Bit_Latch = 0;//关门

// Delay();

DataPort = Seg_Code[i];//送段码,确定显示的数字

Seg_Latch = 1;//开门

Seg_Latch = 0;//关门

Delay();

}

}


Display显示函数,用来确认需要从第几码管显示以及显示几位数码管


void DisPlay(unsigned char FirstBit,unsigned char Num)//显示几位数码管以及各自上面的数字

{

unsigned char i;

for(i=0;i {

DataPort =0;

Seg_Latch=1;

Seg_Latch=0;

DataPort=Bit_Code[i+FirstBit];

Bit_Latch=1;

Bit_Latch=0;

DataPort=TempData[i];//显示数据//需要在对应的数码管现实的数字

Seg_Latch=1;//位锁存

Seg_Latch=0;

DelayUs2X(255);

}

}


8位累加器,从0到99999999


void leijiaqi()//累加器8位

{

unsigned long int num=0;

unsigned int j;

while(1)

{

j++;

if(j==24)//延时空跑24圈,num+1;这24圈只是为了跑亮八个灯

{

j=0;

num++;

if(num==10000000)

num=0;

}

TempData[0]=Seg_Code[num/10000000];

TempData[1]=Seg_Code[(num%10000000)/1000000];

TempData[2]=Seg_Code[(num%1000000)/100000];

TempData[3]=Seg_Code[(num%100000)/10000];

TempData[4]=Seg_Code[(num%10000)/1000];

TempData[5]=Seg_Code[(num%1000)/100];

TempData[6]=Seg_Code[(num%100)/10];

TempData[7]=Seg_Code[(num%10)/1];

DisPlay(0,8);

}

}


在八位数码管上动态显示11位的手机号码,将上一位空格共12位


void main()

{

unsigned long int num=0;

unsigned int j;

while(1)

{

j++;

if(j==40)//延时空跑24圈,num+1;这24圈只是为了跑亮八个灯

{

temp%=1000;

temp++;

j=0;

}

//temp%=8;

for(i=0;i<8;i++)

{

TempData[i]=PhoneNumber[(i+temp)%12];

}

DisPlay(0,8);

}

}

关键字:51单片机 引用地址:51单片机——八段数码管

上一篇:8051单片机串口复杂命令接收与解析
下一篇:51单片机心形灯——实现从左到右顺时针流水编程

推荐阅读

上个月美国众议院能源和商务委员会(House Committee on Energy and Commerce)致函苹果公司CEO库克(Tim Cook),询问有关iPhone收集用户数据的具体做法。今天,苹果正式回应了这封信,详细解释了它对隐私保护措施和一些看法。 在这封信中,苹果公司对接联邦政府事务的主管蒂莫西-鲍威尔利(Timothy Powderly )解释说,苹果认为隐私是一项基本...
近日,据外媒报道,美国网约车公司Uber已经向欧洲专利局提交了一项与乘客压力监测相关的专利申请。Uber在申请中提到,未来旗下自动驾驶出租车将配传感器,以监测乘客的焦虑水平,例如在出发前,监测系统会记录下乘客的心跳基线,并在整个行程中检查基线波动情况。据了解,这项新的监测技术会使用到温度、速度、红外摄像头等传感器以及麦克风等车载设备,可...
在国家重点支持“两新一重”(新型基础设施建设,新型城镇化建设,交通、水利等重大工程建设)的背景下,能源行业如何布局,推动我国能源安全新战略的落地? 南方电网公司深入贯彻落实党中央和国务院关于数字中国建设、能源革命、“新基建”、培育数据要素市场等国家重大战略部署,基于我国电网和能源发展趋势,以国家队地位、平台型企业、价值链整合者...
  扁线电机  驱动电机主要由定子组件、转子组件、端盖和辅助标准件组成,而定子绕组中又包括铁芯、铜线绕组、绝缘材料等组成。扁线电机顾名思义就是定子绕组中采用扁铜线,先把绕组做成类似发卡一样的形状,穿进定子槽内,再在另外一端把发卡的端部焊接起来。  众所周知,小型化、高速化将是新能源汽车电机的主要发展趋势。  其中,小型化必然要求...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved