找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3453|回復(fù): 1
收起左側(cè)

51單片機(jī)農(nóng)歷時(shí)鐘Proteus仿真圖與程序 LCD12864顯示

[復(fù)制鏈接]
ID:437064 發(fā)表于 2021-7-30 16:29 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
2021-07-30_16-20-15.jpg 2021-07-30_16-22-13.jpg 2021-07-30_16-23-34.jpg

單片機(jī)源程序如下:
  1. #include <REGX52.H>
  2. #define        uint unsigned int
  3. #define        uchar unsigned char
  4. #include <zm.h>
  5. #include <_12864.H>
  6. #include <nongLi.h>
  7. init_time0(){
  8.         TMOD=0x01;
  9.         EA=ET0=TR0=1;
  10. }
  11. char c=0,sec=0,min=0,hour=12,day=12,mon=6,year=109;
  12. char week;
  13. bit flag,newShow=1;

  14. time0()interrupt 1        //定時(shí)器0中斷
  15. {
  16.         TL0=(65536-5*110592/12)%256;
  17.         TH0=(65536-5*110592/12)/256;
  18.         c++;
  19.         if(c>=20)c=0,flag=1;   //1秒時(shí)間到
  20. }
  21. //
  22. DateAdd(){
  23.         if(flag){                  //如果到1秒則執(zhí)行時(shí)間更新
  24.                 flag=0;        sec++;           //秒
  25.                 if(sec==60){
  26.                         sec=0; min++;  //分
  27.                         newShow=1;                 //每秒刷新一次顯示
  28.                         if(min==60){
  29.                                 min=0;hour++;  //時(shí)
  30.                                 if(hour==24){
  31.                                         hour=0;day++;         //日
  32.                                         if(day>MonArr[LeapYear(year)][mon]){
  33.                                                 day=1; mon++;        //月
  34.                                                 if(mon==13){
  35.                                                         mon=1;year++;        //年
  36.                                                 }
  37.                                         }
  38.                                 }
  39.                         }
  40.                 }
  41.         }
  42. }
  43. #include <key.h>

  44. void main(){
  45.         init_time0();
  46.         Init12864();
  47.         while(1){
  48.                 keyCom();  //按鍵處理
  49.                 DateAdd();         //每秒更新新時(shí)鐘
  50.                 if(newShow){
  51.                         newShow=0;
  52.                         /** 農(nóng)歷顯示 **/
  53.                         getNongLi(year,mon,day);        //獲取農(nóng)歷日期
  54.                         //顯示天干地支,生肖
  55.                         showXY(0,66,15,2,TianGan_Table[(NL.year)%10]);
  56.                         showXY(0,82,15,2,DiZhi_Table[(NL.year)%12]);
  57.                         showXY(0,110,15,2,ShengXiao_Table[(NL.year)%12]);
  58.                         //農(nóng)歷月份
  59.                         if(NL.mon==1)showStr(2,64,"正");
  60.                         else showXY(2,64,15,2,nlMonCode[NL.mon-1]);
  61.                         showStr(2,80,"月");
  62.                         //農(nóng)歷日
  63.                         if(NL.day<11)showStr(2,96,"初");          //十位
  64.                         else if(NL.day<20)showStr(2,96,"十");
  65.                         else if(NL.day<30)showStr(2,96,"廿");
  66.                         else showStr(2,96,"三");
  67.                
  68.                         if(NL.day%10==0)showStr(2,112,"十");  //個(gè)位
  69.                         else  showXY(2,112,15,2,nlMonCode[NL.day%10-1]);
  70.                         
  71.                         /** 公歷顯示 **/
  72.                         showXY(0,0,20,5,zm20x40_Table[day/10]);        //大字
  73.                         showXY(0,20,20,5,zm20x40_Table[day%10]);
  74.                         showStr(2,40,"日");
  75.                         showNum8x16(6,0,(1901+year)/100);        //年
  76.                         showNum8x16(6,16,(1901+year)%100);
  77.                         showStr(6,32,"年");
  78.                         showNum8x16(6,48,mon);showStr(6,64,"月"); //月

  79.                         showStr(5,80,"星期");                           //星期
  80.                         week=getWeek(year,mon,day);
  81.                         if(week==6)showStr(5,112,"日");
  82.                         else showXY(5,112,15,2,nlMonCode[week]);

  83.                         showXY(7,92,5,1,zm5x8_Table[10]);        //冒號(hào)
  84.                         showXY(7,110,5,1,zm5x8_Table[10]);
  85.                           switch(keyCount){                                   //設(shè)置時(shí),反白處理
  86.                                 case 1:notShow(6,2,0,32);break;        //年反白
  87.                                 case 2:notShow(6,2,48,16);break;//月反白
  88.                                 case 3:notShow(0,5,0,40);break;        //日反白                        
  89.                         }
  90.                         rect(0,0,40,60); rect(34,60,35,127); //畫(huà)線條
  91.                 }
  92.                 //時(shí)分秒
  93.                 if(c>15&&keyCount>3){           //設(shè)置時(shí)閃爍處理
  94.                         if(keyCount==4){
  95.                                 showXY(7,81,5,1,zm5x8_Table[11]);//時(shí)
  96.                                 showXY(7,87,5,1,zm5x8_Table[11]);
  97.                         }
  98.                         else if(keyCount==5){
  99.                                 showXY(7,99,5,1,zm5x8_Table[11]);//分
  100.                                 showXY(7,105,5,1,zm5x8_Table[11]);
  101.                         }
  102.                         else if(keyCount==6){
  103.                                 showXY(7,116,5,1,zm5x8_Table[11]);//秒
  104.                                 showXY(7,122,5,1,zm5x8_Table[11]);
  105.                         }
  106.                 }
  107.                 else {                                           //時(shí)分秒正常顯示
  108.                         showNum5x8(7,81,hour);
  109.                         showNum5x8(7,99,min);
  110.                         showNum5x8(7,116,sec);
  111.                 }
  112.         }
  113. }
復(fù)制代碼
51hei.png
Proteus7.5版本的工程文件和程序下載:
農(nóng)歷鐘.zip (36.77 KB, 下載次數(shù): 72)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:102963 發(fā)表于 2021-8-1 12:21 | 顯示全部樓層
農(nóng)歷部分程序有問(wèn)題,2021年7月30日,農(nóng)歷是六月二十一!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表