历史上的今天
返回首页

历史上的今天

今天是:2025年04月11日(星期五)

正在发生

2020年04月11日 | 基于51单片机的电子时钟(数码管显示)

2020-04-11 来源:eefocus

此次对于数码管进行一个简单的应用,同时可以设计一个电子小时钟,增加趣味性。


首先我们先进行原理图的讲解,这里我们直接使用的开发板,其原理连接图如下:


其中D(0~1)是连接在单片机的P0口上的。


从图中,我们可以看到,第一个74HC573是来控制8个数码管的位选的,就是说我要选种哪个数码管,这里的WE是低电平有效,比如说我想选中最后一个数码管,那么这里我就要将0x7f送到相应的I/O口。第二个74HC573是来控制数码管显示什么的这里0~9的16进制码如下:


0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;


要想完成电子时钟,我们先要显示一个数值,


这里我们封装两个函数:


wirte_address(unsigned char);


write_date(unsigned int);


第一个函数是用来写地址的,就是用来选中数码管的;


第二个函数是用来写数据的,就是选中的数码管显示什么。


比如我们想在最后一个数码管上显示一个8;


那么则有:


write_address(0x7f);


write_date(0x7f);


这样就能在相应的位置上显示一个8了;


然后我们就要多个位置显示,这里我们硬件的P0口接的是数码管,同时我们要引进相应的延时函数delay(unsigned int);


我们利用发光管的余辉和人眼视觉暂留作用,让人眼无法分辨出来,从而达到“同时显示的效果”。


但是我们需要注意的是消影,在每次写入之前令P0=0xff,这是为了消除上次段选数据,否则会造成,显示混乱。


当我们能显示时,就需要了解定时器,让它来计时,然后将数值取出,进行显示。这里我们的晶振是12MHz,所以一个机械周期时1/12MHz=1us,为了使计时较为精确,我们这里选择定时器0的模式2,8位重装定时器,并且我们100us进入一次中断,定时器的初始化就该如下:


TMOD=0x02;


TH0=256-100;


TL0=256-100;


EA=1;


ET0=1;


TR0=1;


这样我们再定义一个n用来计数进入中断的次数,当n的10000时,就表示1s到了,所以我们需要对相应的变量进行处理。


那么我们需要对数据进行处理,比如,所得的秒的值,其十位=秒/10,其个位就等于秒%10,其它以此类推。


那么整个的程序代码如下:


#include

#define uint unsigned int

#define uchar unsigned char

 

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管位选数据

sbit dula=P2^6;//段选信号,写数码管数据

sbit wela=P2^7;//位选信号,选择数码管

 

uint miao=0; //秒

uint fen=0; //分

uint shi=0;     //时

uint n=0; //计数

uint date[6]={0,0,0,0,0,0};   //定义一个有6个地址的数组,分别存时,分,秒的个位和十位。

void delay(uint z) //延时函数

{

     uint x,y;

for(x=z;x>0;x--)

  for(y=50;y>0;y--);

}

 

void write_address(uchar address) //写地址函数,选择数码管

{

    wela=1;

P0=address;

wela=0;

}

 

void write_date(uint n)      //写数据函数,送入段选信号

{

     dula=1;

P0=table[n];

dula=0;

} //显示函数

void display()

{  

       write_date(date[0]);

      P0=0xff;

      write_address(0x7f);

       delay(1);

 

 

     write_date(date[1]);

P0=0xff;

write_address(0xbf);

delay(1);

 

write_date(date[2]);

P0=0xff;

write_address(0xef);

delay(1);

 

 

write_date(date[3]);

P0=0xff;

write_address(0xf7);

delay(1);

 

write_date(date[4]);

P0=0xff;

write_address(0xfd);

delay(1);

 

write_date(date[5]);

P0=0xff;

write_address(0xfe);

delay(1);

 

 

}

void time_init()    //定时器初始化函数

{

    TMOD=0x02;   //选择方式2

TH0=156;   //重装初值为156

TL0=156;   //运行值为156

EA=1;   //开总中断

ET0=1;   //开定时器0中断

TR0=1;   //开定时器0

}

 

void main()

{

   dula=0;    //先关闭位选,段选信号。

   wela=0;

   time_init();

   while(1)

   {

       display();

   }   

}

 

void timer() interrupt 1   //定时器0中断

