历史上的今天
返回首页

历史上的今天

今天是:2024年12月23日(星期一)

正在发生

2020年12月23日 | 基于STC89C51的时钟电路PCB程序 DS1302+LCD1602

2020-12-23 来源:51hei

制作出来的实物图如下:
 

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
 

单片机源程序如下:

/*******************************************************************************

* 实验名                           : 万年历实验

* 使用的IO             :

* 实验效果       :1602显示时钟,按K3进入时钟设置,按K1选择设置的时分秒日月,按K2选择

*选择设置加1。

*        注意                                         :

*******************************************************************************/


#include

#include"lcd.h"

#include"ds1302.h"


sbit K1=P2^0;

sbit K2=P2^1;

sbit K3=P2^2;

sbit K4=P2^3;


void Int0Configuration();

void LcdDisplay();

unsigned char SetState,SetPlace;

void Delay10ms(void);   //误差 0us

void Timer0Init();

void key_proy();

/*******************************************************************************

* 函数名         : main

* 函数功能                   : 主函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/


void main()

{

        

        LcdInit();

        Ds1302Init();

        Timer0Init();  //定时器0初始化

        while(1)

        {        

                if(SetState==0)

                {

                        Ds1302ReadTime();

                }

                else

                {

                  key_proy();

                }

                LcdDisplay();        

        }

        

}


void key_proy()

{

            unsigned char i;

                        if(K1==0)                //检测按键K1是否按下

                        {

                                Delay10ms();        //消除抖动

                                if(K1==0)

                                {

                                        SetPlace++;

                                        if(SetPlace>=7)

                                                SetPlace=0;                                       

                                }


                                while((i<50)&&(K1==0))         //检测按键是否松开

                                {

                                        Delay10ms();

                                        i++;

                                }

                                i=0;

                        }

                        if(K2==0)                //检测按键K2是否按下

                        {

                                Delay10ms();        //消除抖动

                                if(K2==0)

                                {

                                        TIME[SetPlace]++;

                                        if((TIME[SetPlace]&0x0f)>9)                                         //换成BCD码。

                                        {

                                                TIME[SetPlace]=TIME[SetPlace]+6;

                                        }

                                        if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //分秒只能到59

                                        {

                                                TIME[SetPlace]=0;

                                        }

                                        if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //小时只能到23

                                        {

                                                TIME[SetPlace]=0;

                                        }

                                        if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //日只能到31

                                        {

                                                TIME[SetPlace]=0;        

                                        }

                                        if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //月只能到12

                                        {

                                                TIME[SetPlace]=0;

                                        }        

                                        if((TIME[SetPlace]>=0x7)&&(SetPlace==5))                //周只能到7

                                        {

                                                TIME[SetPlace]=1;

                                        }                 

推荐阅读

史海拾趣

Geyer Electronic E K公司的发展小趣事

Geyer Electronic E.K.公司的发展故事

故事一:创立与初步发展

Geyer Electronic E.K.公司由Rudolf Geyer于1964年创立,最初是一家位于慕尼黑莱姆区的电子产品零售店。在那个年代,电子产品行业正处于快速发展阶段,Geyer凭借其敏锐的市场洞察力和对技术的热情,逐渐在市场中站稳了脚跟。起初,店铺销售各类电子产品,从简单的收音机到复杂的电子设备,一应俱全。随着时间的推移,Geyer Electronic凭借其优质的服务和丰富的产品线,逐渐赢得了当地消费者的信任和支持。

故事二:转型与专业化

1992年,Geyer Electronic经历了一次重要的转折点。在Jürgen Reichmann的领导下,公司被收购并进行了战略调整,正式转型为一家专门从事频率产品和特殊电池的公司。这一转型标志着Geyer Electronic开始专注于某一特定领域,并致力于在该领域成为行业的领导者。公司投入大量资源进行技术研发和产品创新,不断推出符合市场需求的高质量频率产品和特殊电池,逐渐在行业内树立了良好的口碑。

故事三:全球化布局

随着业务的不断扩展,Geyer Electronic开始将目光投向全球市场。公司不仅在欧洲建立了稳固的市场地位,还逐渐将业务拓展到亚洲和美国等其他地区。为了实现全球化战略,Geyer Electronic加强了与全球合作伙伴的合作与交流,共同推动频率产品和特殊电池技术的创新与发展。同时,公司还建立了完善的全球销售网络,确保产品能够在短时间内送达全球各地的客户手中。

故事四:认证与品质保证

为了进一步提升产品质量和客户满意度,Geyer Electronic积极寻求国际认证。公司通过了DIN ISO 9001:2015等国际质量管理体系认证,这标志着Geyer Electronic在质量管理方面已经达到了国际先进水平。通过严格的质量控制和持续的技术创新,Geyer Electronic不断推出高品质的频率产品和特殊电池,赢得了全球客户的广泛认可和信赖。

故事五:搬迁与未来发展

为了满足未来发展的需要,Geyer Electronic于2022年搬到了位于Planegg的新公司所在地。这次搬迁不仅为公司提供了更加宽敞和现代化的办公和生产环境,还为公司未来的发展奠定了坚实的基础。在新的起点上,Geyer Electronic将继续秉承“质量第一、客户至上”的经营理念,不断推动技术创新和产品升级,为全球客户提供更加优质、高效的服务和解决方案。同时,公司还将积极探索新的市场领域和发展机遇,努力成为全球电子行业中的佼佼者。

Abracon公司的发展小趣事

Abracon是一家全球领先的电子元器件制造商,提供高性能、高质量的频率和时间解决方案。以下是该公司发展的五个相关故事:

  1. 公司成立和早期发展: Abracon成立于1992年,总部位于美国德克萨斯州奥斯汀。公司最初专注于石英晶体和石英晶体振荡器的生产,为电子行业提供频率控制器件。在早期发展阶段,Abracon注重产品质量和技术创新,赢得了客户的信任和支持。

  2. 产品多样化和市场拓展: 随着市场需求的变化和技术进步,Abracon逐渐扩展了产品线,涵盖了晶振、振荡器、射频滤波器、电感器、磁性元件等多个品类。公司的产品被广泛应用于通信、计算机、消费电子、汽车电子等各种领域,拓展了市场份额。

  3. 全球化战略和国际扩张: Abracon通过建立全球销售和分销网络,加强了在国际市场的影响力。公司在美国、亚洲、欧洲等地设立了办事处和生产基地,为客户提供更便捷的服务和支持。Abracon还与全球各地的合作伙伴建立了紧密的合作关系,共同推动产品销售和技术支持。

  4. 持续创新和研发投入: Abracon不断投入研发,并致力于技术创新和产品升级。公司与学术机构和行业领先企业合作,共同开发新产品和解决方案,满足客户不断变化的需求。Abracon还积极参与行业标准制定和技术规范的制定,为行业发展贡献力量。

  5. 未来展望和发展方向: Abracon将继续致力于提供高性能、高可靠性的电子元器件,满足客户在频率和时间解决方案方面的需求。公司将加强在新兴领域的研发投入,如物联网(IoT)、5G通信、汽车电子等,推动技术创新和产品应用,为客户提供更多元化的解决方案。同时,Abracon还将继续拓展国际市场,加强与客户和合作伙伴的合作,实现共同发展。

DURATOOL公司的发展小趣事

在电子行业,产品质量是企业生存和发展的基石。DURATOOL公司深知这一点,因此一直将品质管理作为企业发展的核心。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、包装等各个环节都进行严格把关。此外,DURATOOL公司还积极引入国际先进的质量管理理念和方法,不断提升产品质量水平。这些努力使得DURATOOL公司的产品在市场上享有良好的口碑和信誉,赢得了广大用户的信任和支持。

D1 International Inc公司的发展小趣事

作为一家有社会责任感的企业,D1 International Inc公司始终关注环境保护和可持续发展。公司在生产过程中采取环保措施,减少废弃物排放,同时积极推广绿色电子产品。此外,D1 International Inc公司还积极参与社会公益活动,回馈社会,为构建和谐社会贡献自己的力量。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx的前身是B&B Electronics,一个在1981年成立的公司,起初主要为无线和有线网络提供设备连接解决方案。随着技术的快速发展,物联网和M2M连接的需求日益增长,B&B Electronics意识到必须进行创新以应对市场的变化。于是,公司开始致力于开发“边缘智能”技术,使网络连接设备更加智能、自主和响应迅速。这一创新转型使得公司在物联网行业中崭露头角,并在2015年决定将公司名称更改为B+B SmartWorx,以更好地反映其业务重心和技术方向。

Analogix Semiconductor公司的发展小趣事

B+B SmartWorx的前身是B&B Electronics,一个在1981年成立的公司,起初主要为无线和有线网络提供设备连接解决方案。随着技术的快速发展,物联网和M2M连接的需求日益增长,B&B Electronics意识到必须进行创新以应对市场的变化。于是,公司开始致力于开发“边缘智能”技术,使网络连接设备更加智能、自主和响应迅速。这一创新转型使得公司在物联网行业中崭露头角,并在2015年决定将公司名称更改为B+B SmartWorx,以更好地反映其业务重心和技术方向。

问答坊 | AI 解惑

for(;i!=0;i--)和while(i--)之间有区别吗??

我今天用软件的方法来延时,延时程序如下:(只看有颜色的部分就可以了) #include void delay(int i) {         int j,k;                 for(j=0;j…

查看全部问答>

从nandflash拷贝kernel需要40s

我的开发板是bios引导wince系统,系统编译后nk.nb0大概35M左右,调试发现从nandflash拷贝系统到SDRAM需要40S时间啊,实在太慢、、把拷贝代码贴出来,还请大侠指点: static void LoadRunWince(void) {         U32 i, ram_a ...…

查看全部问答>

怪异的本本不认usb鼠标问题

IBM R51e机器(winXP),在电脑城试用一无线鼠后,回家后发现所有usb鼠标均不能使用,但其它u盘、移动硬盘之类的都能用,小红点也可用。 1。查设备管理器,在“人体学输入设备”中有“usb人体学输入设备”和“hid_compliant device”两项; 2。卸 ...…

查看全部问答>

如何用VHDL设计一个延时器

输入是一些随机产生的信号,要求所有的这些输入信号在延时100个时钟周期后循序输出。请问这个该如何设计?输入信号的顺序已经给定!!!!!!!!!!!    …

查看全部问答>

请教一个关于KEILC的问题

                                     用KEIL C编译器的时候,屏蔽了一些函数编译不过,这是为什么呢 ,是不是哪里可 ...…

查看全部问答>

ARP响应问题

我现在用的是LM3S8962的板子,把板子和一台计算机用网线直接连接,可以实现两者之间的ARP请求和响应,但是把板子用网线通过交换机和另外一台计算机相连,进行ARP请求和相应操作,出现的问题是:板子只能收到交换机下来的广播包,但是发送出去的响应 ...…

查看全部问答>

FPGA应用三个层面

FPGA应用可分为三个层面:电路设计、产品设计、系统设计1.系统级应用   系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统如用XilinxV-4, V-5系列的FPGA,实现内嵌POWERPCCPU, 然后再配合各种外围功能,实现一个基本环境 ...…

查看全部问答>

你喜欢玩玩具火车么?MSP430扳道

这显然不是一个高大上的制作,MSP430加一个舵机,火车每过一圈就扳一次道。 用到的东西只有定时器和IO口了。 我想告诉大家的是这个设计使用了Energia开发,整个实现使用了10分钟。 想到然后快速的实现,享受了开发和实现的双重乐趣。 …

查看全部问答>

如何在lcd1602上面显示一个不确定的值

比如测量一个电容的数字,在lcd1602上面显示,但是电容的值不确定,这个程序该怎么写…

查看全部问答>