历史上的今天
今天是:2025年01月29日(星期三)
2020年01月29日 | 51单片机+LCD12864的万年历Proteus仿真
2020-01-29 来源:51hei
原理图如下
部分程序如下
单片机源程序如下:
#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);
史海拾趣
|
使用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提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数 ...… 查看全部问答> |
|
希望读写PCI桥芯片上某个GPIO管脚,请问: 1)需要通过0x0cf8,0x0cfc访问寄存器,从而达到控制GPIO管脚吗? 2)中断服务例程ISR怎么写? 能给些建议或意见么?… 查看全部问答> |
|
普福光电科技专业生产LED(T5,T8,T10)日光灯、LED路灯 LED灯泡 LED面板灯 LED射灯 LED轨道灯 LED投光灯 Led灯条, Led工矿灯。公司生产的各种PC日光灯管及面板是传统工艺的创新,填补了国际这一领域的空白,已得国家专利(专利号:200610124321.8/2007 ...… 查看全部问答> |
|
在很多人看来,能在苹果供职或许是一件无比荣耀的事情,因为你倒腾出来的产品被千百万人使用并膜拜,你站在科技浪潮的最前端,不过铁打的营盘流水的兵,任何公司都会有人来,也有人走,那么,那些离开苹果的员工都去哪儿了呢? 通过挖掘商务社交网 ...… 查看全部问答> |
|
公司扩展业务,需要设计一套DSP6000系列的硬件平台,具体可参考TI的DSP6437方案,有相关设计经验的请联系:1603308747@qq.com,具体详细谈。… 查看全部问答> |




