历史上的今天
返回首页

历史上的今天

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

正在发生

2019年12月16日 | 自己制作的单片机万年历 程序+原理图

2019-12-16 来源:51hei

单片机万年历仿真原理图如下 

仿真

Altium Designer画的万年历原理图和PCB图如下:

PCB

原理图

原理图

基于51单片机,可以完成时钟显示、公历显示、农历显示、温度显示、闹钟报警定时的LCD时钟

PPT内容预览:
0.png?imageView2/2/w/550

   本设计使用AT89C51来做主控芯片,其强大的功能足够实现我们设计的所有功能。
   使用LCD1602的液晶显示器来进行显示。
   使用Keil uVision5进行编程。
   通过Proteus8.6来进行仿真。

0.png?imageView2/2/w/550

0.png?imageView2/2/w/550 

点击一次K1进入时钟设置页面,通过点击K2切换时、秒、分、星期、年、月、日,通过K3与K4实现加减来完成时钟的设置

0.png?imageView2/2/w/550 

点击两次K1进入闹钟设置页面,通过点击K2切换开关、时、秒、分,通过K3与K4实现加减完成闹钟的设置。
0.png?imageView2/2/w/550

单片机源程序如下注释是很全的

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

#include "eeprom52.h"

#include "nongli.h"

#include "intrins.h"


bit flag_200ms ;

bit flag_100ms ;

sbit beep = P3^7;          //蜂鸣器定义

bit flag_beep_en;

uint clock_value;     //用作闹钟用的


sbit dq   = P3^1;          //18b20 IO口的定义



uint temperature ;    //温度变量

uchar flag_nl;        //农历 阳历显示标志位



uchar menu_1,menu_2;




uchar key_time,flag_value;      //用做连加的中间变量

bit key_500ms  ;

uchar n_nian,n_yue,n_ri;                //农历显示的函数




#include "ds1302.h"

#include "lcd1602.h"




/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

        SectorErase(0x2000);

        byte_write(0x2000, fen1);

        byte_write(0x2001, shi1);

        byte_write(0x2002, open1);

        byte_write(0x2058, a_a);        

}


/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

        fen1  = byte_read(0x2000);

        shi1  = byte_read(0x2001);

        open1  = byte_read(0x2002);

        a_a      = byte_read(0x2058);

}


/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

        read_eeprom();                //先读

        if(a_a != 1)                //新的单片机初始单片机内问eeprom

        {

                fen1  = 3;

                shi1  = 8;

                open1  = 1;

                a_a = 1;

                write_eeprom();           //保存数据

        }        

}


/***********************18b20初始化函数*****************************/

void init_18b20()

{

        bit q;

        dq = 1;                                //把总线拿高

        delay_uint(1);            //15us

        dq = 0;                                //给复位脉冲

        delay_uint(80);                //750us

        dq = 1;                                //把总线拿高 等待

        delay_uint(10);                //110us

        q = dq;                                //读取18b20初始化信号

        delay_uint(20);                //200us

        dq = 1;                                //把总线拿高 释放总线

}


/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

        uchar i;

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

        {                                         //写数据是低位开始

                dq = 0;                         //把总线拿低写时间隙开始 

                dq = dat & 0x01; //向18b20总线写数据了

                delay_uint(5);         // 60us

                dq = 1;                         //释放总线

                dat >>= 1;

        }        

}


/*************读取18b20内的数据***************/

uchar read_18b20()

{

        uchar i,value;

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

        {

                dq = 0;                         //把总线拿低读时间隙开始 

                value >>= 1;         //读数据是低位开始

                dq = 1;                         //释放总线

                if(dq == 1)                 //开始读写数据 

                        value |= 0x80;

                delay_uint(5);         //60us        读一个时间隙最少要保持60us的时间

        }

        return value;                 //返回数据

}


/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

        uint value;

        uchar low;                           //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

        init_18b20();                   //初始化18b20

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0x44);           //启动一次温度转换命令

        delay_uint(50);                   //500us


        init_18b20();                   //初始化18b20

        

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0xbe);           //发出读取暂存器命令

        

        EA = 0;

        low = read_18b20();           //读温度低字节

        value = read_18b20();  //读温度高字节

        EA = 1;

        value <<= 8;                   //把温度的高位左移8位

        value |= low;                   //把读出的温度低位放到value的低八位中

        value *= 0.625;               //转换到温度值 小数

        return value;                   //返回读出的温度 带小数

}




