|
//******************************Write By F H X***********************************//
//****************LCD1602萬年歷 :顯示 年月日、 溫度、 時間、 星期****************//
//******************************矩陣按鍵可調整***********************************//
//*****************************LCD1602界面如下***********************************//
//************************ ■〓〓〓〓〓〓〓〓〓〓〓■ *****************************//
//************************ ■ 2017年03月20日 15°C ■ *****************************//
//************************ ■ 12:30:00 week:1 ■ *****************************//
//************************ ■〓〓〓〓〓〓〓〓〓〓〓■ *****************************//
#include"function.h"
uchar T0RH=0;
uchar T0RL=0;
bit flag200ms=1; //到達200ms標志
uchar mode=0; //設置變量
struct STime bufTime; //日期時間緩沖區
uchar tflag;
void Timer0Init(uint ms);
/**************************************************主函數***********************************************************/
/* */
/*******************************************************************************************************************/
void main()
{
uchar psec = 0xAA; //確保第一次讀取時間能刷新顯示
EA=1; //打開總中斷
Timer0Init(1); //初始化定時器0 定時1ms
RESET_DS18B20(); //復位18B20
InitDS1302(); //初始化DS1302
InitLcd1602(); //初始化LCD1602
LcdShowStr(0,0,"20"); //固定顯示內容
Display_user(); //顯示自定義字符 年 月 日
LcdShowDat(14,0,0xDF); //顯示°
LcdShowStr(15,0,"C");
LcdShowStr(0,1," : : ");
LcdShowStr(9,1,"week:");
while(1)
{
KeyDrive();
if(flag200ms&&(mode==0)) //到達200ms且沒有進入設置模式時
{
flag200ms=0;
GetRealTime(&bufTime); //獲取當前時間
Display_Tem(); //顯示溫度
if(psec!=bufTime.sec) //檢測時間有變化時刷新時間顯示
{
Refresh_TimeShow(); //更新顯示
psec=bufTime.sec;
}
}
}
}
/*********************************************定時器0初始化函數***************************************************/
/* 形參ms 當ms=1 定時1毫秒 */
/*****************************************************************************************************************/
void Timer0Init(uint ms)
{
ulong tmp; //16位長整型變量tmp
tmp=12000000/12; //用晶振頻率除以12得到定時器計數頻率
tmp=(tmp*ms)/1000; //計算出需要多少個機器周期
tmp=65536-tmp; //定時器的初始值
tmp=tmp+27; //補償中斷延時響應造成的誤差
T0RH=(uchar)(tmp>>8); //將tmp高8位右移8位 賦值給T0RH
T0RL=(uchar)tmp; //將tmp低8位賦值給T0RL
TMOD&=0xF0; //TMOD高4位不變 低四位清零
TMOD|=0x01; //TMOD低四位變成0001
TH0=T0RH; //裝載初值
TL0=T0RL;
ET0=1; //開啟定時器0中斷
TR0=1; //開啟定時器0
}
/*************************************************T0中斷服務函數**************************************************/
/* */
/*****************************************************************************************************************/
void InterruptTimer0() interrupt 1
{
static uchar tmr_ms=0;
TH0=T0RH;
TL0=T0RL;
KeyScan();
tmr_ms++;
if(tmr_ms>=200) //定時200ms
{
tmr_ms=0;
flag200ms=1;
}
}
|
-
-
按鍵可調萬年歷.rar
2019-11-27 21:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
318.62 KB, 下載次數: 6, 下載積分: 黑幣 -5
|