標(biāo)題:
電子萬年歷全部單片機(jī)程序
[打印本頁]
作者:
1——212
時間:
2017-12-6 08:51
標(biāo)題:
電子萬年歷全部單片機(jī)程序
單片機(jī)源程序如下:
/*********************************************************************************
* 【實(shí)驗(yàn)平臺】: QX-MCS51 單片機(jī)開發(fā)板
* 【外部晶振】: 11.0592mhz
* 【主控芯片】: STC89C52
* 【編譯環(huán)境】: Keil μVisio4
* 【程序功能】: 電子萬年歷,LCD1602液晶顯示,顯示時分秒、星期、公歷、陰歷、鬧鐘、環(huán)境溫度、可以校時和設(shè)置鬧鐘。
* 【使用說明】: 使用3條杜邦線把P10接到DS1302的TSCLK上,P11接到TIO,P12接到TRST上。
接上LCD1602液晶。
* 【按鍵功能說明】:在正常顯示狀態(tài)下S2按鍵為切換公歷、時鐘/陰歷、鬧鐘顯示,在設(shè)置狀態(tài)下S2為設(shè)置左移。
S5為設(shè)置鍵,在顯示公歷時鐘狀態(tài)下,按下S5為設(shè)置公歷、時鐘,再次按下S5為寫入設(shè)置參數(shù)并退出
在顯示陰歷、鬧鐘狀態(tài)下,按下S5為設(shè)置陰歷、鬧鐘,再次按下S5為寫入設(shè)置參數(shù)并退出
在設(shè)置狀態(tài)下,S3為數(shù)據(jù)加
在設(shè)置狀態(tài)下,S4為數(shù)據(jù)減
* 說明:免費(fèi)開源,不提供源代碼分析.
**********************************************************************************/
#define _MAIN_C
#include "config.h"
#include "LCD1602.h"
#include "DS1302.h"
#include "DS18B20.h"
#include "app.h"
#include "Key_Buzzer.h"
#include "main.h"
bit flag1s = 0; //1s定時標(biāo)志位
bit flag200ms = 0; //200ms定時標(biāo)志
enum eStaSystem staSystem = E_NORMAL; //系統(tǒng)運(yùn)行狀態(tài)
void main()
{
EA = 1; //開總中斷
Start18B20(); //啟動溫度轉(zhuǎn)換
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; //清零標(biāo)志位
AlarmMonitor(); //監(jiān)控鬧鐘
if (staSystem == E_NORMAL)//如果系統(tǒng)正常運(yùn)行
{
RefreshTime(); //刷新時間
RefreshDate(0);//刷新日期
}
if (staSystem == Dis_Alarm)
{
RefreshLunar(); //刷新陰歷
}
}
if(flag1s && (staSystem == E_NORMAL))//1s時間到并且系統(tǒng)為正常運(yùn)行
{
flag1s = 0;//清零標(biāo)志位
RefreshTemp(0);//刷新溫度
}
}
}
/* 溫度刷新函數(shù),讀取當(dāng)前溫度并根據(jù)需要刷新液晶顯示,
** ops-刷新選項(xiàng):為0時只當(dāng)溫度變化才刷新,非0則立即刷新 */
void RefreshTemp(uint8 ops)
{
int16 temp;
uint8 pdata str[8];
static int16 backup = 0;
Get18B20Temp(&temp); //獲取當(dāng)前溫度值
Start18B20(); //啟動下一次轉(zhuǎn)換
temp >>= 4; //舍棄4bit小數(shù)位
if ((backup!=temp) || (ops!=0)) //按需要刷新液晶顯示
{
str[0] = (temp / 10) + '0'; //十位轉(zhuǎn)為ASCII碼
str[1] = (temp % 10) + '0'; //個位轉(zhuǎn)為ASCII碼
str[2] = '\''; //用'C代替℃
str[3] = 'C';
str[4] = '\0'; //字符串結(jié)束符
LCD1602_Dis_Str(12, 1, str); //顯示到液晶上
backup = temp; //刷新上次溫度值
}
}
/*初始化定時器0 定時5ms*/
void Init_Timer0()
{
TMOD = 0x01; //定時器16為計(jì)數(shù)工作模式
TH0 =0xee;
TL0 =0x00; //5ms
ET0 = 1; //開定時器0中斷
TR0 = 1;//啟動定時器0
}
/*定時器0中斷服務(wù)程序*/
void Timer0() interrupt 1
{
static uint8 tmr1s = 0;
static uint8 tmr200ms = 0;
TH0 =0xee;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
萬年歷焊接板.zip
(124.25 KB, 下載次數(shù): 74)
2017-12-6 08:47 上傳
點(diǎn)擊文件名下載附件
萬年歷
下載積分: 黑幣 -5
作者:
zcm1998
時間:
2018-4-18 15:42
很強(qiáng)很贊有參考價值
作者:
793376762
時間:
2018-12-7 17:28
好想下載
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1