历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | 51单片机+LCD12864的万年历Proteus仿真

2020-01-29 来源:51hei

原理图如下

QQ图片20190611101147.png?imageView2/2/w/550

部分程序如下
QQ图片20190611101259.png?imageView2/2/w/550

单片机源程序如下:

#include

#include "DS18B20.h"

#include "DS1302.h"

#include "LCD12864.h"


char a;

sbit KEY1=P3^4;

sbit KEY2=P3^5;

sbit KEY3=P3^6;


bit  flag=1; //进入/退出设置标志

uchar  choose=0x01; //切换标志

void delay10(void) //延时10ms

{

        unsigned char i,j;

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

        for(j=0;j<200;j++);

}

void delay5ms(void)   //误差 0us

{

    unsigned char a,b;

    for(b=19;b>0;b--)

        for(a=130;a>0;a--);

}


//设置时ds1302寄存器值循环 如秒寄存器59时加一变为00

unsigned char conver(unsigned char a,unsigned char b,unsigned char c)

{        


        if((a&0x0f)==0x0a) a=a+6;

          if(a==b)  a=c;

        return a;  

}


void digplay() {


        //时间

                ShowNumber16_32(2,0,TIME[2]>>4&0x03); //时 十位

                ShowNumber16_32(2,16, TIME[2]&0x0f);//时  个位

                 ShowNumber16_32(2,48,TIME[1]>>4&0x07);//分  十位

                ShowNumber16_32(2,64, TIME[1]&0x0f);//分  个位

                ShowNumber16_32(2,96,TIME[0]>>4&0x07);//秒 十位

                ShowNumber16_32(2,112, TIME[0]&0x0f);//秒  个位

                

                

                //日期

                ShowNumber(0,0,2);

                ShowNumber(0,8,0);

    ShowNumber(0,16,TIME[6]>>4&0x0f);

          ShowNumber(0,24, TIME[6]&0x0f);//年

                

          ShowNumber(0,40,TIME[4]>>4&0x01);

          ShowNumber(0,48, TIME[4]&0x0f);//月

                

                ShowNumber(0,64,TIME[3]>>4&0x03);

                ShowNumber(0,72, TIME[3]&0x0f);//日


          ShowChina(0,112,(TIME[5]&0x07)-1);//周

}

void wendu() {

                //温度

                a=Read_Temperature();          //读取DS18B20的温度

                if(a<0)                                          //处理温度正负

                {        

                                a = (-1)*a;         // 取补

                                ShowNumber(6,88,11);          //温度计图标—

                 }

                 else 

                { 

                                         ShowNumber(6,88,12);//温度计图标+

                 }

                        ShowNumber(6,96,a/10%10);  //显示温度中位

           

                ShowNumber(6,104,a%10);           //显示温度低位


}


void digplaystart() {//开机显示

        uchar i=0;

                ShowChina(2,64-16*1.5,19);

                ShowChina(2,64-16*0.5,20);

                ShowChina(2,64+16*0.5,21);

                ShowChina(2,64+16*1.5,22);

        for (i=0;i<10;i++) {

        ShowNumber(4,32+8*i,16);           

                delay5ms();

                delay5ms();

        }

        ClearScreen(0);//清屏

}


void main(void) 

