?? 萬年歷.c
字號:
// cpu at89s52 Focs=11.0592MHz
#include<reg52.h> //頭文件
#define uchar unsigned char
#define uint unsigned int
#define DATA P0 //定義P0口為數據總線
sbit rs= P2^0; //* rs=1 display RAM data;rs=0 instruction */
sbit rw= P2^1; //* rw=1,e=1,cs=1,read ;rw=0,e=0,cs=1,write */
sbit psb= P2^3; //*PSB=1,模式并口12864液晶(自帶漢字庫)*/
sbit ret= P2^5; //定義P2^5為液晶復位線
sbit E= P2^2; //定義為液晶的控制線
sbit q=P3^5; //定義P3^5為DS18B20的數據口線
uchar jp=0xa3; //液晶顯示數字的地址編碼高字節
uint num; //存放測得的溫度值的變量定義
uchar hc[]={0,0}; //溫度顯示緩沖區
uint year=2007; //年月日變量定義
uchar month=1,day=1; //年月日變量定義
uchar yr1,yr2,mh1,mh2,dy1,dy2; // 處理年月日數據的變量定義
uchar second,minite,hour; //時分秒變量定義
uchar jsd1,jsd2,jme1; // 處理時鐘數據的變量定義
uchar jme2,jhr1,jhr2; // 處理時鐘數據的變量定義
uchar mss,mse,mil; //跑表變量定義
uchar pmss1,pmss2,pmse1; // 處理跑表數據的變量定義
uchar pmse2,pmil1,pmil2; //處理跑表數據的變量定義
uchar v; //定義年月日 時鐘 跑表模式選擇變量
uchar kk; //年月日與時鐘模式選擇變量定義
uchar i; //軟件延時計數器變量定義
uchar *p; //定義指向顯示緩沖區的指針變量
uchar counter; //定義定時器0定時計數器變量
uchar tt; //定義定時器1定時計數器變量
uchar mp=0xa1; //液晶顯示"-"的高字節
uchar code MA[]={0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9}; //液晶顯示數字的地址編碼低字節
uchar pp[]={0,0,0,0,0,0}; //顯示緩沖數組
uchar yf[]={32,29,32,31,32,31,32,32,31,32,31,32}; //月份數組
void delay(uchar ms); //軟件延時子程序
void lcd_int(void); //實現對液晶復位,8位數據模式選擇子程序
void Wrir(uchar com); //向LCD發送控制命令
void Wrda(uchar da); //向LCD發送數據命令
void Init_Lcd(void); //液晶初始化
void clearlcd(void); //液晶清屏
void Busy(void); //判液晶是否在忙子程序
void delay0(uint d); //軟件延時子程序
void CL_data(uint i,uchar *z); //溫度數據處理子程序
void Display(void); //液晶上顯示實測溫度子程序
void int_18b20(void); //初始化18b20子程序
void yingda(); //接收18b20應答信號子程序
void wrone(uchar da); //寫給18b20一字節數據子程序
uint chuli18b20(void); //測溫子程序
uchar rdone(void); //讀取18b20一字節數據子程序
void zh_0(void); //時鐘數據處理子程序
void zh_1(void); //年月日數據處理子程序
void zh_2(void); //跑表數據處理子程序
void display_0(uchar k,uchar *q); //液晶上顯示時鐘子程序
void display_1(uchar a,uchar *u); //液晶上顯示年月日子程序
void display_y(void); //液晶上顯示時鐘 年月日 跑表三模式選擇子程序
void wd(); //實測溫度并在液晶上顯示測得的溫度值子程序
void process(void); //時鐘 年月日 跑表三模式數據處理 顯示子程序
void key1(void); //對年月日,時鐘調整,起動時鐘子程序
void key2(void); //實現對跑表暫停,清零,跑表調整子程序
void key_y(void); //實現進入時鐘調整模式,年月日,時鐘,跑表三種模式的選擇
void ch(); //定時器初始化子程序
uchar keyscan(void); //動態掃描鍵盤子程序
/*
*********************************************************************************************************
** 函數名稱 :main()
** 函數功能 :萬年歷
** 調試說明 :
*********************************************************************************************************
*/
void main(void)
{
ch(); //定時器初始化
lcd_int(); //復位與數據模式選擇
Init_Lcd(); //液晶初始化
while(1)
{
key_y(); //一直調鍵掃
}
}
/*
*********************************************************************************************************
** 函數名稱 :zh_0()
** 函數功能 :時鐘數據處理子程序
** 入口參數 :無
** 出口參數 :無
*********************************************************************************************************
*/
void zh_0(void)
{
pp[5]=jsd1; //秒個位
pp[4]=jsd2; //秒十位
pp[3]=jme1; //分個位
pp[2]=jme2; //分十位
pp[1]=jhr1; //時個位
pp[0]=jhr2; //分十位
}
/*
*********************************************************************************************************
** 函數名稱 :zh_1()
** 函數功能 :年月日數據處理子程序
** 入口參數 :無
** 出口參數 :無
*********************************************************************************************************
*/
void zh_1(void)
{
pp[1]=yr1;pp[0]=yr2;pp[3]=mh1;pp[2]=mh2;pp[5]=dy1;pp[4]=dy2;
}
/*
*********************************************************************************************************
** 函數名稱 :zh_2()
** 函數功能 :跑表數據處理子程序
** 入口參數 :無
** 出口參數 :無
*********************************************************************************************************
*/
void zh_2(void)
{
pp[5]=pmss1;pp[4]=pmss2;pp[3]=pmse1;pp[2]=pmse2;pp[1]=pmil1;pp[0]=pmil2;
}
/*
*********************************************************************************************************
** 函數名稱 :delay(uchar ms)
** 函數功能 :延時
** 入口參數 :ms
** 出口參數 :無
*********************************************************************************************************
*/
void delay(uchar ms)
{
while(ms--)
{
for(i=120;i>0;i--); //軟件延時
}
}
/*
*********************************************************************************************************
** 函數名稱 :display_0(uchar k,uchar *q)
** 函數功能 :液晶上顯示時鐘與跑表
** 入口參數 :uchar k,uchar *q
** 出口參數 :無
*********************************************************************************************************
*/
void display_0(uchar k,uchar *q)
{
uchar l,j;
Wrir(k); //送顯示開始地址
for(l=0;l<2;l++)
{
for(j=0;j<2;j++)
{
Wrda(jp);
Wrda(MA[*q]);
q++;
}
Wrda(mp);
Wrda(0xaa); //顯示"-"
}
for(j=0;j<2;j++)
{
Wrda(jp);
Wrda(MA[*q]);
q++;
}
}
/*
*********************************************************************************************************
** 函數名稱
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -