[PIC®/AVR®/dsPIC®产品] pic单片机做的万年历

[复制链接]
 楼主| lzmm 发表于 2023-5-28 10:00 | 显示全部楼层 |阅读模式
  1. #include <pic.h>
  2. #include "ziku.h"
  3. #include "lcd_init.h"
  4. #include "ds1302.h"
  5. #include "ds18b20.h"
  6. #include "keyscan.h"
  7. #include "yinli.h"
  8. uch jj,ii;
  9. //子程序
  10. //LCD显示空白边框子程序
  11. void LCDShowTable()
  12. {
  13.         uch i;
  14.         SlectScreen(1);     //写左半屏
  15.         SetLine(0);         //起使页
  16.         SetColumn(0);       //起使列
  17.         for(i=0;i<64;i++)
  18.         {
  19.                 if((i==0)||(i==63))WriteData(0xff);//第1、63列竖线
  20.                 else WriteData(0x01);              //最上面一行线
  21.         }
  22.         for(i=1;i<7;i++)
  23.         {
  24.                 SetLine(i);
  25.                 SetColumn(0);
  26.                 WriteData(0xff); //竖线
  27.                 SetColumn(63);
  28.                 WriteData(0xff); //竖线        
  29.         }
  30.         SetLine(7);
  31.         SetColumn(0);
  32.         for(i=0;i<64;i++)
  33.         {
  34.                 if((i==0)||(i==63))WriteData(0xff);
  35.                 else WriteData(0x80);             //最下面的横线
  36.         }
  37.         
  38.         SlectScreen(2);//写右半屏
  39.         SetLine(0);
  40.         SetColumn(0);
  41.         for(i=0;i<64;i++)
  42.         {
  43.                 if(i==63)WriteData(0xff);
  44.                 else WriteData(0x01);
  45.         }
  46.         SetLine(4);
  47.         SetColumn(0);
  48.         for(i=0;i<64;i++)
  49.         {
  50.                 if(i==63)WriteData(0xff);
  51.                 else WriteData(0x01);
  52.         }
  53.         for(i=1;i<7;i++)
  54.         {
  55.                 SetLine(i);
  56.                 SetColumn(63);
  57.                 WriteData(0xff);        
  58.         }
  59.         SetLine(7);
  60.         SetColumn(0);
  61.         for(i=0;i<64;i++)
  62.         {
  63.                 if(i==63)WriteData(0xff);
  64.                 else WriteData(0x80);
  65.         }        
  66. }
  67. /*----------------------------------------------------------*/

  68. //显示固定字符子程序
  69. void LCDShowGudingWord()
  70. {
  71.         Show8X16(0,80,maohao,1);
  72.         Show8X16(0,104,maohao,1);
  73.         
  74.         Show16X16(6,80,yue,2);
  75.         Show16X16(0,40,nian,1);
  76.         Show16X16(4,2,yue,0);
  77.         Show16X16(6,8,xing,2);
  78.         Show16X16(6,24,qi,2);
  79.         Show16X16(2,96,danwei1,0);
  80.         Show8X16(0,8,s2,1);
  81.         Show8X16(0,16,s0,1);
  82. }
  83. /*----------------------------------------------------------*/

  84. void TMR0init()
  85. {
  86.         T0CS=0;
  87.         PSA=0;
  88.         PS2=1;
  89.         PS1=1;
  90.         PS0=1;
  91.         TMR0=0x80;
  92.         T0IE=1;
  93.         T0IF=0;
  94. }
  95. //冒号闪烁子程序
  96. void FlashMaohao()
  97. {
  98.         static uch timecount1;
  99.         static int timecount2;
  100.         
  101.         if(TMR0IF==1)
  102.         {
  103.                 TMR0=0x80;
  104.                 TMR0IF=0;
  105.                 timecount1++;
  106.                 timecount2++;
  107.                 if(timecount1==10)
  108.                 {
  109.                         flag++;
  110.                     flag=flag%2;    //闪烁标志在0-1间翻转
  111.                     timecount1=0;
  112.                 }
  113.                 if(timecount2==1200)//1分钟采样一次温度
  114.                 {
  115.                         timecount2=0;
  116.                         get_temp();   //温度转换子程序
  117.                 }
  118.         }
  119.         if(flag==0)
  120.         {
  121.                 Show8X16(0,80,maohao,1);
  122.                 Show8X16(0,104,maohao,1);
  123.         }
  124.         if(flag==1)
  125.         {
  126.                 Show8X16(0,80,noshu,1);//清除
  127.                 Show8X16(0,104,noshu,1);
  128.         }
  129. }

  130. void Naoling()
  131. {
  132.         
  133.         if(kk==1)
  134.         {
  135.                 if(RD3==0)
  136.                 {
  137.                         jj++;
  138.                         jj=jj%4;
  139.                         while(1)
  140.                         {
  141.                                 if(RD3==1)break;
  142.                         }
  143.                 }
  144.                 if(jj==1)
  145.                 {
  146.                         Naoling_hour_1=        Naoling_hour;
  147.                         Naoling_minute_1=Naoling_minute;
  148.                         RC4=1;
  149.                         RC6=0;
  150.                         RC7=0;
  151.                 }
  152.                 if(jj==2)
  153.                 {
  154.                         Naoling_hour_2=        Naoling_hour;
  155.                         Naoling_minute_2=Naoling_minute;
  156.                         RC4=0;
  157.                         RC6=1;
  158.                         RC7=0;
  159.                 }
  160.                 if(jj==3)
  161.                 {
  162.                         Naoling_hour_3=        Naoling_hour;
  163.                         Naoling_minute_3=Naoling_minute;
  164.                         RC4=0;
  165.                         RC6=0;
  166.                         RC7=1;
  167.                         
  168.                 }
  169.         }
  170. }


  171. void NaolingXiang()
  172. {
  173.         int i;
  174.         if((kk==1)&&(Naoling_hour_1==clock[2])&&(Naoling_minute_1==clock[1]))
  175.         {
  176.                 RC5=1;
  177.                 for(i=0;i<100;i++);
  178.                 RC5=0;
  179.                 for(i=0;i<500;i++);
  180.         }
  181.         if((kk==1)&&(Naoling_hour_2==clock[2])&&(Naoling_minute_2==clock[1]))
  182.         {
  183.                 RC5=1;
  184.                 for(i=0;i<100;i++);
  185.                 RC5=0;
  186.                 for(i=0;i<200;i++);
  187.         }
  188.         if((kk==1)&&(Naoling_hour_3==clock[2])&&(Naoling_minute_3==clock[1]))
  189.         {
  190.                 RC5=1;
  191.                 for(i=0;i<200;i++);
  192.                 RC5=0;
  193.                 for(i=0;i<500;i++);
  194.         }
  195. }

  196. //查询子程序
  197. void chaxun()
  198. {
  199.         if(RD3==0)
  200.         {
  201.                 ii++;
  202.                 ii=ii%2;
  203.         }
  204.         while(1)
  205.         {
  206.                 if(RD3==1)break;
  207.         }
  208.         if(ii==1)
  209.         {
  210.                 KeyScan();
  211.         }
  212. }

  213. //主程序
  214. void main()
  215. {
  216.         keyinit();              //键盘初始化
  217.         LCDinit();              //LCD操作初始化
  218.         LCDShowTable();         //显示空白表格
  219.         LCDShowGudingWord();    //显示固定字符
  220.         get_temp();             //读取温度
  221.         TMR0init();
  222.         while(1)
  223.         {
  224.                 v_Get1302(clock);   //读取时间、日历
  225.                 display();
  226.                 FlashMaohao();      //冒号闪烁
  227.                 KeyScan();                //键盘扫描        
  228.                 GetWeek(clock[6]+2000,clock[4],clock[3]);
  229.                 GetChinaCalendar(clock[6]+2000,clock[4],clock[3]);
  230.                 //Naoling();
  231.                 //NaolingXiang();
  232.                 chaxun();
  233.         }
  234. }