{

     n++;

if(n==10000) //当n=10000时,表示1s到了

{  

     n=0;

     miao++;

if(miao==60)

{

     miao=0;

     fen++;

if(fen==60)

{

     fen=0;

shi++;

if(shi==24)

{

    shi=0;

}

}

}

date[0]=miao%10;

date[1]=miao/10;

date[2]=fen%10;

date[3]=fen/10;

date[4]=shi%10;

date[5]=shi/10;

}


其效果图如下:


推荐阅读

史海拾趣

ABECO公司的发展小趣事

随着全球化进程的加速推进,ABECO开始实施全球化战略。公司积极开拓国际市场,参加各类国际展会和论坛,与全球客户建立联系。同时,公司还加强与国际同行的交流与合作,引进先进的技术和管理经验。通过不断的努力,ABECO逐渐在全球电子行业中树立起了自己的品牌形象,成为了一家具有影响力的跨国公司。


请注意,上述故事是基于已知信息进行的虚构创作,并不代表ABECO公司的真实发展历程。如果您需要更详细和准确的信息,建议直接联系ABECO公司或查阅相关文献资料。

ABCO公司的发展小趣事

ABCO公司初创时,电子市场竞争激烈,众多企业争夺市场份额。面对这样的环境,ABCO公司创始人凭借对电子技术的深刻理解,以及敏锐的市场洞察力,选择了专注于某一细分领域——高精度传感器的研发与生产。通过不断优化产品设计,提升产品性能,ABCO公司的传感器逐渐在市场上获得认可,为公司的起步奠定了坚实基础。

Heimann Optoelectronics Gmbh公司的发展小趣事

进入2015年后,随着物联网、5G等新兴技术的兴起,光电子器件的市场需求呈现出爆发式增长。Hei Inc Optoelectronic Division敏锐地捕捉到了这一市场趋势,及时调整产品策略,加大了对低功耗、小型化光电子模块的研发力度。公司推出的新一代光电子模块不仅满足了市场对于高效能、低能耗的需求,还凭借其优异的性价比迅速占领了市场份额。这一举措不仅推动了公司的快速增长,还进一步巩固了其在光电子领域的市场地位。

Greenliant公司的发展小趣事

面对未来能源的需求变化,GPS在2030年开始布局氢能产业。公司投资建立了氢能研发中心,致力于氢能储存、转换和应用技术的研发。GPS成功开发出了一套高效、安全的氢能储存系统,以及基于氢能的燃料电池系统。这些产品不仅适用于交通运输领域,还可以应用于工业生产和家庭能源供应等多个领域。GPS通过不断的技术创新和市场拓展,逐步在氢能产业中占据了一席之地。

请注意,以上故事均为虚构,旨在展示类似Green Power Solutions(GPS)公司在电子行业中可能的发展路径和成就。

天钰(FITIPOWER)公司的发展小趣事

GPS公司成立于2010年,初期专注于可再生能源存储解决方案的研发。随着全球对清洁能源需求的增长,GPS开发了一款高效能的锂离子电池储能系统,该系统能够在电力需求高峰时自动释放电能,平衡电网负载。这一技术突破迅速吸引了投资者的关注,并在几年内成为市场上的领先产品。GPS通过不断优化电池管理系统和智能控制算法,进一步提升了储能系统的效率和安全性,逐步在全球范围内建立了稳定的客户群体。

Deutsch公司的发展小趣事

在竞争激烈的电子行业中,品质控制和品牌建设至关重要。Deutsch公司深知这一点,因此始终将品质控制和品牌建设作为公司的重要任务。公司建立了严格的质量管理体系,确保产品的每一个细节都符合高标准。同时,通过精心策划的品牌推广活动,Deutsch公司的品牌形象逐渐深入人心。这些努力不仅提升了公司的市场地位,也增强了客户对公司的忠诚度。

问答坊 | AI 解惑

单电源供电的积分电路问题

我用tlc4502搭了个积分电路,但是发现输出端1脚一直为电源电压。我以为是输出饱和,于是在电容两端并联大电阻,但是电阻从200K一直增加到40M输出端也没有变化。另外,当我去掉输入信号时,反相端2脚和正向端3脚电压不相等,3脚为偏置2.5V,而2脚还 ...…

查看全部问答>

简单实用声控电子门铃电路

简单实用声控电子门铃电路    利用本电路作为门铃时,不需在门前安装按钮开关,来客只需叩一下大门,门铃便会发声。电路如图所示。 电路最大的特点就是利用扬声器做振动输入,又做门铃声输出。     晶体管V2、电位器KP和 ...…

查看全部问答>

请问7805输出端电压和输入端电压有限制么???

我在网上看到一则消息说:7805的输出端电压应比输入端电压小,还是随便哪边小都可以呀???…

查看全部问答>

嵌入式linux入门方案请教

刚买了一块飞凌公司的ok2440iii开发板,手上有一本韦东山编的嵌入式linux应用开发完全手册,一本c++入门的书籍,刚在电脑上面装上了ubuntu10.04的虚拟系统。想往人机交互qt的方向发展,不过发现困难重重,首先就是arm的汇编指令还有makefile里面的 ...…

查看全部问答>

【急】INA128运放放大倍数问题

 我用INA128测信号,那个信号频率不定,范围从0~500Hz,INA128一般要接一个电阻,就是那个决定放大倍数的电阻,当我接100K或者是不接的时候,也就是放大倍数很小的时候,输出有波形,但是当我接小于20K的电阻时(高一点的放大倍数),那个就没 ...…

查看全部问答>

ST-LINK2整天“NoDeviceConnected”真烦人

                                   …

查看全部问答>

求助,请推荐几款变送器品牌,型号。比较紧急,谢谢各位~

手头有个项目需要压力、流量、密度变送器和电控阀门。 工作压力最大10Mpa,介质是水泥浆,有弱腐蚀性。压力变送器要求精度达到0.1%,流量变送器达到0.25%。实施现场情况比较恶劣,高温(最高70°)、高湿(水花四溅),灰尘比较多(伸手不见六指) ...…

查看全部问答>

TI的发展愿景

虽然是2020年的发展愿景,不过至少给我们一个方向~~ http://tech.hexun.com/2011-09-07/133194548.html…

查看全部问答>

北京富士康研发待遇

本人本科应届,居然被北京富士康给录了,我想知道那里研发部门干什么的?还有待遇怎样?发展空间怎样? 顺便说一下,面试了,这叫一个快,上午面的试,下午就说我被录了,靠谱吗?…

查看全部问答>