|
0.png (68.13 KB, 下載次數: 81)
下載附件
2016-10-20 22:28 上傳
非常經典的STC89C52單片機 + DS1820溫度 + DS1302時間0 + LCD12864液晶 萬年歷程序,帶節日顯示提醒,溫度報警:
萬年歷.zip
(111.76 KB, 下載次數: 50)
2016-10-20 22:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
部分源碼預覽:
- /***********************************************************
- 文件名稱: 主函數
- 作 者: LQW
- 版 本: 0.01
- 說 明:
- 時間 : 12月12日22:20:11
- 修改記錄:
- 總結 : 1:今天搞了4個鐘,收獲最大是要看電路圖,忘記加一個上拉電阻,時鐘時間跑不準
- 2:12月18日20:33:21加入顯示節日函數
- 3:12月20日18:58:58加入溫度顯示函數
- 4: 全局變量用多了將會超出KEIL 默認的直接尋址的DATA區且DATA區只有128字節
- 5: DS18B20也加4.7K上拉電阻
- ***********************************************************/
- #include"LCD12864.h"
- #include"delay.h"
- #include"ds1302.h"
- #include"timeadjust.h"
- #include"keyscan.h"
- #include"keypro.h"
- #include"disfestival.h"
- #include"ds18b20.h"
- #include"ds18b20distemp.h"
- #include"ds18b20alarm.h"
- //#include<reg52.h>
- //#include<string.h"
- /*------------------------------------------
- 定義臨時變量
- -------------------------------------------*/
- u8 *WEEK[] = {"SUM","MON","TUS","WEN","THU","FRI","SAT"};
- sbit LED1 = P3^7;//溫度高于上限LED1閃爍
- sbit LED2 = P3^6; //溫度高于下限LED2閃爍
- u16 TimCnt = 0;
- sbit BEEP = P3^5;
- /***********************************************************
- 函數名稱: 定時器T0 初始化
- 函數功能:
- 入口參數:
- 出口參數:
- 備 注:
- ***********************************************************/
- void Time0_Init(void)
- {
- TMOD |= 0x01; // 定時器T0工作在方式1
- TH0 = - 1000 / 256;
- TL0 = - 1000 % 256;
- EA = 1; //打開總中斷
- ET0 = 1; //允許T0中
- //TR0 = 1; //開啟定時器T0中斷
- }
- /***********************************************************
- 函數名稱: 定時器T0中斷函數
- 函數功能: 定時每2ms刷新數碼管
- 入口參數:
- 出口參數:
- 備 注:
- ***********************************************************/
- void Time0_ISR() interrupt 1
- {
- TH0 = - 1000 / 256;
- TL0 = - 1000 % 256;
- BEEP = !BEEP;
- if( ++TimCnt == 200 )
- {
- TimCnt = 0;
- if( H_Alarm )
- LED1 = ~LED1;
- else
- LED1 = 1;
- if( L_Alarm )
- LED2 = ~LED2;
- else
- LED2 = 1;
- TR0 = 0; //關閉定時器
- }
- }
- void main()
- {
- u8 keynum;
- Time0_Init();//定時器T0初始化
- Set_DS18B20_Alarm_Temp();//設置DS18B20溫度的報警值,且寫入ds18b20里
- ds18b20_ReadTemperature();////讀取溫度值分別放在Temp_Value[](存放溫度值)與Temp_Alarm[](存放報警值
- Init_DS18B20();//ds18b20初始化
- Init_DS1302();//ds1302初始化,是對時時間
- Init_LCD12864();//液晶初始化
- DelayMs( 1 );
- while( 1 )
- {
- ds18b20_ReadTemperature();//讀取溫度值分別放在Temp_Value[](存放溫度值)與Temp_Alarm[](存放報警值
- keynum = KeyScan();//讀取按鍵的
- if( adjust_index == -1)
- {
- GetTime();//獲取時間
- Format_Time( DataTime[ 6 ], LCD_DIS_BUFFER1 + 2 );
- Format_Time( DataTime[ 4 ], LCD_DIS_BUFFER1 + 6 );
- Format_Time( DataTime[ 3 ], LCD_DIS_BUFFER1 + 10 );
- Format_Time( DataTime[ 2 ], LCD_DIS_BUFFER2 + 0 );
- Format_Time( DataTime[ 1 ], LCD_DIS_BUFFER2 + 4 );
- Format_Time( DataTime[ 0 ], LCD_DIS_BUFFER2 + 8 );
- strcpy( LCD_DIS_BUFFER2 + 13, WEEK[ DataTime[ 5 ] - 1]);
- LCD_PutString( 0, 1, LCD_DIS_BUFFER1);
- LCD_PutString( 0, 2, LCD_DIS_BUFFER2);
- }
- Dis_Festival(); //顯示公歷節日
- if( iS_DS18B20_OK == 1 )
- {
- if( H_Alarm == 1 || L_Alarm == 1 )
- TR0 = 1;
- else
- TR0 = 0;
- ds18b20_Display_Temperature();//溫度轉換
- }
- if( keynum != 0xff )
- {
- KeyPro( keynum ); //一邊調整一邊顯示
- Format_Time( DataTime[ 6 ], LCD_DIS_BUFFER1 + 2 );
- Format_Time( DataTime[ 4 ], LCD_DIS_BUFFER1 + 6 );
- Format_Time( DataTime[ 3 ], LCD_DIS_BUFFER1 + 10 );
-
- LCD_PutString( 0, 1, LCD_DIS_BUFFER1);
-
- Format_Time( DataTime[ 2 ], LCD_DIS_BUFFER2 + 0 );
- Format_Time( DataTime[ 1 ], LCD_DIS_BUFFER2 + 4 );
- Format_Time( DataTime[ 0 ], LCD_DIS_BUFFER2 + 8 );
- LCD_PutString( 0, 2, LCD_DIS_BUFFER2);
- }
-
-
- }
- }
復制代碼
|
評分
-
查看全部評分
|