{        

        uchar i;

        InitLCD();          //初始化LCD12864

        digplaystart();

        delay5ms();

        Ds1302Init();//Ds1302初始化,并且附上设定的默认时间

        a=Read_Temperature();          //读取DS18B20的温度

                        ShowNumber(0,32,11);//-

                ShowNumber(0,56,11);//-

                ShowChina(0,96,7);//汉字周

          ShowNumber16_32(2,32,10);//:

                ShowNumber16_32(2,80,10);//:

                ShowChina(6,112,8);//℃

        while(1)

        {

                wendu();//温度显示

                if(flag==1) 

                                Ds1302ReadTime();                

                                        //读取DS1302的时间

                else  

                Ds1302WriteTime();


if(KEY1==0)                                  //按键1--处理设定时间和返回

                {

                        delay10();

                        if(KEY1==1)

                        {

                                delay10();

                                flag=~flag;        

                                

                                if(flag==0) {

                                ShowChina(6,48,9);

                                ShowChina(6,0,16);

                                ShowChina(6,16,17);

                                ShowNumber(6,32,10);

                                }

                                if(flag==1) {

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

                                                        ShowNumber(6,8*i,15);

                                        }

                                }

                        }

                }


                if(KEY2==0)                                  //按键2--处理选择设定时间的项目

                { 

                        delay10();

                        if(KEY2==1)

                        {

                                delay10();

                                choose++;

                                ShowChina(6,48,8+choose);

推荐阅读

史海拾趣

FOSLINK公司的发展小趣事

随着工业4.0时代的到来,FOSLINK公司积极响应智能制造的号召,投入巨资引进先进的自动化生产设备和智能管理系统。通过实施智能制造战略,FOSLINK不仅实现了生产过程的数字化、网络化和智能化,还大幅提升了生产效率和产品质量。这一变革不仅降低了公司的生产成本,还增强了其在全球市场的竞争力。FOSLINK的智能制造实践,为电子行业树立了新的标杆。

Helicomm公司的发展小趣事

FOSLINK公司自成立以来,始终将技术创新视为企业发展的核心驱动力。在早期,公司专注于研发高性能的电子元器件,如混合积体电路(IC)和单石数位积体电路(ASIC)。通过不断的技术积累和优化,FOSLINK成功推出了多款具有行业领先地位的产品,不仅满足了市场对高质量电子元器件的需求,还引领了行业的技术进步。这一系列的创新成果,使FOSLINK在电子行业中逐渐崭露头角,赢得了众多客户的信赖和好评。

ETC1公司的发展小趣事

华铭智能是一家在ETC领域具有深厚技术积累的企业。为了推动ETC行业的发展,华铭智能积极寻求跨界合作的机会。公司与多家汽车制造商、智能交通系统提供商等建立了紧密的合作关系,共同研发和推广ETC技术。通过跨界合作,华铭智能不仅拓展了自身的业务范围,还推动了ETC技术在更多领域的应用。

ECLIPTEK公司的发展小趣事

面对数字化浪潮的冲击,ECLIPTEK公司积极拥抱数字化转型和智能制造。公司引入大数据、云计算和人工智能等先进技术,推动生产过程的智能化和自动化。通过数字化转型和智能制造,ECLIPTEK不仅提高了生产效率和质量,还降低了生产成本和能源消耗。这一转型为公司未来的发展奠定了坚实的基础。

艾为(AWINIC)公司的发展小趣事

2015年7月,艾为电子成功挂牌新三板,迈入了资本市场的新征程。上市以来,艾为电子充分利用资本市场的优势,加快了技术研发和市场拓展的步伐。同时,公司还积极寻求与国内外优秀企业的合作机会,通过引入战略投资者和开展资本运作,为公司的未来发展注入了新的动力。

这五个故事从不同角度展现了艾为电子在电子行业中的发展历程和成就,体现了公司不断追求卓越、创新发展的精神风貌。随着科技的不断进步和市场的不断变化,相信艾为电子将继续保持其竞争优势,为电子行业的发展贡献更多力量。

ETTINGER公司的发展小趣事

作为英国翘楚皮具品牌,Ettinger有幸获得了H.R.H威尔士王的皇家保证。这一荣誉不仅是对Ettinger产品质量的认可,也为品牌的发展带来了更多的机遇。随着品牌知名度的提升,Ettinger逐渐成为了英国人最喜爱的皮具品牌之一,并在全球范围内拥有了广泛的粉丝群。

问答坊 | AI 解惑

使用MDK与ULINK烧写ADS产生的elf文件

使用RealView MDK配合ULINK来仿真和烧写STR71X系列的芯片都是很方便的,但是如果把在ADS下的编译的结果烧写到STR71X则有点麻烦,需要使用专用的工具。 经过本人的实验发现在KEIL下使用ULINK同样也可以下载ADS产生的编译结果,具体方法如下: 1, ...…

查看全部问答>

创业团队诚招研发人才(上海),待遇从优

嵌入式软件工程师2人 1、3年以上软件开发经验,熟练掌握C、C++开发,两年以上Linux平台编程的开发经验,熟悉嵌入式系统的硬件构成, 2、具备驱动程序或图像处理技术或音视频压缩和音视频编解码技术或加密、解密算法等技能者优先。 3 、具备驱动层 ...…

查看全部问答>

请问 引脚寄存器 是什么? ?

volatile S3C2440A_IOPORT_REG *p2440a_ioport_reg = NULL;  /*IO寄存器对应的虚拟地址指针*/ volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数 ...…

查看全部问答>

高分求创意

ht46f49e 盛群半导体继HT46F47E之后,再增添A/D型Flash MCU - HT46F46E、HT46F48E、HT46F49E,全系列符合工业上-40℃ ~ 85℃工作温度与高抗噪声之性能要求,快闪程序内存(Flash Program ROM)可重复10万次之读/写,数据存储器EEPROM可重复100万次 ...…

查看全部问答>

关于PCI过滤驱动程序

希望读写PCI桥芯片上某个GPIO管脚,请问: 1)需要通过0x0cf8,0x0cfc访问寄存器,从而达到控制GPIO管脚吗? 2)中断服务例程ISR怎么写? 能给些建议或意见么?…

查看全部问答>

专业生成各类型led节能灯、PC管 厂家直销

普福光电科技专业生产LED(T5,T8,T10)日光灯、LED路灯 LED灯泡 LED面板灯 LED射灯 LED轨道灯 LED投光灯 Led灯条, Led工矿灯。公司生产的各种PC日光灯管及面板是传统工艺的创新,填补了国际这一领域的空白,已得国家专利(专利号:200610124321.8/2007 ...…

查看全部问答>

苹果员工跳槽都去了哪儿

在很多人看来,能在苹果供职或许是一件无比荣耀的事情,因为你倒腾出来的产品被千百万人使用并膜拜,你站在科技浪潮的最前端,不过铁打的营盘流水的兵,任何公司都会有人来,也有人走,那么,那些离开苹果的员工都去哪儿了呢? 通过挖掘商务社交网 ...…

查看全部问答>

请问输入输出阻抗如何计算?

看了很多关于输入输出阻抗匹配的资料,还是不清楚输入输出阻抗怎么计算?以上两个图如果是在输入/输出情况下,输入输出阻抗究竟如何计算?…

查看全部问答>

有懂DSP c6000系列的硬件设计的吗

公司扩展业务,需要设计一套DSP6000系列的硬件平台,具体可参考TI的DSP6437方案,有相关设计经验的请联系:1603308747@qq.com,具体详细谈。…

查看全部问答>