转自http://www.51hei.com/bbs/dpj-149790-1.html
benjaminka 发表于 2023-6-6 12:12 | 显示全部楼层
写一个万年历的单片机程序,要求调日期时星期自动变,请问要怎么写
minzisc 发表于 2023-6-6 13:01 | 显示全部楼层
通过RTC来获取当前日期和时间,并根据日期计算出当月的日历。
hearstnorman323 发表于 2023-6-6 13:22 | 显示全部楼层
用单片机设计一个万年历,如何实现阳历到农历的转换?
geraldbetty 发表于 2023-6-6 14:13 | 显示全部楼层
万年历的设计思路是什么呢              
ccook11 发表于 2023-6-6 15:05 | 显示全部楼层
求个用单片机c语言实现的万年历              
 楼主| lzmm 发表于 2023-6-10 12:51 | 显示全部楼层
使用时钟芯片1302做万年历              
geraldbetty 发表于 2023-6-10 13:10 | 显示全部楼层
电子万年历的程序怎么计算平年和闰年
geraldbetty 发表于 2023-6-10 15:39 | 显示全部楼层
做万年历时,那个月份该怎么处理?
juliestephen 发表于 2023-6-10 17:01 | 显示全部楼层
怎样用单片机做一个多功能万年历,用12864屏,不能用时钟芯片
fengm 发表于 2023-6-10 17:20 | 显示全部楼层
怎样制作万年历单片机              
chenqianqian 发表于 2023-6-11 22:26 来自手机 | 显示全部楼层
没有显示吗?
mollylawrence 发表于 2023-6-13 21:46 | 显示全部楼层
基于单片机的万年历难吗              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

413

主题

9133

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部