历史上的今天
今天是:2025年02月06日(星期四)
2020年02月06日 | DS12887+lcd1602万年历仿真原理图+程序
2020-02-06 来源:51hei
下面是仿真原理图:
51单片机驱动DS12887时钟芯片,采用lcd1602液晶屏来显示万年历
源程序如下:
#include #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit rd=P3^7; sbit s4=P3^3; sbit dsds=P1^7; sbit dsrw=P1^6; sbit dsas=P1^5; sbit dscs=P1^4; sbit dsirq=P3^3; uchar count,shi,fen,miao,s1num,week=0,i,day=1,yue=1,year1=0,year2,year3,year4; uchar code table1[]=" 0000-01-01 MON"; //初始显示 uchar code table2[]=" 00:00:00"; uchar code table3[7][3]={"MON","TUE","WED","THU","FRI","STA","SUN"};//星期的编码 //*****延时函数 void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //****写命令函数 void write_com(uchar com) { rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } //****写入数据函数 void write_data(uchar date) { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } //****初始化函数 void init() { uchar num; // year=year1+year2*10+year3*100+year4*1000; wela=0; dula=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<15;num++) { write_data(table1[num]); delay(20); } write_com(0x80+0x40); for(num=0;num<12;num++) { write_data(table2[num]); delay(20); } /* TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; */ } //*****显示时分秒 void write_sfm(uchar add,uchar date1) { uchar shi,ge; shi=date1/10; ge=date1%10; write_com(add+0x80+0x40); write_data(0x30+shi); write_data(0x30+ge); } //*****显示年月日 void write_sfm1(uchar add,uchar date1) { uchar shi,ge; shi=date1/10; ge=date1%10; write_com(add+0x80); write_data(0x30+shi); write_data(0x30+ge); } void key2(); void key3(); //******键盘扫描函数 void keyscan() { rd=0; if(s1==0)//第一个键被按下 { delay(5); //************去除抖动 if(s1==0) { s1num++; //***第一个键没被按下一次,s1num就加1 while(!s1); if(s1num==1) //当被按下一次时,光标停在秒位上并开始闪烁,始终停止 { TR0=0; write_com(0x80+0x40+11); write_com(0x0f); } if(s1num==2) //被按下第二次,光标停在分位上 { write_com(0x80+0x40+8); } if(s1num==3) //被按下第三次,光标停在时位上 { write_com(0x80+0x40+5); } if(s1num==4) //被按下第四次,光标停在显示星期的位上 { write_com(0x80+15); } if(s1num==5) //被按下第五次,光标停在显示日子的位上 { write_com(0x80+10); } if(s1num==6) //被按下第六次,光标停在显示月的位上 { write_com(0x80+7); } if(s1num==7) //被按下第七次,光标停在显示年的个位上 { write_com(0x80+4); } if(s1num==8) //被按下第八次,光标停在十位上 { write_com(0x80+3); } if(s1num==9) //被按下第九次,光标停在百位上 { write_com(0x80+2); } if(s1num==10) //被按下第十次,光标停在千位上 { write_com(0x80+1); } if(s1num==11) //被按下第十一次,时钟从设置的时刻开始 { s1num=0; write_com(0x0c); TR0=1; } }
史海拾趣
|
要添加新的输入法到内核(不是自带的BSP组件),如何修改注册表? 要添加一个手写输入法到内核去,但是不知道要修改哪里的。我编译好WINCE系统后开机在wince添加注册表是可以用的。 我把注册信息加入platform.reg后编译但是不行。不知道是要修改哪个文件,如何修改。烦请大侠指导,谢谢!!… 查看全部问答> |
|
我用一个网关在测试它的NAT功能 一台PC接WAN口,一台接LAN口 当速率达到一定的程度 就很容易出现WAN口或LAN口瞬间断电,也就是相应的PC机右下角会提示\"网络电缆没有插好\" 请问下这是什么原因所引起的呢… 查看全部问答> |
|
后天去参加他的宣讲会,以后可能回去那里上班了,利尔达主要是搞430和DSP的吧 以后要学习这些了!~ 那个公司大家觉得怎么样?我看网上说的有好有坏!~… 查看全部问答> |
|
今天中午才送到的,明天就要用,现在一个头两个大求各位高人分析下这个设计的算法框图,在此先感谢各位了东西在PDF里是个基于单片机的超声波测距仪的关键程序完全没时间分析了,只能希望有哪位大大帮个忙了再次感谢如可能请邮箱我,我的邮箱appleXP ...… 查看全部问答> |
|
各位好,请问下AM335x EVM的rtc模块是如何供电的,我现在修改了时间,一断电就又会返回到原始的时间,用的linux系统,怀疑是rtc的供电有问题,我的板子跟EVM的类似,不知道各位有没有遇到过,等待您的指导。… 查看全部问答> |
|
【Energia开发环境】MSP430 LAUNCHPAD学习笔记6--角位移传感器 本帖最后由 qinkaiabc 于 2014-1-2 20:25 编辑 【Energia开发环境】MSP430 LAUNCHPAD学习笔记6--角位移传感器-角度测量 材料:· MSP-EXP430G2 553LaunchPad· WDD35D4角位移传感器角度测量原理 WDD35D4 角位移传感器 ...… 查看全部问答> |




