仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
2021-07-30_16-20-15.jpg (287.55 KB, 下載次數: 69)
下載附件
2021-7-30 16:22 上傳
2021-07-30_16-22-13.jpg (244.49 KB, 下載次數: 67)
下載附件
2021-7-30 16:22 上傳
2021-07-30_16-23-34.jpg (84.04 KB, 下載次數: 71)
下載附件
2021-7-30 16:23 上傳
單片機源程序如下:
- #include <REGX52.H>
- #define uint unsigned int
- #define uchar unsigned char
- #include <zm.h>
- #include <_12864.H>
- #include <nongLi.h>
- init_time0(){
- TMOD=0x01;
- EA=ET0=TR0=1;
- }
- char c=0,sec=0,min=0,hour=12,day=12,mon=6,year=109;
- char week;
- bit flag,newShow=1;
- time0()interrupt 1 //定時器0中斷
- {
- TL0=(65536-5*110592/12)%256;
- TH0=(65536-5*110592/12)/256;
- c++;
- if(c>=20)c=0,flag=1; //1秒時間到
- }
- //
- DateAdd(){
- if(flag){ //如果到1秒則執行時間更新
- flag=0; sec++; //秒
- if(sec==60){
- sec=0; min++; //分
- newShow=1; //每秒刷新一次顯示
- if(min==60){
- min=0;hour++; //時
- if(hour==24){
- hour=0;day++; //日
- if(day>MonArr[LeapYear(year)][mon]){
- day=1; mon++; //月
- if(mon==13){
- mon=1;year++; //年
- }
- }
- }
- }
- }
- }
- }
- #include <key.h>
- void main(){
- init_time0();
- Init12864();
- while(1){
- keyCom(); //按鍵處理
- DateAdd(); //每秒更新新時鐘
- if(newShow){
- newShow=0;
- /** 農歷顯示 **/
- getNongLi(year,mon,day); //獲取農歷日期
- //顯示天干地支,生肖
- showXY(0,66,15,2,TianGan_Table[(NL.year)%10]);
- showXY(0,82,15,2,DiZhi_Table[(NL.year)%12]);
- showXY(0,110,15,2,ShengXiao_Table[(NL.year)%12]);
- //農歷月份
- if(NL.mon==1)showStr(2,64,"正");
- else showXY(2,64,15,2,nlMonCode[NL.mon-1]);
- showStr(2,80,"月");
- //農歷日
- if(NL.day<11)showStr(2,96,"初"); //十位
- else if(NL.day<20)showStr(2,96,"十");
- else if(NL.day<30)showStr(2,96,"廿");
- else showStr(2,96,"三");
-
- if(NL.day%10==0)showStr(2,112,"十"); //個位
- else showXY(2,112,15,2,nlMonCode[NL.day%10-1]);
-
- /** 公歷顯示 **/
- showXY(0,0,20,5,zm20x40_Table[day/10]); //大字
- showXY(0,20,20,5,zm20x40_Table[day%10]);
- showStr(2,40,"日");
- showNum8x16(6,0,(1901+year)/100); //年
- showNum8x16(6,16,(1901+year)%100);
- showStr(6,32,"年");
- showNum8x16(6,48,mon);showStr(6,64,"月"); //月
- showStr(5,80,"星期"); //星期
- week=getWeek(year,mon,day);
- if(week==6)showStr(5,112,"日");
- else showXY(5,112,15,2,nlMonCode[week]);
- showXY(7,92,5,1,zm5x8_Table[10]); //冒號
- showXY(7,110,5,1,zm5x8_Table[10]);
- switch(keyCount){ //設置時,反白處理
- case 1:notShow(6,2,0,32);break; //年反白
- case 2:notShow(6,2,48,16);break;//月反白
- case 3:notShow(0,5,0,40);break; //日反白
- }
- rect(0,0,40,60); rect(34,60,35,127); //畫線條
- }
- //時分秒
- if(c>15&&keyCount>3){ //設置時閃爍處理
- if(keyCount==4){
- showXY(7,81,5,1,zm5x8_Table[11]);//時
- showXY(7,87,5,1,zm5x8_Table[11]);
- }
- else if(keyCount==5){
- showXY(7,99,5,1,zm5x8_Table[11]);//分
- showXY(7,105,5,1,zm5x8_Table[11]);
- }
- else if(keyCount==6){
- showXY(7,116,5,1,zm5x8_Table[11]);//秒
- showXY(7,122,5,1,zm5x8_Table[11]);
- }
- }
- else { //時分秒正常顯示
- showNum5x8(7,81,hour);
- showNum5x8(7,99,min);
- showNum5x8(7,116,sec);
- }
- }
- }
復制代碼
51hei.png (8.65 KB, 下載次數: 72)
下載附件
2021-7-30 20:35 上傳
Proteus7.5版本的工程文件和程序下載:
農歷鐘.zip
(36.77 KB, 下載次數: 72)
2021-7-30 16:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|