这是另一个版本的程序:
- #include <stc12c5a60s2.h>
- #define uchar unsigned char
- sbit LED=P1^0; //LED指示灯
- sbit BEEP=P1^2; //蜂鸣器
- sbit KEY1=P3^3; //按键
- sbit KEY2=P3^4;
- sbit KEY3=P3^5;
- sbit KEY4=P3^6;
- sbit DQ=P2^0; //18B20传感器
- sbit SCK=P2^1; //595时钟
- sbit STR=P2^2; //595锁存
- sbit RD1=P2^4; //红色数据上
- sbit RD2=P2^5; //红色数据下
- sbit GD1=P2^6; //绿色数据上
- sbit GD2=P2^7; //绿色数据下
- sbit OE=P2^3; //使能端 P0口低4位为行扫描
- sbit CE=P1^5; //DS1302片选
- sbit IO=P1^6; //DS1302数据
- sbit SCLK=P1^7; //DS1302时钟
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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};//厂标图片
- code uchar NUM0[]={0xBF,0x3F,0xBF,0xBF,0xBF,0xBF,0x1F,0xFF};//公历月数字前
- code uchar NUM1[]={0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
- 0xFF,0xFF,0xC3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xF3,0xC0,0xFF,0xFF,
- 0xFF,0xFF,0xC1,0x9C,0x9C,0x9C,0xF9,0xF3,0xE7,0xCF,0xDF,0x8C,0x94,0x99,0xFF,0xFF,
- 0xFF,0xFF,0x80,0x9C,0x99,0x99,0xF3,0xE3,0xF9,0xFC,0xFC,0x9C,0x99,0xC3,0xFF,0xFF,
- 0xFF,0xFF,0xF9,0xF1,0xF1,0xE1,0xE9,0xC9,0xD9,0x99,0x80,0xF9,0xF9,0xE0,0xFF,0xFF,
- 0xFF,0xFF,0x80,0x9C,0x9C,0x9F,0x83,0x99,0x9C,0xFC,0xFC,0x9C,0x99,0xC3,0xFF,0xFF,
- 0xFF,0xFF,0xE1,0xCC,0x9C,0x9F,0x83,0x89,0x9C,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
- 0xFF,0xFF,0x84,0x98,0x9C,0x9D,0xF9,0xF9,0xF9,0xF3,0xF3,0xF3,0xF3,0xF3,0xFF,0xFF,
- 0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0xC9,0xE3,0xC9,0x9C,0x9C,0x9C,0xC9,0xE3,0xFF,0xFF,
- 0xFF,0xFF,0xE3,0xC9,0x9C,0x9C,0x9C,0x9C,0xC8,0xE4,0xFC,0x9C,0x99,0xC3,0xFF,0xFF};//大数字
- 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,
- 0xF9,0xF6,0xFE,0xF9,0xFE,0xF6,0xF9,0xFF,0xFD,0xF9,0xF9,0xF5,0xF5,0xF0,0xFD,0xFF,0xF0,0xF7,0xF7,0xF1,0xFE,0xFE,0xF1,0xFF,
- 0xF9,0xF6,0xF7,0xF1,0xF6,0xF6,0xF9,0xFF,0xF0,0xF6,0xFE,0xFD,0xFB,0xFB,0xFB,0xFF,0xF9,0xF6,0xF6,0xF9,0xF6,0xF6,0xF9,0xFF,
- 0xF9,0xF6,0xF6,0xF8,0xFE,0xF6,0xF9,0xFF};//小数字前
- 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,
- 0xCF,0xB7,0xF7,0xCF,0xF7,0xB7,0xCF,0xFF,0xEF,0xCF,0xCF,0xAF,0xAF,0x87,0xEF,0xFF,0x87,0xBF,0xBF,0x8F,0xF7,0xF7,0x8F,0xFF,
- 0xCF,0xB7,0xBF,0x8F,0xB7,0xB7,0xCF,0xFF,0x87,0xB7,0xF7,0xEF,0xDF,0xDF,0xDF,0xFF,0xCF,0xB7,0xB7,0xCF,0xB7,0xB7,0xCF,0xFF,
- 0xCF,0xB7,0xB7,0xC7,0xF7,0xB7,0xCF,0xFF}; //小数字后
- code uchar WEEK[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,
- 0xFF,0xFF,0xC3,0xFF,0xFF,0x81,0xFF,0xFF,
- 0xFF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,0xFF,
- 0xFF,0x00,0x6A,0x18,0x7E,0x7E,0x00,0xFF,
- 0xFF,0xC3,0xF7,0xC1,0xF5,0xF5,0x80,0xFF,
- 0xFF,0xF7,0x81,0xFF,0xDB,0xBD,0xFF,0xFF,
- 0xFF,0x81,0xBD,0xBD,0x81,0xBD,0xBD,0x81}; //小字星期
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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}; //大字星期
- code uchar tiao[]={0xFF,0xFF,0xF7,0xDF,0xB8,0x03,0xF7,0xDF,0xDB,0xBB,0x00,0x41,0xDB,0xBB,0xF7,0xBB,
- 0xFA,0x0B,0x80,0x5B,0xFB,0xBB,0xB6,0xDB,0x1B,0xBB,0x80,0xD7,0xD8,0x03,0xD5,0xEF,
- 0xDB,0xFB,0xB6,0xD7,0xDA,0x0B,0xF7,0xF9,0xDA,0xEB,0xFF,0xFF,0xD2,0xEB,0x80,0x03,
- 0xCA,0x0B,0xFE,0xFF,0xDB,0xFB,0xEE,0x3F,0xFB,0xEB,0xEE,0xFF,0xF7,0xF7,0x00,0x01};//调整
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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};//设置文字切换
- 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,
- 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,
- 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,
- 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};//大字上下午
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 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,
- 0x2d,0x92,0xB5};//农历年份调整数组
- code uchar day_code1[]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};//农历日期调整
- code unsigned short day_code2[3]={0x111,0x130,0x14e}; //农历日期调整2
- code uchar heng[]={0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF};//横杆
- code uchar UPDW[]={0xFF,0xEF,0xE3,0xEF,0xEF,0xEF,0x81,0xFF,0xFF,0x81,0xEF,0xE7,0xEB,0xEF,0xEF,0xFF}; //上下午
- code uchar COL[]={0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF}; //冒号
- code uchar wuzi[]={0xFF,0xEF,0xC3,0xF7,0x81,0xF7,0xF7,0xF7}; //午字
- code uchar czi[]={0xFF,0xC7,0xBB,0xBF,0xBF,0xBB,0xC7,0xFF};//C字
- code uchar duzi[]={0xFF,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF};//度字
- code uchar yuezi0[]={0xE0,0xEE,0xE0,0xEE,0xE0,0xEE,0xDE,0xBC};
- code uchar yuezi1[]={0xC1,0xDD,0xC1,0xDD,0xC1,0xDD,0xBD,0x79}; //月字
- code uchar rizi[]={0x81,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0x81}; //日字
- code uchar timer[]={0x30,0x10,0xa9,0x20,0x11,0x04,0x14,0x0b}; //初始化时间数据
- code uchar shizi[]={0xFF,0xEF,0xEF,0x83,0xEF,0xEF,0xEF,0xFF}; //农历月十位,十字
- code uchar zhengzi[]={0xFF,0xC1,0xF7,0xF3,0xD7,0xD7,0x80,0xFF};//农历月个位,正字
- code uchar chuzi[]={0xBF,0x10,0xDA,0x9A,0x2A,0xBA,0xB6,0xAC}; //初字
- 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,
- 0xFF,0xC3,0xFF,0xE7,0xFF,0xFF,0x81,0xFF };//空,十,二,三
- 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,
- 0xFF,0xFF,0xC3,0xFF,0xE7,0xFF,0x81,0xFF,0xFF,0x80,0xAA,0x98,0xBE,0xBE,0x80,0xFF,0xFF,0xE3,0xF7,0xC1,0xF5,0xF5,0x80,0xFF,
- 0xFF,0xF7,0x81,0xFF,0xDB,0xBD,0xFF,0xFF,0xFF,0xEF,0x81,0xEF,0xEF,0xED,0xF1,0xFF,0xFF,0xDF,0xDB,0xDB,0xDB,0xBD,0x7E,0xFF,
- 0xFF,0xEF,0x83,0xEB,0xEB,0xEB,0x98,0xFF};//十,一到九
- uchar IRcode[4];
- bit IR_OK,IR_END;
- uchar bon,logo_sec,set_sec; //厂标所需变量
- uchar months,days; //农历月份与日期
- uchar menu; //菜单级数
- uchar temp_val; //温度变
- bit setup=0,sk; //厂标显示开关,上下午标志
- bit err=0; //18b20故障标志
- uchar clock_bcd[8]; //1302时钟BCD数据
- xdata uchar disbuf_up[128]; //上半部分显存128字节
- xdata uchar disbuf_dw[128]; //下半部分显存128字节
- void init_sys() //系统初始化
- {
- P1M0=0x05; //LED、蜂鸣器驱动端口初始化
- P1M1=0x09; //
- P0M0=0x0f;
- P2M0=0x08;
- TMOD=0x10; //系统指示定时器
- TL1=0xb0; //置初值
- TH1=0x3c;
- TR1=1; //运行定时器1
- ET1=1; //打开定时器中断1
- EA=1; //打开总中断
- P0=0;
- CE=0;
- SCLK=0;
- STR=0;
- OE=1; //关闭显示屏
- }
- void IR_init() //红外遥控器初始化
- {
- TMOD|=0x09; //定时器0门控方式
- IT0=1; //外部中断0下降沿触发方式
- EX0=1; //打开外部中断0
- ET0=0; //关闭定时器0中断
- }
- void sendbyte_RD(uchar dat1,uchar dat2) //595驱动函数,RD1红色数据上半屏,RD2红色数据下半屏
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- SCK=0;
- dat1<<=1;
- RD1=CY;
- dat2<<=1;
- RD2=CY;
- SCK=1;
- }
- }
- void sendbyte_GD(uchar dat1,uchar dat2) //595驱动函数,GD1绿色数据上半屏,GD2绿色数据下半屏
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- SCK=0;
- dat1<<=1;
- GD1=CY;
- dat2<<=1;
- GD2=CY;
- SCK=1;
- }
- }
- void write_byte() //1302写入一个字节汇编函数
- {
- #pragma ASM
- MOV R3,#8
- LP1:
- RRC A //通过CY和累加器循环右移将数据写入1302
- MOV IO,C
- SETB SCLK
- CLR SCLK
- DJNZ R3,LP1
- #pragma ENDASM
- }
- uchar read_byte() //1302读取一个字节汇编函数
- {
- #pragma ASM
- MOV R3,#8
- LP2:
- MOV C,IO
- RRC A
- SETB SCLK
- CLR SCLK
- DJNZ R3,LP2
- #pragma ENDASM
- return ACC;
- }
- void w_dat(uchar add,uchar dat) //1302单字节写入函数,用来处理一些简单数据
- {
- CE=0;
- SCLK=0;
- CE=1;
- ACC=add;
- write_byte();
- ACC=dat;
- write_byte();
- SCLK=1;
- CE=0;
- }
- void readdata() //1302突发模式读取一次数据
- {
- uchar m;
- CE=0;
- SCLK=0;
- CE=1;
- ACC=0xbf; //设置为突发模式
- write_byte(); //命令写入1302芯片
- for(m=0;m<7;m++)
- {
- clock_bcd[m]=read_byte(); //一次性将时钟信息全部读出
- }
- SCLK=1;
- CE=0;
- }
- void writedat() //1302突发模式写入时间数据函数
- {
- uchar m,tm;
- w_dat(0x8e,0x00);
- CE=0;
- SCLK=0;
- CE=1;
- ACC=0xbe;
- write_byte();
- for(m=0;m<8;m++)
- {
- tm=clock_bcd[m];
- ACC=tm;
- write_byte();
- }
- SCLK=1;
- CE=0;
- w_dat(0x8e,0x80);
- }
- void init1302() //初始化1302
- {
- uchar tp,tm;
- readdata();
- tm=clock_bcd[0];
- if(tm==0x80) //时间如果时间丢失上电初始化
- {
- for(tp=0;tp<8;tp++)
- {
- clock_bcd[tp]=timer[tp]; //将初始化时间数据读入缓存
- }
- writedat(); //开始写入初始化时间数据
- }
- }
- void CLR_LED() //清屏
- {
- uchar cr;
- for(cr=0;cr<128;cr++)
- {
- disbuf_up[cr]=0xff;
- disbuf_dw[cr]=0xff;
- }
- }
- void display_set() //调整状态显存刷新
- {
- uchar re,ct,ht,hs,t;
- ht=clock_bcd[2];
- sk=ht&0x20;
- ht&=0x1f;
- for(re=0;re<16;re++)
- {
- for(ct=0;ct<4;ct++)
- {
- disbuf_up[ct+re*8]=tiao[ct+re*4]; //显示调整两个字
- disbuf_up[ct+re*8+4]=SET[ct+re*4+menu*64]; //显示菜单项目
- }
- }
- switch(menu) //调整项目,分别是年月日星期时分与时刻
- {
- case 0: for(re=0;re<16;re++)
- {
- disbuf_dw[re*8]=NUM1[2*16+re];
- disbuf_dw[re*8+1]=NUM1[re];
- disbuf_dw[re*8+2]=NUM1[clock_bcd[6]/16*16+re];
- disbuf_dw[re*8+3]=NUM1[clock_bcd[6]%16*16+re];
- } break;
- case 1:
- for(re=0;re<16;re++)
- {
- disbuf_dw[re*8]=NUM1[clock_bcd[4]/16*16+re];
- disbuf_dw[re*8+1]=NUM1[clock_bcd[4]%16*16+re];
- } break;
- case 2:
- for(re=0;re<16;re++)
- {
- disbuf_dw[re*8]=NUM1[clock_bcd[3]/16*16+re];
- disbuf_dw[re*8+1]=NUM1[clock_bcd[3]%16*16+re];
- } break;
- case 3:
- for(re=0;re<16;re++)
- {
- for(ct=0;ct<2;ct++)
- {
- disbuf_dw[re*8+ct]=WEK[clock_bcd[5]%16*32+re*2+ct];
- }
- } break;
- case 4:
- for(re=0;re<16;re++)
- {
- disbuf_dw[re*8]=NUM1[ht/16*16+re];
- disbuf_dw[re*8+1]=NUM1[ht%16*16+re];
- } break;
- case 5:
- for(re=0;re<16;re++)
- {
- disbuf_dw[re*8]=NUM1[clock_bcd[1]/16*16+re];
- disbuf_dw[re*8+1]=NUM1[clock_bcd[1]%16*16+re];
- } break;
- case 6:
- for(re=0;re<16;re++)
- {
- for(ct=0;ct<4;ct++)
- {
- disbuf_dw[ct+re*8]=shike[ct+re*4+sk*64];
- }
- } break;
- }
- OE=0; //打开显示屏
- for(hs=0;hs<16;hs++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_RD(disbuf_up[t+hs*8],0xff); //列扫描
- }
- P0=hs; //行扫描
- STR=1;
- }
- for(hs=0;hs<16;hs++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_GD(0xff,disbuf_dw[t+hs*8]); //列扫描
- }
- P0=hs; //行扫描
- STR=1;
- }
- OE=1; //关闭显示屏,防止出现亮度不均匀
- }
- void dis_ref_rd() //红色显存刷新函数
- {
- uchar r,temp;
- temp=clock_bcd[2]&0x1f; //舍弃小时标志位
- for(r=0;r<16;r++)
- {
- if(temp/16) //屏蔽个位0
- disbuf_up[r*8]=NUM1[temp/16*16+r];
- else
- disbuf_up[r*8]=0xff;
- disbuf_up[r*8+1]=NUM1[temp%16*16+r];
- disbuf_up[r*8+2]=COL[r];
- disbuf_up[r*8+3]=NUM1[clock_bcd[1]/16*16+r];
- disbuf_up[r*8+4]=NUM1[clock_bcd[1]%16*16+r];
- }
- for(r=0;r<8;r++)
- {
- disbuf_up[r*8+5]=0xff;
- if(clock_bcd[2]&0x20)
- disbuf_up[r*8+6]=UPDW[r+8];
- else
- disbuf_up[r*8+6]=UPDW[r];
- disbuf_up[r*8+7]=wuzi[r];
- disbuf_up[r*8+69]=NUM2[clock_bcd[0]/16*8+r];
- disbuf_up[r*8+70]=NUM3[clock_bcd[0]%16*8+r];
- disbuf_up[r*8+71]=0xff;
- if(err)
- {
- disbuf_dw[r*8]=heng[r];
- disbuf_dw[r*8+1]=heng[r];
- }
- else
- {
- disbuf_dw[r*8]=NUM2[temp_val/10*8+r];
- disbuf_dw[r*8+1]=NUM3[temp_val%10*8+r]&duzi[r];
- }
- disbuf_dw[r*8+2]=czi[r];
- } //以上对128字节显存进行刷新
- }
- void dis_ref_gd() //绿色显存刷新函数
- {
- uchar r;
- for(r=0;r<128;r++)
- {
- disbuf_up[r]=0xff;
- }
- for(r=0;r<16;r++)
- {
- disbuf_dw[r*8+6]=NUM1[clock_bcd[3]/16*16+r];
- disbuf_dw[r*8+7]=NUM1[clock_bcd[3]%16*16+r];
- }
- for(r=0;r<8;r++)
- {
- disbuf_up[r*8+71]=WEEK[clock_bcd[5]%16*8+r];
- disbuf_dw[r*8+3]=0xff;
- if(clock_bcd[4]/16)
- disbuf_dw[r*8+4]=NUM2[clock_bcd[4]%16*8+r]&NUM0[r];
- else
- disbuf_dw[r*8+4]=NUM2[clock_bcd[4]%16*8+r];
- disbuf_dw[r*8+5]=yuezi0[r];
- if(months>=11)
- disbuf_dw[r*8+64]=shizi[r];
- else
- disbuf_dw[r*8+64]=0xff;
- if(months==1)
- disbuf_dw[r*8+65]=zhengzi[r];
- else
- if(months!=1)
- disbuf_dw[r*8+65]=nday[months%10*8+r];
- disbuf_dw[r*8+66]=yuezi1[r];
- if(days<=10)
- disbuf_dw[r*8+67]=chuzi[r];
- else
- disbuf_dw[r*8+67]=nlsw[days/10*8+r];
- disbuf_dw[r*8+68]=nday[days%10*8+r];
- disbuf_dw[r*8+69]=0xff;
- }
- }
- bit GetMoonDay(uchar month_p,unsigned short code_addr) //农历日期调整
- {
- uchar temp,temp1;
- temp1=(month_p+3)/8;//当要查询的月份小于5,temp1=0,月份大于4,temp1=1
- temp=0x80>>((month_p+3)%8);//temp值由0x80(10000000)右移((month_p+3)%8)位
- temp=year_code[code_addr+temp1]&temp;//
- if(temp==0)
- return(0);
- else
- return(1);
- }
- void Conversion() //农历转换函数
- {
- uchar temp,temp1,temp2,temp3,month_p;
- uchar year_t,month,day_t;
- unsigned int temp4,table_addr;
- bit flag2,flag_y;
- temp=clock_bcd[3];
- day_t=(temp&0x0f)+((temp>>4)*10);
- temp=clock_bcd[4]; ///转10进制进行处理
- month=(temp&0x0f)+((temp>>4)*10);
- temp=clock_bcd[6];
- year_t=(temp&0x0f)+((temp>>4)*10);
- table_addr=(year_t+0x64-1)*0x3;
- temp1=year_code[table_addr+2]&0x60;
- temp1>>=5;
- //取当年春节所在的公历日
- temp2=year_code[table_addr+2]&0x1f;
- //取当年春节所在的公历日完成
- //计算当年春年离当年元旦的天数,春节只会在公历1月或2月
- if(temp1==0x1) { temp3=temp2-1; }
- else { temp3=temp2+0x1f-1; }
- if(month<10) { temp4=day_code1[month-1]+day_t-1; }
- else { temp4=day_code2[month-10]+day_t-1;}
- if ((month>0x02)&&(year_t%0x04==0))
- temp4+=1; //如果公历月大于2月并且该年的2月为闰月,天数加1
- //计算公历日离当年元旦的天数完成
- //判断公历日在春节前还是春节后
- if (temp4>=temp3)
- {
- temp4-=temp3;
- month=0x1;
- month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月
- flag2=GetMoonDay(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0
- flag_y=0;
- if(flag2==0)temp1=0x1d; //小月29天
- else temp1=0x1e; //大月30天
- temp2=year_code[table_addr]&0xf0;
- temp2>>=4; //从数据表中取该年的闰月月份,如为0则该年无闰月
- while(temp4>=temp1)
- {
- temp4-=temp1; month_p+=1;
- if(month==temp2)
- {
- flag_y=~flag_y;
- if(flag_y==0)month+=1;
- }
- else month+=1;
- flag2=GetMoonDay(month_p,table_addr);
- if(flag2==0)temp1=0x1d;
- else temp1=0x1e;
- }
- day_t=temp4+1;
- }
- else
- {
- temp3-=temp4;
- if (year_t==0){year_t=0x63;}
- else year_t-=1;
- table_addr-=0x3;
- month=0xc;
- temp2=year_code[table_addr]&0xf0;
- temp2>>=4;
- if (temp2==0)month_p=0xc;
- else month_p=0xd;
- flag_y=0;
- flag2=GetMoonDay(month_p,table_addr);
- if(flag2==0)temp1=0x1d;
- else temp1=0x1e;
- while(temp3>temp1)
- {
- temp3-=temp1;
- month_p-=1;
- if(flag_y==0)month-=1;
- if(month==temp2)flag_y=~flag_y;
- flag2=GetMoonDay(month_p,table_addr);
- if(flag2==0)temp1=0x1d;
- else temp1=0x1e;
- }
- day_t=temp1-temp3+1;
- }
- months=month;
- days=day_t;
- }
- void decoding() //遥控解码
- {
- if(IR_END) //4个字节处理完成
- {
- IR_END=0;//处理完成,清标志
- if(IRcode[0]==0xcc&&IRcode[1]==0x1d)
- {
- bon=2;
- switch(IRcode[2])
- {
- case 0x02:setup=!setup;menu=0;CLR_LED();set_sec=0;break; //进入与退出菜单
- case 0x07:set_sec=0;CLR_LED();if(menu==0)menu=6;else menu--;break; //菜单项目减
- case 0x08:set_sec=0;CLR_LED();menu++;if(menu==7)menu=0;break; //菜单项目加
- case 0x05:set_sec=0;
- switch(menu) //数据加数
- {
- case 0:ACC=clock_bcd[6];
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#99H,LP3
- MOV A,#01H
- LP3:MOV B,A
- #pragma ENDASM
- clock_bcd[6]=B;break;
- case 1:ACC=clock_bcd[4];
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#13H,LP4
- MOV A,#01H
- LP4:MOV B,A
- #pragma ENDASM
- clock_bcd[4]=B;break;
- case 2:ACC=clock_bcd[3];
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#32H,LP5
- MOV A,#01H
- LP5:MOV B,A
- #pragma ENDASM
- clock_bcd[3]=B;break;
- case 3:ACC=clock_bcd[5];
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#08H,LP6
- MOV A,#01H
- LP6:MOV B,A
- #pragma ENDASM
- clock_bcd[5]=B;break;
- case 4:ACC=clock_bcd[2];
- ACC&=0x1f;
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#13H,LP7
- MOV A,#01H
- LP7:
- ORL A,#80H
- MOV B,A
- #pragma ENDASM
- clock_bcd[2]=B;break;
- case 5:ACC=clock_bcd[1];
- #pragma ASM
- ADD A,#01H
- DA A
- CJNE A,#60H,LP8
- MOV A,#01H
- LP8:MOV B,A
- #pragma ENDASM
- clock_bcd[0]=0;
- clock_bcd[1]=B;break;
- case 6:sk=!sk;if(sk)clock_bcd[2]|=0xa0;else clock_bcd[2]&=0x9f;break;
- }break;
- case 0x06:set_sec=0;
- switch(menu) //数据减数
- {
- case 0:ACC=clock_bcd[6];
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT1
- MOV A,#99H
- NT1:
- MOV B,A
- #pragma ENDASM
- clock_bcd[6]=B;break;
- case 1:ACC=clock_bcd[4];
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT2
- MOV A,#12H
- NT2:
- MOV B,A
- #pragma ENDASM
- clock_bcd[4]=B;break;
- case 2:ACC=clock_bcd[3];
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT3
- MOV A,#31H
- NT3:
- MOV B,A
- #pragma ENDASM
- clock_bcd[3]=B;break;
- case 3:ACC=clock_bcd[5];
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT4
- MOV A,#07H
- NT4:
- MOV B,A
- #pragma ENDASM
- clock_bcd[5]=B;break;
- case 4:ACC=clock_bcd[2];
- ACC&=0x1f;
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT5
- MOV A,#12H
- NT5:
- ORL A,#80H
- MOV B,A
- #pragma ENDASM
- clock_bcd[2]=B;break;
- case 5:ACC=clock_bcd[1];
- #pragma ASM
- ADD A,#99H
- DA A
- CJNE A,#00H,NT6
- MOV A,#59H
- NT6:
- MOV B,A
- #pragma ENDASM
- clock_bcd[0]=0;
- clock_bcd[1]=B;break;
- case 6:sk=!sk;if(sk)clock_bcd[2]|=0xa0;else clock_bcd[2]&=0x9f;break;
- }break;
- case 0x04:writedat();Conversion();set_sec=0;setup=0;menu=0;break; //确定保存退出
- IRcode[0]=0;
- IRcode[1]=0;
- IRcode[2]=0;
- IRcode[3]=0;
- }
- }
- }
- }
- void display_time() //显示函数
- {
- uchar hs,t;
- dis_ref_rd(); //显示红色
- OE=0; //打开显示屏
- for(hs=0;hs<16;hs++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_RD(disbuf_up[t+hs*8],disbuf_dw[t+hs*8]); //列扫描
- }
- P0=hs; //行扫描
- STR=1;
- }
- dis_ref_gd(); //显示绿色
- for(hs=0;hs<16;hs++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_GD(disbuf_up[t+hs*8],disbuf_dw[t+hs*8]); //列扫描
- }
- P0=hs; //行扫描
- STR=1;
- }
- OE=1; //关闭显示屏,防止出现亮度不均匀
- CLR_LED(); //清屏
- }
- void delay(uchar n)
- {
- while(--n);
- }
- void reset_18b20()
- {
- DQ=0;
- if(setup==0) //进入设置其他功能禁止运行 ,这里顺便当成18B20延时函数
- {
- readdata();
- display_time();
- }
- else
- display_set();
- DQ=1;
- delay(125);
- if(DQ)
- err=1;
- while(!DQ);
- }
- void write_18b20(uchar dat)
- {
- uchar i;
- for(i=8;i>0;i--)
- {
- dat>>=1;
- DQ=0;
- DQ=CY;
- delay(95);
- DQ=1;
- }
- }
- uchar read_18b20()
- {
- uchar i,dat;
- for(i=8;i>0;i--)
- {
- dat>>=1;
- DQ=1;
- DQ=0;
- DQ=1;
- if(DQ)
- dat|=0x80;
- delay(95);
- }
- return dat;
- }
- void read_temp()
- {
- uchar th,tl;
- reset_18b20();
- write_18b20(0xcc);
- write_18b20(0x44);
- reset_18b20();
- write_18b20(0xcc);
- write_18b20(0xbe);
- tl=read_18b20();
- th=read_18b20();
- tl>>=4;
- th<<=4;
- temp_val=tl|th;
- temp_val-=2;
- }
- void init_18b20()
- {
- reset_18b20();
- write_18b20(0xcc); //跳过匹配ROM
- write_18b20(0x4e); //写暂存器指令
- write_18b20(0x70); //写TH暂存器
- write_18b20(0x01); //写TL暂存器
- write_18b20(0x7f); //写配置暂存器,设置为9位精度,即0.5度步进
- reset_18b20();
- write_18b20(0xcc);
- write_18b20(0x48); //写入内部EEPROM保存
- reset_18b20();
- }
- void logo_dis() //厂标显示函数
- {
- uchar d,t;
- CLR_LED();
- logo_sec=12;
- bon=15;
- while(logo_sec)
- {
- OE=0;
- for(d=0;d<16;d++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_RD(LOGO[t+d*8],0xff);
- }
- P0=d;
- STR=1;
- }
- for(d=0;d<16;d++)
- {
- STR=0;
- for(t=0;t<8;t++)
- {
- sendbyte_GD(0xff,LOGO[t+d*8+128]);
- }
- P0=d;
- STR=1;
- }
- OE=1;
- }
- }
- void SCAN_KEY() //按键扫描
- {
- if(KEY1==0)
- {
- IR_END=1;
- IRcode[0]=0xcc;
- IRcode[1]=0x1d;
- IRcode[2]=0x02;
- }
- if(KEY2==0)
- {
- IR_END=1;
- IRcode[0]=0xcc;
- IRcode[1]=0x1d;
- IRcode[2]=0x08;
- }
- if(KEY3==0)
- {
- IR_END=1;
- IRcode[0]=0xcc;
- IRcode[1]=0x1d;
- IRcode[2]=0x05;
- }
- if(KEY4==0)
- {
- IR_END=1;
- IRcode[0]=0xcc;
- IRcode[1]=0x1d;
- IRcode[2]=0x04;
- }
- }
- void lau_con()
- {
- uchar h_temp;
- h_temp=clock_bcd[2];
- if(h_temp==0x92) //深夜12点转换一次农历
- Conversion();
- }
- void main() //主函数
- {
- init_sys();
- init1302();
- Conversion();
- IR_init();
- init_18b20();
- logo_dis();
- while(1)
- {
- read_temp();
- lau_con();
- decoding();
- }
- }
- void intt0() interrupt 0 using 1 //红外遥控器解码中断处理函数
- {
- static uchar i,j; //计数变量
- uchar temp; //临时存储字节变量
- TR0=1; //打开定时器
- ACC=TH0; //获取TH0的值
- TH0=0; //清零
- TL0=0;
- if(ACC==0x11) //引导码识别
- {
- IR_OK=1; //收到引导码,标志置位
- ACC=0; //清除累加器
- }
- if(IR_OK&&ACC!=0) //如果收到引导码,并且累加器不为0,不是干扰,就开始接收4个字节数据
- {
- if(ACC==0x06) //识别位1,为06H说明是位1
- {
- temp|=0x80; //高位置1
- }
- i++; //位数计数开始
- if(i<8) //计数不为8继续移位
- temp>>=1; //开始移位接收数据
- if(i==8) //一个节节到?
- {
- i=0; //位数计数清零
- IRcode[j]=temp; //准备接收下个字节
- temp=0; //清零临时数据,防止出现误码
- j++; //字节计数开始
- }
- if(j==4) //4个字节到?
- {
- j=0; //计数清零
- TR0=0; //关闭定时器
- IR_OK=0; //所有标志清零
- IR_END=1; //处理完成标志置1
- }
- }
- }
- void timer1() interrupt 3 using 2 //定时器1用来产生定时信号
- {
- uchar ms1,ms2;
- ms1++;
- ms2++;
- if(ms1==4)
- {
- ms1=0;
- SCAN_KEY();
- }
- if(bon)
- {
- BEEP=0;
- bon--;
- }
- else
- {
- BEEP=1;
- }
- if(ms2==10)
- {
- ms2=0;
- LED=!LED;
- if(logo_sec)
- logo_sec--;
- if(setup)
- set_sec++;
- }
- if(set_sec==50)
- {
- set_sec=0;
- setup=0;
- bon=15;
- }
- TL1=0xb0;
- TH1=0x3c;
- }
复制代码 |