找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2409|回复: 4
打印 上一主题 下一主题
收起左侧

单片机LCD12864万年历如何修改?

[复制链接]
跳转到指定楼层
楼主
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己来写程序去实现,谢谢大家
51单片机做的万年历,要将闹钟报警函数改下,要求添加一个LED灯,使其在闹钟响起前由暗慢慢变亮,当闹钟响时最亮(需要有个变亮的过程)。

8PXYTFJUJZPZM}39)$N5@15.png (19.23 KB, 下载次数: 63)

8PXYTFJUJZPZM}39)$N5@15.png

RWD4$UO]1LGPQRT))1}6W`F.png (47.23 KB, 下载次数: 49)

RWD4$UO]1LGPQRT))1}6W`F.png

7DRVPKWDCR{YL3HNT[}H}ZG.png (24.37 KB, 下载次数: 46)

7DRVPKWDCR{YL3HNT[}H}ZG.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:904364 发表于 2021-5-4 16:59 | 只看该作者
写一个呼吸灯的程序就可以实现由暗到亮的过程
回复

使用道具 举报

板凳
ID:390416 发表于 2021-5-4 17:17 | 只看该作者
简单啊 判断秒针时间 把秒针值-10  然后再乘以5 这样就可以从11秒开始 每秒钟增加5个亮度  总共250个亮度
回复

使用道具 举报

地板
ID:732107 发表于 2021-5-4 17:44 | 只看该作者
酱大锤 发表于 2021-5-4 16:59
写一个呼吸灯的程序就可以实现由暗到亮的过程

