IC解密电子万年历全部单片机程序
- IC解密#define _MAIN_C
- IC解密#include "config.h"
- IC解密#include "LCD1602.h"
- #include "DS1302.h"
- #include "DS18B20.h"
- #include "app.h"
- #include "Key_Buzzer.h"
- #include "main.h"
- bit flag1s = 0; //1s定时标志位
- bit flag200ms = 0; //200ms定时标志
- enum eStaSystem staSystem = E_NORMAL; //系统运行状态
- void main()
- {
- EA = 1; //开总中断
- Start18B20(); //启动温度转换
- Init_Timer0(); //初始化定时器0
- Init_LCD1602(); //LCD1602初始化
- //Init_DS1302(); //初始化DS1302
- while (!flag1s);//上电后延时1秒
- flag1s = 0;
- RefreshTime(); //刷新时间
- RefreshDate(1); //立即刷新日期
- RefreshTemp(1); //立即刷新温度显示
- while(1)
- {
- KeyDriver(); //按键检测
- if(flag200ms) //200ms时间到
- {
- flag200ms = 0; //清零标志位
- AlarmMonitor(); //监控闹钟
- if (staSystem == E_NORMAL)//如果系统正常运行
- {
- RefreshTime(); //刷新时间
- RefreshDate(0);//刷新日期
- }
- if (staSystem == Dis_Alarm)
- {
- RefreshLunar(); //刷新阴历
- }
- }
- if(flag1s && (staSystem == E_NORMAL))//1s时间到并且系统为正常运行
- {
- flag1s = 0;//清零标志位
- RefreshTemp(0);//刷新温度
- }
- }
- }
- /* 温度刷新函数,读取当前温度并根据需要刷新液晶显示,
- ** ops-刷新选项:为0时只当温度变化才刷新,非0则立即刷新 */
- void RefreshTemp(uint8 ops)
- {
- int16 temp;
- uint8 pdata str[8];
- static int16 backup = 0;
-
- Get18B20Temp(&temp); //获取当前温度值
- Start18B20(); //启动下一次转换
- temp >>= 4; //舍弃4bit小数位
- if ((backup!=temp) || (ops!=0)) //按需要刷新液晶显示
- {
- str[0] = (temp / 10) + '0'; //十位转为ASCII码
- str[1] = (temp % 10) + '0'; //个位转为ASCII码
- str[2] = '\''; //用'C代替℃
- str[3] = 'C';
- str[4] = '\0'; //字符串结束符
- LCD1602_Dis_Str(12, 1, str); //显示到液晶上
- backup = temp; //刷新上次温度值
- }
- }
- /*初始化定时器0 定时5ms*/
- void Init_Timer0()
- {
-
- TMOD = 0x01; //定时器16为计数工作模式
- TH0 =0xee;
- TL0 =0x00; //5ms
- ET0 = 1; //开定时器0中断
- TR0 = 1;//启动定时器0
- }

芯片解密