找回密码
 立即注册

QQ登录

只需一步,快速开始

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

最新32X64LED万年历有农历和各种节日

  [复制链接]
跳转到指定楼层
楼主
最新32X64LED万年历有农历和各种节日,程序测试通过
下面是万年历调整时间和月份的图片:



主程序:
  1. /***************************************************************************
  2. 基于STC12C5A60S2+DS1302的多功能万年历
  3. 程序编写:辽宁科技大学电子09——1 肖海龙

  4. 由于市面的屏比较杂如有问题请QQ联系
  5. 万年历基本情况,可以显示年月日,农历,星期,节日等,时间等都可以自动调节如需爱好可以加上温度,
  6. 定时,由于本人最近忙科研立项,时间紧迫如有需要的可与我联系,由于本人比较忙代码就没有优化,
  7. 看着有点乱,希望大家多多谅解。


  8. 本人长期研究51 AVR ARM FPGA如有爱好者大家一起讨论。我相信只要大家不屑的努力一切都会成功的。
  9. 最后祝福大家:天天开心!
  10.                工作顺利!

  11. *************************虽然我做的不是最好但是,我只求更好***************
  12. ****************************************************************************/


  13. #include<reg51.h>
  14. #include <intrins.h>
  15. #include "DS1302.h"
  16. #define  uchar unsigned char
  17. #define  uint  unsigned int
  18. #include <string.h>

  19. #define uchar unsigned char
  20. #define uint unsigned int
  21. uchar yy,mo,dd,xq,hh,mm,ss,e,x;
  22. SYSTEMTIME   CurrentTime;
  23. SYSTEMTIME   Time;
  24. void Keyscan (void); //修改参数按键扫描子程序
  25. void  Sendping(); //发送半屏子程序
  26. sbit  CLK =P1^4 ;                  //74HC595移时钟
  27. sbit  STB =P1^5        ;          // 74HC595锁存信号
  28. sbit  Red=P1^6        ;          //红色数据输出引脚低电平有效            
  29. sbit  Greed=P0^7;         //全屏控制使能0,低电平有效
  30. sbit  OE = P1^7;           //全屏使能


  31. sbit KEY_1 = P0^7;         //左上
  32. sbit KEY_2 = P0^6;         //左下
  33. sbit KEY_3 = P0^5;         //右上
  34. sbit KEY_4 = P0^4;         //右下        
  35. bit w = 0; //调时标志位
  36. uchar SendData;                  //要发送的数据变量
  37. uchar shuzu1;                          //数组一维变量
  38. uchar shuzu2;                        //数组二维变量
  39. uchar shuzu3;                        //数组二维变量  
  40. uchar hang;                        //行扫描变量  (半屏只有16行,所以hang=0到15)
  41.                  
  42. unsigned char code data1[][16]=
  43.                                         {
  44. /*--  文字:  0  --*/
  45. /*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  46. 0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00,

  47. /*--  文字:  1  --*/
  48. /*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  49. 0x00,0x00,0x00,0x10,0x30,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,

  50. /*--  文字:  2  --*/
  51. /*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  52. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,

  53. /*--  文字:  3  --*/
  54. /*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  55. 0x00,0x00,0x00,0x3C,0x42,0x42,0x02,0x02,0x0C,0x02,0x02,0x42,0x42,0x3C,0x00,0x00,


  56.             

  57. …………余下代码请下载附件…………

复制代码


万年历的全部制作资料下载:
点阵时钟3264 V2.3.rar (166.18 KB, 下载次数: 96)
我的32X64LED万年历.rar (171.1 KB, 下载次数: 105)

评分

参与人数 2黑币 +62 收起 理由
h832ea + 12 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-3-8 02:43 | 只看该作者
这是另一个版本的程序:
  1. #include <stc12c5a60s2.h>
  2. #define uchar unsigned char
  3. sbit LED=P1^0; //LED指示灯
  4. sbit BEEP=P1^2;        //蜂鸣器
  5. sbit KEY1=P3^3;        //按键
  6. sbit KEY2=P3^4;
  7. sbit KEY3=P3^5;
  8. sbit KEY4=P3^6;
  9. sbit DQ=P2^0; //18B20传感器
  10. sbit SCK=P2^1; //595时钟
  11. sbit STR=P2^2;        //595锁存
  12. sbit RD1=P2^4;        //红色数据上
  13. sbit RD2=P2^5;         //红色数据下
  14. sbit GD1=P2^6;         //绿色数据上
  15. sbit GD2=P2^7;         //绿色数据下
  16. sbit OE=P2^3;         //使能端           P0口低4位为行扫描
  17. sbit CE=P1^5;         //DS1302片选
  18. sbit IO=P1^6;         //DS1302数据
  19. sbit SCLK=P1^7;          //DS1302时钟  
  20. code uchar LOGO[]={0x07,0xFF,0xFD,0xFF,0xF7,0xFF,0xF7,0xFF,0x74,0x07,0xBD,0xDF,0xE2,0xEF,0xF7,0xEF,0x6D,0xF7,0xDD,0xDF,0x1F,0x6F,0xF7,0xEF,0x6D,0xF7,0xED,0xDF,0xEF,0x6F,0xF7,0xEF,
  21.                    0x5D,0xF7,0xED,0xBF,0xEF,0xEF,0x81,0x01,0x6D,0xF7,0xFD,0xFF,0xEF,0xEF,0xF7,0xEF,0x6D,0xF6,0x00,0x03,0x01,0x6F,0xF7,0xEF,0x74,0x07,0xF7,0x7F,0xEF,0xAF,0xF5,0x83,
  22.                    0x75,0xF7,0xF7,0x7F,0xC7,0xAF,0xF3,0xBB,0x75,0xF7,0xF7,0x7F,0xCB,0xE9,0xE7,0xBB,0x2D,0xF7,0xF7,0x7F,0xAE,0x07,0x97,0xD7,0x5D,0xF7,0xEF,0x7B,0xAF,0xEF,0xF7,0xEF,
  23.                    0x7D,0xF7,0xEF,0x7B,0x6F,0xEF,0xF7,0xD7,0x7C,0x07,0xDF,0x7B,0xEF,0xEF,0xD7,0xB7,0x7F,0xFE,0x3F,0x83,0xEF,0xEF,0xE7,0x79,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  24.                    0xFF,0xFF,0xFB,0xF0,0x70,0x1F,0x7F,0x80,0x78,0x43,0xC0,0xFF,0x7D,0xFE,0x07,0xBF,0x7B,0xDD,0xDA,0xFE,0xFC,0x3F,0xDF,0xBB,0x7B,0xDD,0xC0,0xFD,0xFD,0xDE,0x07,0xA0,
  25.                    0x78,0x5D,0xDA,0xE0,0x3D,0xDE,0xDF,0xBA,0x7B,0xDD,0xC0,0xFD,0xFB,0xDE,0xDF,0xB6,0x7B,0xDD,0xFB,0xFD,0xF7,0xDC,0x03,0xB6,0x08,0x43,0xF8,0x79,0xEF,0x9F,0xDF,0x6C,
  26.                    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xCC,0x1C,0xE1,0xDB,0xD8,0x7F,0xFF,0xFF,0xB7,0x7B,0x6E,0xD9,0xD7,0xFF,0xFF,0xFF,0xBF,0x77,0xAE,0xDA,0xD7,0xFF,0xFF,0xFF,
  27.                    0xCF,0x77,0xA1,0xDB,0x54,0x3F,0xFF,0xFF,0xF7,0x70,0x27,0xDB,0x97,0xBF,0xFF,0xFF,0xB7,0x77,0xAB,0xDB,0xD7,0xBF,0xFF,0xFF,0xCF,0x77,0xAD,0xDB,0xD8,0x71,0x11,0x11};//厂标图片
  28. code uchar NUM0[]={0xBF,0x3F,0xBF,0xBF,0xBF,0xBF,0x1F,0xFF};//公历月数字前
  29. code uchar NUM1[]={0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
  30.                   0xFF,0xFF,0xC3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xC0,0xFF,0xFF,
  31.                   0xFF,0xFF,0xC1,0x9C,0x9C,0x9C,0xF9,0xF3,0xE7,0xCF,0xDF,0x8C,0x94,0x99,0xFF,0xFF,
  32.                   0xFF,0xFF,0x80,0x9C,0x99,0x99,0xF3,0xE3,0xF9,0xFC,0xFC,0x9C,0x99,0xC3,0xFF,0xFF,
  33.                   0xFF,0xFF,0xF9,0xF1,0xF1,0xE1,0xE9,0xC9,0xD9,0x99,0x80,0xF9,0xF9,0xE0,0xFF,0xFF,
  34.                   0xFF,0xFF,0x80,0x9C,0x9C,0x9F,0x83,0x99,0x9C,0xFC,0xFC,0x9C,0x99,0xC3,0xFF,0xFF,
  35.                   0xFF,0xFF,0xE1,0xCC,0x9C,0x9F,0x83,0x89,0x9C,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
  36.                   0xFF,0xFF,0x84,0x98,0x9C,0x9D,0xF9,0xF9,0xF9,0xF3,0xF3,0xF3,0xF3,0xF3,0xFF,0xFF,
  37.                   0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0xC9,0xE3,0xC9,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
  38.                   0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0x9C,0x9C,0xC8,0xE4,0xFC,0x9C,0x99,0xC3,0xFF,0xFF};//大数字
  39. code uchar NUM2[]={0xF9,0xF6,0xF6,0xF6,0xF6,0xF6,0xF9,0xFF,0xFB,0xF3,0xFB,0xFB,0xFB,0xFB,0xF1,0xFF,0xF9,0xF6,0xFE,0xFD,0xFB,0xF7,0xF0,0xFF,
  40.                    0xF9,0xF6,0xFE,0xF9,0xFE,0xF6,0xF9,0xFF,0xFD,0xF9,0xF9,0xF5,0xF5,0xF0,0xFD,0xFF,0xF0,0xF7,0xF7,0xF1,0xFE,0xFE,0xF1,0xFF,
  41.                    0xF9,0xF6,0xF7,0xF1,0xF6,0xF6,0xF9,0xFF,0xF0,0xF6,0xFE,0xFD,0xFB,0xFB,0xFB,0xFF,0xF9,0xF6,0xF6,0xF9,0xF6,0xF6,0xF9,0xFF,
  42.                    0xF9,0xF6,0xF6,0xF8,0xFE,0xF6,0xF9,0xFF};//小数字前
  43. code uchar NUM3[]={0xCF,0xB7,0xB7,0xB7,0xB7,0xB7,0xCF,0xFF,0xDF,0x9F,0xDF,0xDF,0xDF,0xDF,0x8F,0xFF,0xCF,0xB7,0xF7,0xEF,0xDF,0xBF,0x87,0xFF,
  44.                    0xCF,0xB7,0xF7,0xCF,0xF7,0xB7,0xCF,0xFF,0xEF,0xCF,0xCF,0xAF,0xAF,0x87,0xEF,0xFF,0x87,0xBF,0xBF,0x8F,0xF7,0xF7,0x8F,0xFF,
  45.                    0xCF,0xB7,0xBF,0x8F,0xB7,0xB7,0xCF,0xFF,0x87,0xB7,0xF7,0xEF,0xDF,0xDF,0xDF,0xFF,0xCF,0xB7,0xB7,0xCF,0xB7,0xB7,0xCF,0xFF,
  46.                    0xCF,0xB7,0xB7,0xC7,0xF7,0xB7,0xCF,0xFF}; //小数字后
  47. code uchar WEEK[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  48.                    0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,
  49.                    0xFF,0xFF,0xC3,0xFF,0xFF,0x81,0xFF,0xFF,
  50.                    0xFF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,0xFF,
  51.                                    0xFF,0x00,0x6A,0x18,0x7E,0x7E,0x00,0xFF,
  52.                                    0xFF,0xC3,0xF7,0xC1,0xF5,0xF5,0x80,0xFF,
  53.                                    0xFF,0xF7,0x81,0xFF,0xDB,0xBD,0xFF,0xFF,
  54.                                    0xFF,0x81,0xBD,0xBD,0x81,0xBD,0xBD,0x81}; //小字星期
  55. code uchar WEK[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  56.                   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  57.                   0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  58.                   0xFF,0xFF,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,
  59.                   0xFF,0xFF,0xFF,0xFF,0x80,0x03,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xBB,0xB7,0xBB,0xB7,0xC3,0xAF,0xFB,0x9F,0xFB,0xBF,0xFB,0x80,0x03,0xBF,0xFB,0xFF,0xFF,
  60.                   0xFF,0xFF,0x80,0x03,0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xFD,0xFF,0xC0,0x0F,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xFB,0xEF,0xF7,0xEF,0xF7,0xEF,0xF7,0xEF,0x00,0x01,0xFF,0xFF,
  61.                   0xFD,0xFF,0xFE,0xFF,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFB,0xBF,0xFB,0xDF,0xF7,0xEF,0xF7,0xF7,0xEF,0xF7,0xDF,0xFB,0xBF,0xFB,0xFF,0xFF,
  62.                   0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xEF,0xEF};        //大字星期
  63. code uchar tiao[]={0xFF,0xFF,0xF7,0xDF,0xB8,0x03,0xF7,0xDF,0xDB,0xBB,0x00,0x41,0xDB,0xBB,0xF7,0xBB,
  64.                    0xFA,0x0B,0x80,0x5B,0xFB,0xBB,0xB6,0xDB,0x1B,0xBB,0x80,0xD7,0xD8,0x03,0xD5,0xEF,
  65.                    0xDB,0xFB,0xB6,0xD7,0xDA,0x0B,0xF7,0xF9,0xDA,0xEB,0xFF,0xFF,0xD2,0xEB,0x80,0x03,
  66.                                    0xCA,0x0B,0xFE,0xFF,0xDB,0xFB,0xEE,0x3F,0xFB,0xEB,0xEE,0xFF,0xF7,0xF7,0x00,0x01};//调整
  67. code uchar SET[]= {0xDF,0xFF,0xF7,0xEF,0xDF,0xFF,0xF7,0x6F,0xC0,0x07,0xF7,0x6F,0xBE,0xFF,0xEF,0x77,0xBE,0xFF,0xEE,0xF7,0x7E,0xFF,0xCE,0xFB,0xC0,0x0F,0xCD,0xFB,0xDE,0xFF,0xAA,0x05,
  68.                    0xDE,0xFF,0x6F,0x77,0xDE,0xFF,0xEF,0x77,0x00,0x03,0xEF,0x77,0xFE,0xFF,0xEF,0x77,0xFE,0xFF,0xEE,0xF7,0xFE,0xFF,0xEE,0xF7,0xFE,0xFF,0xED,0xD7,0xFE,0xFF,0xEB,0xEF,
  69.                                    0xFF,0xFF,0xF7,0xEF,0xE0,0x07,0xF7,0x6F,0xEF,0xF7,0xF7,0x6F,0xEF,0xF7,0xEF,0x77,0xEF,0xF7,0xEE,0xF7,0xE0,0x07,0xCE,0xFB,0xEF,0xF7,0xCD,0xFB,0xEF,0xF7,0xAA,0x05,
  70.                    0xEF,0xF7,0x6F,0x77,0xE0,0x07,0xEF,0x77,0xEF,0xF7,0xEF,0x77,0xEF,0xF7,0xEF,0x77,0xDF,0xF7,0xEE,0xF7,0xDF,0xF7,0xEE,0xF7,0xBF,0xD7,0xED,0xD7,0x7F,0xEF,0xEB,0xEF,
  71.                                    0xFF,0xFF,0xBB,0xFF,0xE0,0x0F,0xBB,0x07,0xEF,0xEF,0x01,0x77,0xEF,0xEF,0xBB,0x77,0xEF,0xEF,0xBB,0x07,0xEF,0xEF,0x83,0x77,0xEF,0xEF,0xBB,0x77,0xE0,0x0F,0xBB,0x77,
  72.                    0xEF,0xEF,0x83,0x07,0xEF,0xEF,0xBB,0x77,0xEF,0xEF,0xBB,0x77,0xEF,0xEE,0x01,0x77,0xEF,0xEF,0xF7,0x77,0xEF,0xEF,0xBA,0xF7,0xE0,0x0F,0x7D,0xD7,0xEF,0xEE,0xFB,0xEF,
  73.                                    0xFF,0xFF,0xBB,0xFF,0xE0,0x0F,0xBB,0x07,0xEF,0xEF,0x01,0x77,0xE0,0x0F,0xBB,0x77,0xEF,0xEF,0xBB,0x07,0xE0,0x0F,0x83,0x77,0xFE,0xFF,0xBB,0x77,0xEE,0xFF,0xBB,0x77,
  74.                    0xE0,0x07,0x83,0x07,0xDE,0xFF,0xBB,0x77,0xBE,0xFF,0xBB,0x77,0xE0,0x06,0x01,0x77,0xFE,0xFF,0xF7,0x77,0xFE,0xFF,0xBA,0xF7,0x80,0x03,0x7D,0xD7,0xFF,0xFE,0xFB,0xEF,
  75.                                    0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xF7,0xFE,0xFF,0x83,0xF7,0xFE,0xFF,0xBB,0xF7,0xEE,0xEF,0xBA,0x01,0xEE,0xF7,0xBB,0xF7,0xEE,0xFB,0xBB,0xF7,0xDE,0xFB,0x83,0x77,
  76.                    0xDE,0xFD,0xBB,0xB7,0xBE,0xFD,0xBB,0xB7,0x7E,0xFD,0xBB,0xF7,0xFE,0xFF,0xBB,0xF7,0xFE,0xFF,0x83,0xF7,0xFE,0xFF,0xBB,0xD7,0xFA,0xFF,0xFF,0xEF,0xFD,0xFF,0xFF,0xFF,
  77.                                    0xFF,0xBF,0xEF,0xDF,0xFB,0xBF,0xEF,0xDF,0xFB,0xDF,0xC3,0xDF,0xF7,0xDF,0xDF,0xDF,0xEF,0xEF,0xBE,0x03,0xDF,0xF7,0x42,0xDB,0xBF,0xFB,0xEE,0xDB,0x60,0x1D,0xEE,0xDB,
  78.                    0xFB,0xDF,0x02,0xDB,0xFB,0xDF,0xEE,0x03,0xFB,0xDF,0xEE,0xDB,0xF7,0xDF,0xEF,0xDF,0xF7,0xDF,0xEB,0xDF,0xEF,0xDF,0xE7,0xDF,0xDF,0x5F,0xEF,0xDF,0xBF,0xBF,0xFF,0xDF,
  79.                                    0xFF,0xF7,0xEF,0xFF,0xFF,0xF7,0xF7,0xFD,0x83,0xF7,0xFF,0xFD,0xBB,0xF7,0x00,0xED,0xBA,0x01,0xF7,0xED,0xBB,0xF7,0xEE,0xED,0xBB,0xF7,0xDE,0xED,0x83,0xF7,0x81,0xED,
  80.                    0xBB,0x77,0xFD,0xED,0xBB,0xB7,0xFB,0x6D,0xBB,0xB7,0xF6,0xED,0xBB,0xF7,0xED,0xED,0x83,0xF7,0x99,0xFD,0xBB,0xF7,0xF6,0xFD,0xFF,0xD7,0xEF,0x75,0xFF,0xEF,0x9F,0xBB};//设置文字切换
  81. code uchar shike[]={0xFD,0xFF,0xF7,0xFF,0xFD,0xFF,0xF7,0xFF,0xFD,0xFF,0xF7,0xFF,0xFD,0xFF,0xE0,0x07,0xFD,0xFF,0xEE,0xFF,0xFD,0xFF,0xDE,0xFF,0xFC,0x07,0xBE,0xFF,0xFD,0xFF,0xFE,0xFF,
  82.                     0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0x00,0x01,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFF,0xFF,0xFE,0xFF,
  83.                                         0xFF,0xFF,0xF7,0xFF,0x00,0x01,0xF7,0xFF,0xFD,0xFF,0xF7,0xFF,0xFD,0xFF,0xE0,0x07,0xFD,0xFF,0xEE,0xFF,0xFD,0xFF,0xDE,0xFF,0xFD,0xBF,0xBE,0xFF,0xFD,0xDF,0xFE,0xFF,
  84.                     0xFD,0xEF,0xFE,0xFF,0xFD,0xF7,0x00,0x01,0xFD,0xF7,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF,0xFD,0xFF,0xFE,0xFF};//大字上下午
  85. code uchar  year_code[]={0x04,0xAe,0x53,0x0A,0x57,0x48,0x55,0x26,0xBd,0x0d,0x26,0x50,0x0d,0x95,0x44,0x46,0xAA,0xB9,0x05,0x6A,0x4d,0x09,0xAd,0x42,0x24,0xAe,0xB6,
  86.                          0x04,0xAe,0x4A,0x6A,0x4d,0xBe,0x0A,0x4d,0x52,0x0d,0x25,0x46,0x5d,0x52,0xBA,0x0B,0x54,0x4e,0x0d,0x6A,0x43,0x29,0x6d,0x37,0x09,0x5B,0x4B,
  87.                          0x74,0x9B,0xC1,0x04,0x97,0x54,0x0A,0x4B,0x48,0x5B,0x25,0xBC,0x06,0xA5,0x50,0x06,0xd4,0x45,0x4A,0xdA,0xB8,0x02,0xB6,0x4d,0x09,0x57,0x42,
  88.                          0x24,0x97,0xB7,0x04,0x97,0x4A,0x66,0x4B,0x3e,0x0d,0x4A,0x51,0x0e,0xA5,0x46,0x56,0xd4,0xBA,0x05,0xAd,0x4e,0x02,0xB6,0x44,0x39,0x37,0x38,
  89.                          0x09,0x2e,0x4B,0x7C,0x96,0xBf,0x0C,0x95,0x53,0x0d,0x4A,0x48,0x6d,0xA5,0x3B,0x0B,0x55,0x4f,0x05,0x6A,0x45,0x4A,0xAd,0xB9,0x02,0x5d,0x4d,
  90.                          0x09,0x2d,0x42,0x2C,0x95,0xB6,0x0A,0x95,0x4A,0x7B,0x4A,0xBd,0x06,0xCA,0x51,0x0B,0x55,0x46,0x55,0x5A,0xBB,0x04,0xdA,0x4e,0x0A,0x5B,0x43,
  91.                          0x35,0x2B,0xB8,0x05,0x2B,0x4C,0x8A,0x95,0x3f,0x0e,0x95,0x52,0x06,0xAA,0x48,0x7A,0xd5,0x3C,0x0A,0xB5,0x4f,0x04,0xB6,0x45,0x4A,0x57,0x39,
  92.                          0x0A,0x57,0x4d,0x05,0x26,0x42,0x3e,0x93,0x35,0x0d,0x95,0x49,0x75,0xAA,0xBe,0x05,0x6A,0x51,0x09,0x6d,0x46,0x54,0xAe,0xBB,0x04,0xAd,0x4f,
  93.                          0x0A,0x4d,0x43,0x4d,0x26,0xB7,0x0d,0x25,0x4B,0x8d,0x52,0xBf,0x0B,0x54,0x52,0x0B,0x6A,0x47,0x69,0x6d,0x3C,0x09,0x5B,0x50,0x04,0x9B,0x45,
  94.                                                  0x4A,0x4B,0xB9,0x0A,0x4B,0x4d,0xAB,0x25,0xC2,0x06,0xA5,0x54,0x06,0xd4,0x49,0x6A,0xdA,0x3d,0x0A,0xB6,0x51,0x09,0x37,0x46,0x54,0x97,0xBB,
  95.                          0x04,0x97,0x4f,0x06,0x4B,0x44,0x36,0xA5,0x37,0x0e,0xA5,0x4A,0x86,0xB2,0xBf,0x05,0xAC,0x53,0x0A,0xB6,0x47,0x59,0x36,0xBC,0x09,0x2e,0x50,
  96.                          0x0C,0x96,0x45,0x4d,0x4A,0xB8,0x0d,0x4A,0x4C,0x0d,0xA5,0x41,0x25,0xAA,0xB6,0x05,0x6A,0x49,0x7A,0xAd,0xBd,0x02,0x5d,0x52,0x09,0x2d,0x47,
  97.                          0x5C,0x95,0xBA,0x0A,0x95,0x4e,0x0B,0x4A,0x43,0x4B,0x55,0x37,0x0A,0xd5,0x4A,0x95,0x5A,0xBf,0x04,0xBA,0x53,0x0A,0x5B,0x48,0x65,0x2B,0xBC,
  98.                                                  0x05,0x2B,0x50,0x0A,0x93,0x45,0x47,0x4A,0xB9,0x06,0xAA,0x4C,0x0A,0xd5,0x41,0x24,0xdA,0xB6,0x04,0xB6,0x4A,0x69,0x57,0x3d,0x0A,0x4e,0x51,
  99.                          0x0d,0x26,0x46,0x5e,0x93,0x3A,0x0d,0x53,0x4d,0x05,0xAA,0x43,0x36,0xB5,0x37,0x09,0x6d,0x4B,0xB4,0xAe,0xBf,0x04,0xAd,0x53,0x0A,0x4d,0x48,
  100.                          0x6d,0x25,0xBC,0x0d,0x25,0x4f,0x0d,0x52,0x44,0x5d,0xAA,0x38,0x0B,0x5A,0x4C,0x05,0x6d,0x41,0x24,0xAd,0xB6,0x04,0x9B,0x4A,0x7A,0x4B,0xBe,
  101.                          0x0A,0x4B,0x51,0x0A,0xA5,0x46,0x5B,0x52,0xBA,0x06,0xd2,0x4e,0x0A,0xdA,0x42,0x35,0x5B,0x37,0x09,0x37,0x4B,0x84,0x97,0xC1,0x04,0x97,0x53,
  102.                          0x06,0x4B,0x48,0x66,0xA5,0x3C,0x0e,0xA5,0x4f,0x06,0xB2,0x44,0x4A,0xB6,0x38,0x0A,0xAe,0x4C,0x09,0x2e,0x42,0x3C,0x97,0x35,0x0C,0x96,0x49,
  103.                          0x7d,0x4A,0xBd,0x0d,0x4A,0x51,0x0d,0xA5,0x45,0x55,0xAA,0xBA,0x05,0x6A,0x4e,0x0A,0x6d,0x43,0x45,0x2e,0xB7,0x05,0x2d,0x4B,0x8A,0x95,0xBf,
  104.                          0x0A,0x95,0x53,0x0B,0x4A,0x47,0x6B,0x55,0x3B,0x0A,0xd5,0x4f,0x05,0x5A,0x45,0x4A,0x5d,0x38,0x0A,0x5B,0x4C,0x05,0x2B,0x42,0x3A,0x93,0xB6,
  105.                          0x06,0x93,0x49,0x77,0x29,0xBd,0x06,0xAA,0x51,0x0A,0xd5,0x46,0x54,0xdA,0xBA,0x04,0xB6,0x4e,0x0A,0x57,0x43,0x45,0x27,0x38,0x0d,0x26,0x4A,
  106.                          0x8e,0x93,0x3e,0x0d,0x52,0x52,0x0d,0xAA,0x47,0x66,0xB5,0x3B,0x05,0x6d,0x4f,0x04,0xAe,0x45,0x4A,0x4e,0xB9,0x0A,0x4d,0x4C,0x0d,0x15,0x41,
  107.                              0x2d,0x92,0xB5};//农历年份调整数组
  108. code uchar day_code1[]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};//农历日期调整
  109. code unsigned short  day_code2[3]={0x111,0x130,0x14e};         //农历日期调整2
  110. code uchar heng[]={0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF};//横杆
  111. code uchar UPDW[]={0xFF,0xEF,0xE3,0xEF,0xEF,0xEF,0x81,0xFF,0xFF,0x81,0xEF,0xE7,0xEB,0xEF,0xEF,0xFF}; //上下午
  112. code uchar COL[]={0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF};        //冒号
  113. code uchar wuzi[]={0xFF,0xEF,0xC3,0xF7,0x81,0xF7,0xF7,0xF7}; //午字
  114. code uchar czi[]={0xFF,0xC7,0xBB,0xBF,0xBF,0xBB,0xC7,0xFF};//C字
  115. code uchar duzi[]={0xFF,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF};//度字
  116. code uchar yuezi0[]={0xE0,0xEE,0xE0,0xEE,0xE0,0xEE,0xDE,0xBC};
  117. code uchar yuezi1[]={0xC1,0xDD,0xC1,0xDD,0xC1,0xDD,0xBD,0x79};  //月字
  118. code uchar rizi[]={0x81,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0x81}; //日字
  119. code uchar timer[]={0x30,0x10,0xa9,0x20,0x11,0x04,0x14,0x0b}; //初始化时间数据
  120. code uchar shizi[]={0xFF,0xEF,0xEF,0x83,0xEF,0xEF,0xEF,0xFF}; //农历月十位,十字
  121. code uchar zhengzi[]={0xFF,0xC1,0xF7,0xF3,0xD7,0xD7,0x80,0xFF};//农历月个位,正字
  122. code uchar chuzi[]={0xBF,0x10,0xDA,0x9A,0x2A,0xBA,0xB6,0xAC};  //初字
  123. code uchar nlsw[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xFF,0xEF,0xEF,0x83,0xEF,0xEF,0xEF,0xFF,0xFF,0xDB,0xDB,0x81,0xDB,0xDB,0xC3,0xFF,
  124.                    0xFF,0xC3,0xFF,0xE7,0xFF,0xFF,0x81,0xFF };//空,十,二,三
  125. code uchar nday[]={0xFF,0xEF,0xEF,0x83,0xEF,0xEF,0xEF,0xFF,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,
  126.                    0xFF,0xFF,0xC3,0xFF,0xE7,0xFF,0x81,0xFF,0xFF,0x80,0xAA,0x98,0xBE,0xBE,0x80,0xFF,0xFF,0xE3,0xF7,0xC1,0xF5,0xF5,0x80,0xFF,
  127.                                    0xFF,0xF7,0x81,0xFF,0xDB,0xBD,0xFF,0xFF,0xFF,0xEF,0x81,0xEF,0xEF,0xED,0xF1,0xFF,0xFF,0xDF,0xDB,0xDB,0xDB,0xBD,0x7E,0xFF,
  128.                                    0xFF,0xEF,0x83,0xEB,0xEB,0xEB,0x98,0xFF};//十,一到九
  129. uchar IRcode[4];
  130. bit IR_OK,IR_END;
  131. uchar bon,logo_sec,set_sec;        //厂标所需变量
  132. uchar months,days;        //农历月份与日期
  133. uchar menu;          //菜单级数
  134. uchar temp_val;        //温度变
  135. bit setup=0,sk;        //厂标显示开关,上下午标志
  136. bit err=0; //18b20故障标志
  137. uchar clock_bcd[8];        //1302时钟BCD数据
  138. xdata uchar disbuf_up[128];   //上半部分显存128字节
  139. xdata uchar disbuf_dw[128];   //下半部分显存128字节
  140. void init_sys()         //系统初始化
  141. {
  142. P1M0=0x05;         //LED、蜂鸣器驱动端口初始化
  143. P1M1=0x09;  //
  144. P0M0=0x0f;
  145. P2M0=0x08;
  146. TMOD=0x10;         //系统指示定时器
  147. TL1=0xb0;         //置初值
  148. TH1=0x3c;
  149. TR1=1;                   //运行定时器1
  150. ET1=1;                   //打开定时器中断1
  151. EA=1;                 //打开总中断
  152. P0=0;
  153. CE=0;
  154. SCLK=0;
  155. STR=0;
  156. OE=1; //关闭显示屏
  157. }
  158. void IR_init()        //红外遥控器初始化
  159. {
  160. TMOD|=0x09;  //定时器0门控方式
  161. IT0=1;                 //外部中断0下降沿触发方式
  162. EX0=1;                 //打开外部中断0
  163. ET0=0;                  //关闭定时器0中断
  164. }
  165. void sendbyte_RD(uchar dat1,uchar dat2)  //595驱动函数,RD1红色数据上半屏,RD2红色数据下半屏
  166. {
  167. uchar i;
  168.   for(i=8;i>0;i--)
  169. {
  170.     SCK=0;
  171.     dat1<<=1;
  172.         RD1=CY;
  173.         dat2<<=1;
  174.         RD2=CY;
  175.     SCK=1;
  176. }
  177. }
  178. void sendbyte_GD(uchar dat1,uchar dat2)  //595驱动函数,GD1绿色数据上半屏,GD2绿色数据下半屏
  179. {
  180. uchar i;
  181. for(i=8;i>0;i--)
  182. {
  183.     SCK=0;
  184.     dat1<<=1;
  185.         GD1=CY;
  186.         dat2<<=1;
  187.         GD2=CY;
  188.     SCK=1;
  189. }
  190. }
  191. void write_byte()         //1302写入一个字节汇编函数
  192. {
  193.   #pragma ASM
  194.   MOV R3,#8
  195.   LP1:
  196.   RRC A                                   //通过CY和累加器循环右移将数据写入1302
  197.   MOV IO,C
  198.   SETB SCLK
  199.   CLR SCLK
  200.   DJNZ R3,LP1
  201.   #pragma ENDASM
  202. }
  203. uchar read_byte()                //1302读取一个字节汇编函数
  204. {
  205.   #pragma ASM
  206.   MOV R3,#8
  207.   LP2:
  208.   MOV C,IO
  209.   RRC A
  210.   SETB SCLK
  211.   CLR SCLK
  212.   DJNZ R3,LP2
  213.   #pragma ENDASM
  214.   return ACC;
  215. }
  216. void w_dat(uchar add,uchar dat)         //1302单字节写入函数,用来处理一些简单数据
  217. {
  218.    CE=0;
  219.    SCLK=0;
  220.    CE=1;
  221.    ACC=add;
  222.    write_byte();
  223.    ACC=dat;
  224.    write_byte();
  225.     SCLK=1;
  226.         CE=0;
  227. }
  228. void readdata()          //1302突发模式读取一次数据
  229. {
  230.   uchar m;
  231.    CE=0;
  232.    SCLK=0;
  233.    CE=1;
  234.    ACC=0xbf;                //设置为突发模式
  235.    write_byte();         //命令写入1302芯片
  236.    for(m=0;m<7;m++)
  237.   {
  238.     clock_bcd[m]=read_byte(); //一次性将时钟信息全部读出
  239.   }
  240.    SCLK=1;
  241.         CE=0;
  242. }
  243. void writedat()           //1302突发模式写入时间数据函数
  244. {
  245. uchar m,tm;
  246. w_dat(0x8e,0x00);
  247.    CE=0;
  248.    SCLK=0;
  249.    CE=1;
  250.    ACC=0xbe;
  251. write_byte();
  252.   for(m=0;m<8;m++)
  253. {
  254.    tm=clock_bcd[m];
  255.    ACC=tm;
  256.    write_byte();
  257. }
  258.   SCLK=1;
  259.   CE=0;
  260.   w_dat(0x8e,0x80);
  261. }
  262. void init1302()                 //初始化1302
  263. {
  264.   uchar tp,tm;
  265.    readdata();
  266.   tm=clock_bcd[0];
  267.    if(tm==0x80)  //时间如果时间丢失上电初始化
  268. {
  269.            for(tp=0;tp<8;tp++)
  270.           {
  271.             clock_bcd[tp]=timer[tp]; //将初始化时间数据读入缓存
  272.           }
  273.    writedat();         //开始写入初始化时间数据
  274. }
  275. }
  276. void CLR_LED()        //清屏
  277. {
  278.   uchar cr;
  279.    for(cr=0;cr<128;cr++)
  280.   {
  281.     disbuf_up[cr]=0xff;
  282.         disbuf_dw[cr]=0xff;
  283.   }
  284. }
  285. void display_set() //调整状态显存刷新
  286. {
  287.      uchar re,ct,ht,hs,t;
  288.          ht=clock_bcd[2];
  289.           sk=ht&0x20;
  290.           ht&=0x1f;
  291.    for(re=0;re<16;re++)
  292. {
  293.    for(ct=0;ct<4;ct++)               
  294.    {
  295.      disbuf_up[ct+re*8]=tiao[ct+re*4];                 //显示调整两个字
  296.      disbuf_up[ct+re*8+4]=SET[ct+re*4+menu*64];        //显示菜单项目
  297.     }
  298.   }
  299.      switch(menu)                                        //调整项目,分别是年月日星期时分与时刻
  300. {
  301.    case 0:   for(re=0;re<16;re++)
  302.            {
  303.               disbuf_dw[re*8]=NUM1[2*16+re];
  304.               disbuf_dw[re*8+1]=NUM1[re];
  305.               disbuf_dw[re*8+2]=NUM1[clock_bcd[6]/16*16+re];
  306.               disbuf_dw[re*8+3]=NUM1[clock_bcd[6]%16*16+re];
  307.             } break;
  308.    case 1:
  309.              for(re=0;re<16;re++)
  310.            {
  311.               disbuf_dw[re*8]=NUM1[clock_bcd[4]/16*16+re];
  312.               disbuf_dw[re*8+1]=NUM1[clock_bcd[4]%16*16+re];
  313.             } break;
  314.    case 2:
  315.              for(re=0;re<16;re++)
  316.            {
  317.               disbuf_dw[re*8]=NUM1[clock_bcd[3]/16*16+re];
  318.               disbuf_dw[re*8+1]=NUM1[clock_bcd[3]%16*16+re];
  319.             } break;
  320.    case 3:
  321.              for(re=0;re<16;re++)
  322.            {
  323.                       for(ct=0;ct<2;ct++)
  324.                           {
  325.                disbuf_dw[re*8+ct]=WEK[clock_bcd[5]%16*32+re*2+ct];
  326.                            }
  327.             } break;
  328.    case 4:            
  329.               for(re=0;re<16;re++)
  330.            {
  331.               disbuf_dw[re*8]=NUM1[ht/16*16+re];
  332.               disbuf_dw[re*8+1]=NUM1[ht%16*16+re];
  333.             } break;  
  334.     case 5:            
  335.                             for(re=0;re<16;re++)
  336.            {
  337.               disbuf_dw[re*8]=NUM1[clock_bcd[1]/16*16+re];
  338.               disbuf_dw[re*8+1]=NUM1[clock_bcd[1]%16*16+re];
  339.             } break;
  340.         case 6:
  341.                      for(re=0;re<16;re++)
  342.              {
  343.                 for(ct=0;ct<4;ct++)
  344.                {
  345.                 disbuf_dw[ct+re*8]=shike[ct+re*4+sk*64];
  346.                }
  347.              } break;
  348.       }
  349.                      OE=0; //打开显示屏
  350.            for(hs=0;hs<16;hs++)
  351.           {
  352.                      STR=0;
  353.                     for(t=0;t<8;t++)
  354.                    {
  355.                      sendbyte_RD(disbuf_up[t+hs*8],0xff);   //列扫描
  356.                    }
  357.                  P0=hs;          //行扫描
  358.                    STR=1;
  359.                 }
  360.         for(hs=0;hs<16;hs++)
  361.          {
  362.                                         STR=0;
  363.                     for(t=0;t<8;t++)
  364.                    {
  365.                      sendbyte_GD(0xff,disbuf_dw[t+hs*8]);   //列扫描
  366.                    }
  367.                 P0=hs;          //行扫描
  368.                     STR=1;
  369.                 }
  370.                 OE=1; //关闭显示屏,防止出现亮度不均匀
  371. }
  372. void dis_ref_rd()                //红色显存刷新函数
  373. {
  374.    uchar r,temp;
  375.     temp=clock_bcd[2]&0x1f;  //舍弃小时标志位
  376.              for(r=0;r<16;r++)
  377.            {
  378.              if(temp/16)                         //屏蔽个位0
  379.              disbuf_up[r*8]=NUM1[temp/16*16+r];
  380.                  else
  381.                 disbuf_up[r*8]=0xff;
  382.              disbuf_up[r*8+1]=NUM1[temp%16*16+r];
  383.              disbuf_up[r*8+2]=COL[r];
  384.              disbuf_up[r*8+3]=NUM1[clock_bcd[1]/16*16+r];
  385.              disbuf_up[r*8+4]=NUM1[clock_bcd[1]%16*16+r];
  386.            }
  387.             for(r=0;r<8;r++)
  388.           {
  389.            disbuf_up[r*8+5]=0xff;            
  390.              if(clock_bcd[2]&0x20)
  391.             disbuf_up[r*8+6]=UPDW[r+8];
  392.                  else
  393.                 disbuf_up[r*8+6]=UPDW[r];
  394.             disbuf_up[r*8+7]=wuzi[r];
  395.              disbuf_up[r*8+69]=NUM2[clock_bcd[0]/16*8+r];
  396.                  disbuf_up[r*8+70]=NUM3[clock_bcd[0]%16*8+r];
  397.                 disbuf_up[r*8+71]=0xff;
  398.                   if(err)
  399.                 {
  400.                   disbuf_dw[r*8]=heng[r];
  401.              disbuf_dw[r*8+1]=heng[r];
  402.                 }
  403.                 else
  404.                 {
  405.              disbuf_dw[r*8]=NUM2[temp_val/10*8+r];
  406.              disbuf_dw[r*8+1]=NUM3[temp_val%10*8+r]&duzi[r];
  407.                 }
  408.              disbuf_dw[r*8+2]=czi[r];
  409.           }                    //以上对128字节显存进行刷新                                    
  410. }
  411. void dis_ref_gd()  //绿色显存刷新函数
  412. {
  413.    uchar r;
  414.    for(r=0;r<128;r++)
  415.   {
  416.     disbuf_up[r]=0xff;
  417.   }         
  418.     for(r=0;r<16;r++)
  419.   {
  420.      disbuf_dw[r*8+6]=NUM1[clock_bcd[3]/16*16+r];
  421.         disbuf_dw[r*8+7]=NUM1[clock_bcd[3]%16*16+r];
  422.   }
  423.       for(r=0;r<8;r++)
  424.   {
  425.     disbuf_up[r*8+71]=WEEK[clock_bcd[5]%16*8+r];
  426.         disbuf_dw[r*8+3]=0xff;
  427.         if(clock_bcd[4]/16)
  428.            disbuf_dw[r*8+4]=NUM2[clock_bcd[4]%16*8+r]&NUM0[r];
  429.            else
  430.           disbuf_dw[r*8+4]=NUM2[clock_bcd[4]%16*8+r];
  431.            disbuf_dw[r*8+5]=yuezi0[r];
  432.            if(months>=11)
  433.             disbuf_dw[r*8+64]=shizi[r];
  434.            else
  435.                   disbuf_dw[r*8+64]=0xff;
  436.            if(months==1)
  437.             disbuf_dw[r*8+65]=zhengzi[r];
  438.            else
  439.              if(months!=1)
  440.                   disbuf_dw[r*8+65]=nday[months%10*8+r];
  441.             disbuf_dw[r*8+66]=yuezi1[r];
  442.            if(days<=10)
  443.                  disbuf_dw[r*8+67]=chuzi[r];
  444.                  else
  445.             disbuf_dw[r*8+67]=nlsw[days/10*8+r];
  446.            disbuf_dw[r*8+68]=nday[days%10*8+r];
  447.            disbuf_dw[r*8+69]=0xff;
  448.    }
  449. }
  450. bit GetMoonDay(uchar month_p,unsigned short code_addr)          //农历日期调整
  451. {
  452. uchar temp,temp1;
  453. temp1=(month_p+3)/8;//当要查询的月份小于5,temp1=0,月份大于4,temp1=1
  454. temp=0x80>>((month_p+3)%8);//temp值由0x80(10000000)右移((month_p+3)%8)位
  455. temp=year_code[code_addr+temp1]&temp;//
  456. if(temp==0)
  457.   return(0);
  458. else
  459.   return(1);
  460. }

  461. void Conversion()         //农历转换函数
  462. {                        
  463.         uchar temp,temp1,temp2,temp3,month_p;
  464.         uchar year_t,month,day_t;
  465.         unsigned int   temp4,table_addr;
  466.         bit flag2,flag_y;
  467.           temp=clock_bcd[3];
  468.           day_t=(temp&0x0f)+((temp>>4)*10);
  469.      temp=clock_bcd[4];                                          ///转10进制进行处理
  470.       month=(temp&0x0f)+((temp>>4)*10);
  471.       temp=clock_bcd[6];
  472.       year_t=(temp&0x0f)+((temp>>4)*10);
  473.          table_addr=(year_t+0x64-1)*0x3;
  474.         temp1=year_code[table_addr+2]&0x60;
  475.         temp1>>=5;
  476.         //取当年春节所在的公历日
  477.         temp2=year_code[table_addr+2]&0x1f;
  478.         //取当年春节所在的公历日完成
  479.         //计算当年春年离当年元旦的天数,春节只会在公历1月或2月
  480.         if(temp1==0x1)         { temp3=temp2-1; }  
  481.            else                  { temp3=temp2+0x1f-1; }
  482.         if(month<10)        { temp4=day_code1[month-1]+day_t-1; }
  483.                 else             { temp4=day_code2[month-10]+day_t-1;}
  484.         if ((month>0x02)&&(year_t%0x04==0))
  485.                 temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
  486.         //计算公历日离当年元旦的天数完成         
  487.         //判断公历日在春节前还是春节后
  488.         if (temp4>=temp3)
  489.         {
  490.                 temp4-=temp3;
  491.                  month=0x1;
  492.                 month_p=0x1;  //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
  493.                 flag2=GetMoonDay(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
  494.                 flag_y=0;
  495.       if(flag2==0)temp1=0x1d;   //小月29天
  496.               else    temp1=0x1e;    //大月30天
  497.                 temp2=year_code[table_addr]&0xf0;
  498.                 temp2>>=4; //从数据表中取该年的闰月月份,如为0则该年无闰月
  499.                 while(temp4>=temp1)
  500.                 {
  501.                         temp4-=temp1; month_p+=1;
  502.                         if(month==temp2)
  503.                     {
  504.                                 flag_y=~flag_y;
  505.                  if(flag_y==0)month+=1;
  506.                         }
  507.                         else month+=1;
  508.                         flag2=GetMoonDay(month_p,table_addr);
  509.          if(flag2==0)temp1=0x1d;
  510.                  else    temp1=0x1e;
  511.                 }
  512.                 day_t=temp4+1;
  513.         }
  514.         else
  515.         {  
  516.                 temp3-=temp4;
  517.                 if (year_t==0){year_t=0x63;}
  518.                         else        year_t-=1;
  519.                 table_addr-=0x3;
  520.                 month=0xc;
  521.                 temp2=year_code[table_addr]&0xf0;
  522.                 temp2>>=4;
  523.                 if (temp2==0)month_p=0xc;
  524.                         else        month_p=0xd;
  525.                 flag_y=0;
  526.                 flag2=GetMoonDay(month_p,table_addr);
  527.                 if(flag2==0)temp1=0x1d;
  528.               else        temp1=0x1e;
  529.                 while(temp3>temp1)
  530.                 {
  531.                         temp3-=temp1;
  532.                         month_p-=1;
  533.                         if(flag_y==0)month-=1;
  534.          if(month==temp2)flag_y=~flag_y;
  535.          flag2=GetMoonDay(month_p,table_addr);
  536.          if(flag2==0)temp1=0x1d;
  537.             else        temp1=0x1e;
  538.                 }
  539.                 day_t=temp1-temp3+1;
  540.         }
  541.         months=month;
  542.         days=day_t;
  543. }
  544. void decoding()                  //遥控解码
  545. {
  546.        if(IR_END)        //4个字节处理完成
  547. {
  548.    IR_END=0;//处理完成,清标志
  549.               if(IRcode[0]==0xcc&&IRcode[1]==0x1d)
  550.            {
  551.               bon=2;
  552.                switch(IRcode[2])
  553.                  {
  554.                      case 0x02:setup=!setup;menu=0;CLR_LED();set_sec=0;break;  //进入与退出菜单
  555.                      case 0x07:set_sec=0;CLR_LED();if(menu==0)menu=6;else menu--;break; //菜单项目减
  556.                          case 0x08:set_sec=0;CLR_LED();menu++;if(menu==7)menu=0;break;         //菜单项目加
  557.                          case 0x05:set_sec=0;
  558.                                      switch(menu)          //数据加数
  559.                                            {
  560.                                              case 0:ACC=clock_bcd[6];
  561.                                    #pragma ASM
  562.                                     ADD A,#01H
  563.                                                                 DA A
  564.                                                        CJNE A,#99H,LP3
  565.                                                             MOV A,#01H
  566.                                                                 LP3:MOV B,A
  567.                                                                 #pragma ENDASM
  568.                                                           clock_bcd[6]=B;break;
  569.                                                  case 1:ACC=clock_bcd[4];
  570.                                     #pragma ASM
  571.                                     ADD A,#01H
  572.                                                                 DA A
  573.                                                         CJNE A,#13H,LP4
  574.                                                             MOV A,#01H
  575.                                                                 LP4:MOV B,A
  576.                                                                 #pragma ENDASM
  577.                                                            clock_bcd[4]=B;break;
  578.                                                  case 2:ACC=clock_bcd[3];
  579.                                     #pragma ASM
  580.                                     ADD A,#01H
  581.                                                                 DA A
  582.                                                         CJNE A,#32H,LP5
  583.                                                             MOV A,#01H
  584.                                                                 LP5:MOV B,A
  585.                                                                 #pragma ENDASM
  586.                                                            clock_bcd[3]=B;break;
  587.                                                 case 3:ACC=clock_bcd[5];
  588.                                     #pragma ASM
  589.                                     ADD A,#01H
  590.                                                                 DA A
  591.                                                         CJNE A,#08H,LP6
  592.                                                             MOV A,#01H
  593.                                                                 LP6:MOV B,A
  594.                                                                 #pragma ENDASM
  595.                                                            clock_bcd[5]=B;break;
  596.                                                    case 4:ACC=clock_bcd[2];
  597.                                                         ACC&=0x1f;
  598.                                     #pragma ASM
  599.                                     ADD A,#01H
  600.                                                                 DA A
  601.                                                         CJNE A,#13H,LP7
  602.                                                             MOV A,#01H
  603.                                                                 LP7:
  604.                                                                 ORL A,#80H
  605.                                                                 MOV B,A
  606.                                                                 #pragma ENDASM
  607.                                                            clock_bcd[2]=B;break;
  608.                                         case 5:ACC=clock_bcd[1];
  609.                                     #pragma ASM
  610.                                     ADD A,#01H
  611.                                                                 DA A
  612.                                                         CJNE A,#60H,LP8
  613.                                                             MOV A,#01H
  614.                                                                 LP8:MOV B,A
  615.                                                                 #pragma ENDASM
  616.                                                            clock_bcd[0]=0;
  617.                                                            clock_bcd[1]=B;break;
  618.                                           case 6:sk=!sk;if(sk)clock_bcd[2]|=0xa0;else clock_bcd[2]&=0x9f;break;
  619.                                           }break;
  620.                          case 0x06:set_sec=0;
  621.                                       switch(menu)         //数据减数
  622.                                            {
  623.                                              case 0:ACC=clock_bcd[6];
  624.                                    #pragma ASM
  625.                                                                 ADD A,#99H
  626.                                                                 DA A
  627.                                                                 CJNE A,#00H,NT1
  628.                                                 MOV A,#99H
  629.                                                                 NT1:
  630.                                                             MOV B,A
  631.                                                             #pragma ENDASM
  632.                                                             clock_bcd[6]=B;break;
  633.                                                  case 1:ACC=clock_bcd[4];
  634.                                    #pragma ASM
  635.                                                                 ADD A,#99H
  636.                                                                 DA A
  637.                                                             CJNE A,#00H,NT2
  638.                                                                 MOV A,#12H
  639.                                                                 NT2:
  640.                                                             MOV B,A
  641.                                                             #pragma ENDASM
  642.                                                             clock_bcd[4]=B;break;
  643.                                                  case 2:ACC=clock_bcd[3];
  644.                                    #pragma ASM
  645.                                                                 ADD A,#99H
  646.                                                                 DA A
  647.                                                             CJNE A,#00H,NT3
  648.                                                                 MOV A,#31H
  649.                                                                 NT3:
  650.                                                             MOV B,A
  651.                                                             #pragma ENDASM
  652.                                                             clock_bcd[3]=B;break;
  653.                                             case 3:ACC=clock_bcd[5];
  654.                                    #pragma ASM
  655.                                                                 ADD A,#99H
  656.                                                                 DA A
  657.                                                             CJNE A,#00H,NT4
  658.                                                                 MOV A,#07H
  659.                                                                 NT4:
  660.                                                             MOV B,A
  661.                                                             #pragma ENDASM
  662.                                                             clock_bcd[5]=B;break;
  663.                                            case 4:ACC=clock_bcd[2];
  664.                                                     ACC&=0x1f;
  665.                                    #pragma ASM
  666.                                                                 ADD A,#99H
  667.                                                                 DA A
  668.                                                             CJNE A,#00H,NT5
  669.                                                                 MOV A,#12H
  670.                                                                 NT5:
  671.                                                             ORL A,#80H
  672.                                                             MOV B,A
  673.                                                             #pragma ENDASM
  674.                                                             clock_bcd[2]=B;break;
  675.                                           case 5:ACC=clock_bcd[1];
  676.                                    #pragma ASM
  677.                                                                 ADD A,#99H
  678.                                                                 DA A
  679.                                                             CJNE A,#00H,NT6
  680.                                                                 MOV A,#59H
  681.                                                                 NT6:
  682.                                                             MOV B,A
  683.                                                             #pragma ENDASM
  684.                                                                 clock_bcd[0]=0;
  685.                                                             clock_bcd[1]=B;break;
  686.                                          case 6:sk=!sk;if(sk)clock_bcd[2]|=0xa0;else clock_bcd[2]&=0x9f;break;
  687.                                           }break;
  688.                         case 0x04:writedat();Conversion();set_sec=0;setup=0;menu=0;break;  //确定保存退出
  689.                    IRcode[0]=0;
  690.                   IRcode[1]=0;
  691.            IRcode[2]=0;
  692.            IRcode[3]=0;
  693.                   }
  694.            }
  695.   }
  696. }
  697. void display_time()         //显示函数
  698. {
  699.   uchar hs,t;
  700.     dis_ref_rd();                           //显示红色
  701.             OE=0; //打开显示屏
  702.               for(hs=0;hs<16;hs++)
  703.           {
  704.                  STR=0;
  705.                     for(t=0;t<8;t++)
  706.                    {
  707.                      sendbyte_RD(disbuf_up[t+hs*8],disbuf_dw[t+hs*8]);   //列扫描
  708.                    }
  709.                 P0=hs;          //行扫描
  710.                   STR=1;
  711.           }
  712.          dis_ref_gd();                                //显示绿色
  713.           for(hs=0;hs<16;hs++)
  714.           {
  715.                           STR=0;
  716.                     for(t=0;t<8;t++)
  717.                    {
  718.                      sendbyte_GD(disbuf_up[t+hs*8],disbuf_dw[t+hs*8]);   //列扫描
  719.                    }
  720.                    P0=hs;          //行扫描
  721.                    STR=1;
  722.                 }
  723.                 OE=1; //关闭显示屏,防止出现亮度不均匀
  724.                 CLR_LED();        //清屏
  725. }
  726. void delay(uchar n)
  727. {
  728.   while(--n);
  729. }
  730. void reset_18b20()
  731. {
  732.   DQ=0;
  733.    if(setup==0)           //进入设置其他功能禁止运行 ,这里顺便当成18B20延时函数
  734.    {
  735.      readdata();
  736.          display_time();         
  737.         }
  738.   else
  739.   display_set();
  740.   DQ=1;
  741.   delay(125);
  742.   if(DQ)
  743.   err=1;
  744.   while(!DQ);
  745. }
  746. void write_18b20(uchar dat)
  747. {
  748.    uchar i;
  749.     for(i=8;i>0;i--)
  750.   {
  751.    dat>>=1;
  752.    DQ=0;
  753.    DQ=CY;
  754.    delay(95);
  755.    DQ=1;
  756.   }
  757. }
  758. uchar read_18b20()
  759. {
  760.    uchar i,dat;
  761.     for(i=8;i>0;i--)
  762. {
  763.    dat>>=1;
  764.    DQ=1;
  765.    DQ=0;
  766.    DQ=1;
  767.    if(DQ)
  768.    dat|=0x80;
  769.    delay(95);
  770.   }
  771.   return dat;
  772. }
  773. void read_temp()
  774. {
  775.   uchar th,tl;
  776.   reset_18b20();
  777.   write_18b20(0xcc);
  778.   write_18b20(0x44);
  779.   reset_18b20();
  780.   write_18b20(0xcc);
  781.   write_18b20(0xbe);
  782.   tl=read_18b20();
  783.   th=read_18b20();
  784.   tl>>=4;
  785.   th<<=4;
  786.   temp_val=tl|th;
  787.   temp_val-=2;
  788. }
  789. void init_18b20()
  790. {
  791.   reset_18b20();
  792.   write_18b20(0xcc); //跳过匹配ROM
  793.   write_18b20(0x4e);  //写暂存器指令
  794.   write_18b20(0x70);  //写TH暂存器
  795.   write_18b20(0x01);   //写TL暂存器
  796.   write_18b20(0x7f);  //写配置暂存器,设置为9位精度,即0.5度步进
  797.   reset_18b20();
  798.   write_18b20(0xcc);
  799.   write_18b20(0x48); //写入内部EEPROM保存
  800.   reset_18b20();
  801. }                     
  802. void logo_dis()                  //厂标显示函数
  803. {
  804.   uchar d,t;
  805.   CLR_LED();
  806.   logo_sec=12;
  807.   bon=15;
  808.   while(logo_sec)
  809.   {
  810.        OE=0;
  811.              for(d=0;d<16;d++)
  812.          {
  813.            STR=0;
  814.             for(t=0;t<8;t++)
  815.            {
  816.             sendbyte_RD(LOGO[t+d*8],0xff);
  817.            }
  818.            P0=d;
  819.            STR=1;
  820.          }
  821.             for(d=0;d<16;d++)
  822.          {
  823.            STR=0;
  824.             for(t=0;t<8;t++)
  825.            {
  826.                 sendbyte_GD(0xff,LOGO[t+d*8+128]);
  827.            }
  828.            P0=d;
  829.            STR=1;
  830.          }
  831.      OE=1;
  832.   }
  833. }
  834. void SCAN_KEY()          //按键扫描
  835. {
  836.   if(KEY1==0)
  837. {
  838.    IR_END=1;
  839.    IRcode[0]=0xcc;
  840.    IRcode[1]=0x1d;
  841.    IRcode[2]=0x02;
  842. }
  843.    if(KEY2==0)
  844. {
  845.    IR_END=1;
  846.    IRcode[0]=0xcc;
  847.    IRcode[1]=0x1d;
  848.    IRcode[2]=0x08;
  849. }
  850.    if(KEY3==0)
  851. {
  852.     IR_END=1;
  853.    IRcode[0]=0xcc;
  854.    IRcode[1]=0x1d;
  855.    IRcode[2]=0x05;
  856. }
  857.    if(KEY4==0)
  858. {
  859.     IR_END=1;
  860.    IRcode[0]=0xcc;
  861.    IRcode[1]=0x1d;
  862.    IRcode[2]=0x04;
  863. }
  864. }
  865. void lau_con()
  866. {
  867.   uchar h_temp;
  868.            h_temp=clock_bcd[2];
  869.      if(h_temp==0x92)          //深夜12点转换一次农历
  870.      Conversion();
  871. }
  872. void main()          //主函数
  873. {
  874.   init_sys();
  875.   init1302();
  876. Conversion();
  877.   IR_init();
  878.   init_18b20();
  879.   logo_dis();
  880.    while(1)
  881. {
  882.    read_temp();
  883.    lau_con();
  884.    decoding();
  885.   }
  886. }
  887. void intt0() interrupt 0 using 1 //红外遥控器解码中断处理函数
  888. {
  889. static uchar i,j;  //计数变量
  890. uchar temp;         //临时存储字节变量
  891. TR0=1;                          //打开定时器
  892. ACC=TH0;                  //获取TH0的值
  893. TH0=0;                        //清零
  894. TL0=0;
  895. if(ACC==0x11)        //引导码识别
  896. {
  897.   IR_OK=1;           //收到引导码,标志置位
  898.   ACC=0;           //清除累加器
  899. }
  900.   if(IR_OK&&ACC!=0)                //如果收到引导码,并且累加器不为0,不是干扰,就开始接收4个字节数据
  901. {
  902.    if(ACC==0x06)  //识别位1,为06H说明是位1
  903.    {
  904.     temp|=0x80;          //高位置1
  905.    }
  906.     i++;                   //位数计数开始
  907.    if(i<8)                  //计数不为8继续移位
  908.    temp>>=1;   //开始移位接收数据
  909.   if(i==8)          //一个节节到?
  910.   {
  911.    i=0;                                 //位数计数清零
  912.    IRcode[j]=temp;  //准备接收下个字节
  913.    temp=0;           //清零临时数据,防止出现误码
  914.    j++;                        //字节计数开始
  915.   }
  916.   if(j==4)                 //4个字节到?
  917.   {
  918.    j=0;                        //计数清零
  919.    TR0=0;                 //关闭定时器
  920.    IR_OK=0;    //所有标志清零
  921.    IR_END=1;        //处理完成标志置1
  922.    }
  923. }
  924. }
  925. void timer1() interrupt 3 using 2        //定时器1用来产生定时信号
  926. {
  927.   uchar ms1,ms2;
  928.    ms1++;
  929.    ms2++;
  930.    if(ms1==4)
  931.   {
  932.     ms1=0;
  933.    SCAN_KEY();
  934.    }
  935.    if(bon)
  936. {
  937.    BEEP=0;
  938.    bon--;
  939. }
  940.   else
  941.   {
  942.    BEEP=1;
  943.    }
  944.    if(ms2==10)
  945. {
  946.    ms2=0;
  947.   LED=!LED;
  948.   if(logo_sec)
  949.   logo_sec--;
  950.   if(setup)
  951.   set_sec++;
  952. }
  953.   if(set_sec==50)
  954. {
  955.    set_sec=0;
  956.    setup=0;
  957.    bon=15;
  958.   }
  959. TL1=0xb0;
  960. TH1=0x3c;
  961. }
复制代码
回复

使用道具 举报

板凳
ID:167035 发表于 2017-3-8 09:36 | 只看该作者
好东西,我要学习!!!!!!!!!!!
回复

使用道具 举报

地板
ID:164988 发表于 2017-3-8 12:17 | 只看该作者
下载收藏,楼主辛苦 , 能写出这么大的程序,了不起,谢谢分享!
回复

使用道具 举报

5#
ID:164988 发表于 2017-3-8 12:18 | 只看该作者
谢谢分享,楼主辛苦了!
回复

使用道具 举报

6#
ID:130231 发表于 2017-3-8 13:04 | 只看该作者
不错哦,初来乍到,我的第一篇新帖子终于高手点评了,小弟实在感激。
回复

使用道具 举报

7#
ID:130231 发表于 2017-3-8 13:16 | 只看该作者
可是我还想知道原理图片是怎么样的。不然只能学习代码了
回复

使用道具 举报

8#
ID:104838 发表于 2017-3-9 02:52 | 只看该作者
谁能知道3264屏显示这个程序会全红亮,时间是绿色,能看到时间在跳动看上去模糊不清,显示屏用的是SM2451S和SM5166P及DP5020A求老师给个提示,谢谢
回复

使用道具 举报

9#
ID:160845 发表于 2017-3-9 07:52 | 只看该作者
请老师给详细的资料,谢谢!
回复

使用道具 举报

10#
ID:116826 发表于 2017-3-9 09:03 | 只看该作者
感谢楼主和管理员费心分享,mark一下,有机会搞到片子试制。
回复

使用道具 举报

11#
ID:88606 发表于 2017-3-12 10:51 | 只看该作者
看显示很不错的!
回复

使用道具 举报

12#
ID:291726 发表于 2018-3-14 11:35 | 只看该作者
效果不错
回复

使用道具 举报

13#
ID:143914 发表于 2018-8-14 17:33 | 只看该作者
有电路图没?
回复

使用道具 举报

14#
ID:164190 发表于 2019-1-3 16:55 | 只看该作者
谢谢分享。谢谢谢
回复

使用道具 举报

15#
ID:367948 发表于 2019-2-27 11:32 | 只看该作者
谢谢楼主,下载学习中
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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