这是程序您可以帮我看看吗
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #include "value.h"
  5. #include "nongli.h"

  6. uchar n_nian,n_yue,n_ri;
  7. unsigned int CYCLE=800,PWM_LOW=0;
  8. bit flag_200ms = 1;
  9. uchar menu_1;
  10. uchar flag_clock_en;
  11. uchar flag_clock_kai;
  12. uchar flag_c_en;
  13. bit flag_100ms;
  14. sbit beep=P2^7;
  15. sbit LED0=P2^6;
  16. sbit dq=P3^2;
  17. uint temperature ;


  18. void delay_uint(uint z)
  19. {
  20.    while(z--);
  21. }
  22. void Delay(unsigned int t)
  23. {
  24. while(--t);
  25. }

  26. void delay_1ms(uint q)
  27. {
  28.         uint i,j;
  29.         for(i=0;i<q;i++)
  30.                 for(j=0;j<115;j++);
  31. }
  32. uchar dis_lcd[10];

  33. #include "lcd12864bu.h"

  34. void dis_shijian()
  35. {
  36.         write_shu16(3*2,1*8,shi,0);
  37.         write_shuzi(1,3*2,3*8,fuhao[1],0);
  38.         write_shu16(3*2,4*8,fen,0);
  39.         write_shuzi(1,3*2,6*8,fuhao[1],0);
  40.         write_shu16(3*2,7*8,miao,0);


  41.         write_shu16(1*2,6*8,nian,0);
  42.         write_shu16(1*2,10*8,yue,0);
  43.         write_shu16(1*2,14*8,ri,0);

  44.         write_shu16(2*2,4*8,n_yue,0);
  45.         write_shuzi(1,2*2,6*8,fuhao[0],0);
  46.         write_shu16(2*2,7*8,n_ri,0);

  47.         if(week==0)
  48.     {
  49.      write_yhanzi(1,4,7*16,xingqi[0]);
  50.     }
  51.     if(week==1)
  52.     {
  53.      write_yhanzi(1,4,7*16,xingqi[1]);
  54.     }
  55.     if(week==2)
  56.     {
  57.      write_yhanzi(1,4,7*16,xingqi[2]);
  58.     }
  59.     if(week==3)
  60.     {
  61.      write_yhanzi(1,4,7*16,xingqi[3]);
  62.     }
  63.     if(week==4)
  64.     {
  65.      write_yhanzi(1,4,7*16,xingqi[4]);
  66.     }
  67.     if(week==5)
  68.     {
  69.      write_yhanzi(1,4,7*16,xingqi[5]);
  70.     }
  71.     if(week==6)
  72.     {
  73.      write_yhanzi(1,4,7*16,xingqi[6]);
  74.     }
  75.     if(week==7)
  76.     {
  77.      week=0;
  78.      write_yhanzi(1,4,7*16,xingqi[0]);
  79.     }
  80.         write_shu18b20(3*2,10*8,temperature,0);
  81.         write_shuzi(1,3*2,12*8,dian,0);
  82. }


  83. void init_12864_dis()
  84. {
  85.         cs1=1;
  86.         cs2=0;
  87.          write_yhanzi(7,0,16,dzrl);
  88.          write_yhanzi(2,2,0,yangli);
  89.          write_yhanzi(2,4,0,nongli);


  90.         write_shu16(1*2,4*8,0x20,0);
  91.          write_yhanzi(1,2,4*16,qita[0]);
  92.          write_yhanzi(1,2,6*16,qita[1]);
  93.          write_yhanzi(2,4,5*16,qita[6]);
  94.          dis_shijian();
  95.          write_yhanzi(1,6,7*16,wendu_fuhao);

  96. }


  97. void init_18b20()
  98. {
  99.         bit q;
  100.         dq = 1;
  101.         delay_uint(1);
  102.         dq = 0;
  103.         delay_uint(80);
  104.         dq = 1;
  105.         delay_uint(10);
  106.         q = dq;
  107.         delay_uint(20);
  108.         dq = 1;
  109. }


  110. void write_18b20(uchar dat)
  111. {
  112.         uchar i;
  113.         for(i=0;i<8;i++)
  114.         {
  115.                 dq = 0;
  116.                 dq = dat & 0x01;
  117.                 delay_uint(5);
  118.                 dq = 1;
  119.                 dat >>= 1;
  120.         }
  121. }


  122. uchar read_18b20()
  123. {
  124.         uchar i,value;
  125.         for(i=0;i<8;i++)
  126.         {
  127.                 dq = 0;
  128.                 value >>= 1;
  129.                 dq = 1;
  130.                 if(dq == 1)
  131.                         value |= 0x80;
  132.                 delay_uint(5);
  133.         }
  134.         return value;
  135. }


  136. uint read_temp()
  137. {
  138.         uint value;
  139.         uchar low;
  140.         init_18b20();
  141.         write_18b20(0xcc);
  142.         write_18b20(0x44);
  143.         delay_uint(50);

  144.         init_18b20();

  145.         write_18b20(0xcc);
  146.         write_18b20(0xbe);

  147.         EA = 0;
  148.         low = read_18b20();
  149.         value = read_18b20();
  150.         EA = 1;
  151.         value <<= 8;
  152.         value |= low;
  153.         value *= 0.625;
  154.         return value;
  155. }


  156. void dis_shijian_set()
  157. {
  158.         write_shu16(0*2,0*8,0x20,0);
  159.         write_shu16(1*2,2*8,shi,0);
  160.         write_shu16(1*2,6*8,fen,0);
  161.         write_shu16(1*2,10*8,miao,0);
  162.         write_shu16(0*2,2*8,nian,0);
  163.         write_shu16(0*2,6*8,yue,0);
  164.         write_shu16(0*2,10*8,ri,0);
  165.         if(week>=1)
  166.         {
  167.          write_shu16(2*2,10*8,week-1,0);
  168.         }
  169.         if(week<=0)
  170.         {
  171.          week=7;write_shu16(2*2,10*8,week-1,0);
  172.         }
  173.         write_shu16(3*2,8*8,shi1,0);
  174.         write_shu16(3*2,12*8,fen1,0);
  175.         if(flag_clock_kai == 1)
  176.         write_yhanzi_fanbai(1,6,2*16,qita[10],0);
  177.         else
  178.         write_yhanzi_fanbai(1,6,2*16,qita[11],0);
  179. }



  180. void init_12864_set1()
  181. {
  182.         write_yhanzi(1,0,2*16,qita[0]);
  183.          write_yhanzi(1,0,4*16,qita[1]);
  184.          write_yhanzi(1,0,6*16,qita[2]);

  185.         write_yhanzi(1,2,2*16,qita[3]);
  186.          write_yhanzi(1,2,4*16,qita[4]);
  187.          write_yhanzi(1,2,6*16,qita[5]);
  188.         write_yhanzi(2,4,3*16,qita[6]);

  189.         write_yhanzi(2,6,0*16,qita[8]);
  190.         write_yhanzi(1,6,5*16,qita[3]);
  191.          write_yhanzi(1,6,7*16,qita[4]);
  192.         write_yhanzi(2,4,0*16,shezi[0]);

  193.         if(flag_clock_kai == 1)
  194.                 write_yhanzi_fanbai(1,6,2*16,qita[10],0);
  195.         else
  196.                 write_yhanzi_fanbai(1,6,2*16,qita[11],0);
  197.         dis_shijian_set();
  198. }


  199. void ds1302_dis()
  200. {
  201.         uchar miao_1;
  202.         if(menu_1 == 0)
  203.         {
  204.                 read_time();
  205.                 if(miao_1 != miao)
  206.                 {
  207.                         miao_1 = miao;
  208.                         Conversion(0,nian,yue,ri);
  209.                         n_nian = year_moon ;
  210.                         n_yue  = month_moon ;
  211.                         n_ri   = day_moon ;
  212.                         dis_shijian();

  213.                 }
  214.         }
  215. }


  216. uchar key_can;

  217. void key()
  218. {
  219.         static uchar key_new;
  220.         key_can = 20;
  221.         P3 |= 0x78;
  222.         if((P3 & 0x78) != 0x78)
  223.         {
  224.                 delay_1ms(1);
  225.                 if(((P3 & 0x78) != 0x78) && (key_new == 1))
  226.                 {
  227.                         key_new = 0;
  228.                         switch(P3 & 0x78)
  229.                         {
  230.                                 case 0x70:  key_can = 1;  break;
  231.                                 case 0x68:  key_can = 2;  break;
  232.                                 case 0x58:  key_can = 3;  break;
  233.                                 case 0x38:  key_can = 4;  break;
  234.                         }
  235. //                        write_sfm2(1,0,key_can);
  236.                 }
  237.         }
  238.         else
  239.                 key_new = 1;
  240. }


  241. void key_with()
  242. {
  243.         if(key_can == 4)
  244.         {
  245.                 qingling();
  246.                 init_12864_dis();

  247.                 flag_200ms = 1;
  248.                 menu_1 = 0;
  249.         }
  250.         if(key_can == 1)
  251.         {
  252.                 menu_1 ++;
  253.                 flag_200ms = 1;
  254.                 if(menu_1 == 1)
  255.                 {
  256.                         qingling();
  257.                         init_12864_set1();
  258.                 }
  259.                 if(menu_1 > 10)
  260.                         menu_1 = 1;
  261.         }
  262.         if(menu_1 != 0)
  263.         {
  264.                 if(menu_1 == 1)
  265.                 {
  266.                         if(key_can == 2)
  267.                                 set_ds1302time(1,&nian,0x99);
  268.                         if(key_can == 3)
  269.                                 set_ds1302time(0,&nian,0x99);
  270.                 }
  271.                 if(menu_1 == 2)
  272.                 {
  273.                         if(key_can == 2)
  274.                                 set_ds1302time(1,&yue,0x13);
  275.                         if(key_can == 3)
  276.                                 set_ds1302time(0,&yue,0x13);
  277.                 }
  278.                 if(menu_1 == 3)
  279.                 {
  280.                         if(key_can == 2)
  281.                                 set_ds1302time(1,&ri,0x32);
  282.                         if(key_can == 3)
  283.                                 set_ds1302time(0,&ri,0x32);
  284.                 }
  285.                 if(menu_1 == 4)
  286.                 {
  287.                         if(key_can == 4)
  288.                                 set_ds1302time(1,&shi,0x24);
  289.                         if(key_can == 3)
  290.                                 set_ds1302time(0,&shi,0x24);
  291.                 }
  292.                 if(menu_1 == 5)
  293.                 {
  294.                         if(key_can == 2)
  295.                                 set_ds1302time(1,&fen,0x60);
  296.                         if(key_can == 3)
  297.                                 set_ds1302time(0,&fen,0x60);
  298.                 }
  299.                 if(menu_1 == 6)
  300.                 {
  301.                         if(key_can == 2)
  302.                                 set_ds1302time(1,&miao,0x60);
  303.                         if(key_can == 3)
  304.                                 set_ds1302time(0,&miao,0x60);
  305.                 }
  306.                 if(menu_1 == 7)
  307.                 {
  308.                         if(key_can == 2)
  309.                                 set_ds1302time(1,&week,0x8);
  310.                         if(key_can == 3)
  311.                                 set_ds1302time(0,&week,0x8);
  312.                 }
  313.                 if(menu_1 == 8)
  314.                 {
  315.                         if(key_can == 2)
  316.                                 set_ds1302time(1,&shi1,0x24);
  317.                         if(key_can == 3)
  318.                                 set_ds1302time(0,&shi1,0x24);
  319.                         clock1_save();
  320.                 }
  321.                 if(menu_1 == 9)
  322.                 {
  323.                         if(key_can == 2)
  324.                                 set_ds1302time(1,&fen1,0x60);
  325.                         if(key_can == 3)
  326.                                 set_ds1302time(0,&fen1,0x60);
  327.                         clock1_save();
  328.                 }
  329.                 if(menu_1 == 10)
  330.                 {
  331.                         if((key_can == 2) || (key_can == 3))
  332.                                 flag_clock_kai ++;
  333.                         if(flag_clock_kai >= 2)
  334.                                 flag_clock_kai = 0;
  335.                         if(flag_clock_kai == 1)
  336.                                 write_yhanzi_fanbai(1,6,2*16,qita[10],1);
  337.                         else
  338.                                 write_yhanzi_fanbai(1,6,2*16,qita[11],1);
  339.                         clock1_save();
  340.                 }
  341.                  dis_shijian_set();
  342.                 switch(menu_1)
  343.                 {
  344.                         case 1:  write_shu16(0*2,2*8,nian,1);  break;
  345.                         case 2:  write_shu16(0*2,6*8,yue,1);         break;
  346.                         case 3:  write_shu16(0*2,10*8,ri,1);  break;
  347.                         case 4:  write_shu16(1*2,2*8,shi,1);  break;
  348.                         case 5:  write_shu16(1*2,6*8,fen,1);          break;
  349.                         case 6:  write_shu16(1*2,10*8,miao,1);  break;
  350.                         case 7:
  351.                         if(week>0)
  352.                         {
  353.                          write_shu16(2*2,10*8,week-1,1);
  354.                         }
  355.                         if(week<=0)
  356.                         {
  357.                          week=7;
  358.                          write_shu16(2*2,10*8,week-1,1);
  359.                         }
  360.                          break;
  361.                         case 8:  write_shu16(3*2,8*8,shi1,1);  break;
  362.                         case 9:  write_shu16(3*2,12*8,fen1,1); break;
  363.                         case 10: if(flag_clock_kai == 1)
  364.                                         write_yhanzi_fanbai(1,6,2*16,qita[10],1);
  365.                                         else
  366.                                         write_yhanzi_fanbai(1,6,2*16,qita[11],1);
  367.                                          break;
  368.                 }
  369.                 write_time();
  370.         }
  371. }


  372. void menu_dis()
  373. {
  374.         if(menu_1 == 0)
  375.         if(flag_clock_kai == 1)
  376.         {
  377.                 if((fen == fen1) && (shi == shi1) && (miao == 0))
  378.                 {
  379.                         flag_clock_en = 1;
  380.                 }
  381.                 if(flag_clock_en == 1)

  382.                          {
  383.                                  beep=~beep;
  384.                          }
  385.         }
  386. }

  387. //void deng
  388. /













  389. /


  390. void time0_init()
  391. {
  392.         EA  = 1;
  393.         TMOD = 0X11;
  394.         ET0 = 1;
  395.         TR0 = 1;
  396. }

  397. void main()
  398. {
  399.                 beep = 0;
  400.                 delay_1ms(150);
  401.                 P0 = P1 = P2 = P3 = 0xff;
  402.                 init_ds1302();
  403.                 init_lcd();
  404.                 Clr_Scr();
  405.                 time0_init();
  406.                 init_12864_dis();
  407.         while(1)
  408.     {
  409.                 key();
  410.                 if(key_can < 10)
  411.                 {
  412.                         if(flag_clock_en == 0)
  413.                                 key_with();
  414.                         else
  415.                         {
  416.                                 beep = 1;
  417.                                 flag_clock_en = 0;
  418.                         }
  419.                 }
  420.                 if(flag_100ms == 1)
  421.                 {
  422.                         menu_dis();
  423.                         flag_100ms = 0;
  424.                 }
  425.                  if(flag_200ms == 1)
  426.                 {
  427.                         flag_200ms = 0;
  428.                         temperature = read_temp();
  429.                         ds1302_dis();
  430.                 }

  431.         }
  432. }


  433. void time0_int() interrupt 1
  434. {
  435.         static uchar value;
  436.         TH0 = 0x3c;
  437.         TL0 = 0xb0;
  438.         value ++;
  439.         if(value % 2 == 0)
  440.         {
  441.                 flag_100ms = 1;
  442.         }
  443.         if(value % 20 == 0)
  444.         {
  445.                 flag_200ms = 1;
  446.         }
  447. }
复制代码


回复

使用道具 举报

5#
ID:230742 发表于 2021-5-4 20:57 | 只看该作者
单独写一个呼吸灯的函数
呼吸灯()
然后在闹钟的BEEP前先调用这个函数,灯亮了,闹钟也响了。
响完关闭灯光。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表