/******************1ms 延时函数*******************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}


/******************写星期函数*******************/

void write_week(uchar hang,uchar add,uchar week)//写星期函数

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);          

        switch(week)

        {

                case 1:write_data('M');//星期数为1时,显示

                           write_data('O');

                           write_data('N');

                           break;

           

                case 2:write_data('T');//星期数据为2时显示

                           write_data('U');

                           write_data('E');

                           break;

                

                case 3:write_data('W');//星期数据为3时显示

                           write_data('E');

                           write_data('D');

推荐阅读

史海拾趣

HANBIT Electronics公司的发展小趣事

Hamamatsu(滨松光子学株式会社)在电子行业中的发展故事丰富多样,以下是根据公开信息整理的五个相关故事,每个故事均力求准确描述事实:

1. 光电倍增管的创新与突破

Hamamatsu在光电倍增管(PMT)领域取得了显著成就。光电倍增管作为宇宙线观测、中微子实验等高精度探测中的关键器件,其性能和技术要求极高。Hamamatsu抓住市场需求,与东京大学高能物理实验室等科研机构合作,成功研制出大面积探测用光电倍增管,并在多个国际中微子探测实验中得到应用。这一创新不仅推动了Hamamatsu自身的发展,也巩固了其在光电倍增管市场的领先地位。

2. 光电二极管的多样化应用

Hamamatsu的光电二极管产品线广泛,包括硅PIN光电二极管、InGaAs PIN光电二极管等多种类型,广泛应用于医疗生物、高能物理、宇宙探测、精密分析等多个领域。这些产品的多样化应用不仅展示了Hamamatsu在光电技术领域的深厚积累,也为其在全球市场的拓展提供了有力支撑。

3. 光电技术的国际合作与交流

Hamamatsu积极参与国际光电技术的交流与合作,通过举办大型展会、参与国际学术会议等方式,展示其最新的光电技术和产品。例如,Hamamatsu举办的PHOTON FAIR展会,吸引了来自全球的客户和合作伙伴,促进了光电技术的国际交流与合作。这种开放合作的态度,有助于Hamamatsu不断吸收国际先进技术,推动自身技术的持续进步。

4. 应对市场变化的灵活策略

面对电子行业的快速变化,Hamamatsu展现出了高度的市场敏感性和灵活性。当市场需求发生变化时,Hamamatsu能够迅速调整产品结构和研发方向,以满足新的市场需求。例如,在消费电子市场兴起时,Hamamatsu也积极涉足相关领域,推出了一系列适用于消费电子产品的光电传感器件。这种灵活的市场策略,使得Hamamatsu能够在激烈的市场竞争中保持领先地位。

5. 人才培养与团队建设

Hamamatsu深知人才是企业发展的根本动力,因此高度重视人才培养和团队建设。公司建立了完善的人才培养体系,通过内部培训、外部交流等多种方式,不断提升员工的专业技能和综合素质。同时,Hamamatsu还注重团队建设和企业文化建设,营造了一个积极向上、团结协作的工作氛围。这种良好的人才环境和企业文化,为Hamamatsu的持续发展提供了有力保障。

以上五个故事展示了Hamamatsu在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、国际合作、灵活应变以及人才培养等方面的综合实力。

Abracon公司的发展小趣事

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

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

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

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

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

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

静芯微电子(ElecSuper)公司的发展小趣事

静芯微电子在发展过程中,持续投入研发资源,不断推动技术创新。公司成功研发出芯片级TVS器件,并在国内首次开发成功在人体模型(HBM)下抗静电强度高于30KV的关键技术和器件。这一技术突破不仅提升了产品的性能,还进一步巩固了静芯微电子在ESD/TVS领域的领先地位。同时,公司还积极申请和积累专利,目前已拥有多项发明专利、实用新型专利和集成电路布图登记等知识产权成果。

Elekon Industries公司的发展小趣事

随着业务的不断发展,Elekon开始寻求更广阔的市场空间。公司制定了全球化战略,积极开拓国际市场。通过参加国际展会、建立海外销售网络等方式,Elekon成功将产品打入国际市场,并赢得了众多客户的青睐。同时,Elekon还与国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。

Hitachi Chemical Co America Ltd公司的发展小趣事

随着业务的不断发展,Elekon开始寻求更广阔的市场空间。公司制定了全球化战略,积极开拓国际市场。通过参加国际展会、建立海外销售网络等方式,Elekon成功将产品打入国际市场,并赢得了众多客户的青睐。同时,Elekon还与国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。

Capar Components Corp公司的发展小趣事

作为一家有社会责任感的企业,Capar Components Corp积极参与公益事业,回馈社会。公司定期组织员工参与社区服务活动,帮助困难群体解决实际问题。此外,公司还设立了奖学金和助学金,支持教育事业的发展。这些举措不仅彰显了公司的社会责任感,也为公司树立了良好的企业形象。


这些故事是基于一个虚构的电子行业公司背景编写的,您可以根据Capar Components Corp的实际情况进行调整和修改,以使其更符合该公司的历史和发展轨迹。请注意,由于我无法获取Capar Components Corp的具体信息,这些故事仅为示例性质,并非真实事件。

问答坊 | AI 解惑

C语言返回语句

如流程图所示,在程序中要写返回到开始程序的语句,但是我不会用C语言写,请求帮助! 另外,那个定时功能用C语言该怎么写啊? 谁有类似的程序啊?…

查看全部问答>

请问谁用过wince的kernel profiler,能给我些资料吗?

我发现除了msdn外,几乎没什么资料,谁有些资料能共享下啊? 或者msdn上的好文章给我点连接也行。…

查看全部问答>

EVC里面有否办法调整窗口的z次序分配规则

   WinCE里面做Win32应用程序,十分郁闷的就是其控件Z次序分配与VS里面完全相反,VS里面后创建的控件在前,但是在CE里面却是先创建的控件在前,造成很多不便,比如说要声明一个Group Button,再以这个Group Button作为父窗口在里面再创建 ...…

查看全部问答>

朋友们进来接分喽

我在深圳搞嵌入式开发,近来有创业的念头。 问问大家订什么报纸比较适合我看,好了解一下现在市场的大背景。 培训嵌入式的机构有教驱动开发吗?深圳有哪些有名的培训机构啊? 进来的朋友都有分的,哈哈! …

查看全部问答>

做一个登陆界面出现的问题

做一个登陆界面,输入一个四位的密码,若密码错误,就弹出错误消息 类 class CPASSWORDDlg : public CDialog {} 然后函数 BOOL CPASSWORDApp::InitInstance() {         CPASSWORDDlg dlg;         ...…

查看全部问答>

如何掌握好焊接技术

焊接实质上是将元器件高质量连接起来最容易实现的方法,因此,焊接技术是相当需要具备的。    一、 工具:    首先告诉大家的是焊接常用的工具和材料:电烙铁、焊料、助焊剂、钢丝钳、万用表等都是必备的工具 电烙铁、焊锡丝、松香   1 ...…

查看全部问答>

MSP430F6638IO端口中断问题,求解决。。

描述:MSP430F6638IO端口中断时,它的IO端口捕捉中断时是捕捉的上升沿还是下降沿?我知道能在PXIES中设置,相应的位为0时是上升沿,为1时是下降沿中断,但是如果初始化时不设置的话也就是默认的话是上升沿还是下降沿捕捉中断呢?手册上是说PXIES复 ...…

查看全部问答>

【Nucleo+BLUENRG心得】+解决无法连接出错!

【Nucleo+BLUENRG心得】+无意连接出错! 昨天再试BLUENRG时,居然出现以下错误! 而设备管理器中,ST-LINK还是正常的! 找找ST有没有配套擦除工具:STM32 ST-LINK Utility 擦除时要按着B1,然后才可以擦除。 …

查看全部问答>

#8月改装#给天猫1代盒子换个遥控器

    天猫盒子,还是那时候0.01元抢购的,相信当时有不少坛友也抢到了。盒子用了这么久,还不错。期间优酷什么的被禁了,但是上有政策下有对策。装了泰捷视频,继续满血复活。闲话不说了,拉回主题。这个盒子有个主要的问题,就是遥控器。 ...…

查看全部问答>