本人c學的很差,下面是哥們寫的程序,看不懂思路,沒法寫文檔啊,求大佬指點迷津。(stc89c52的恒溫控制系統)下面是主函數。
- #include "reg52.h"
- #include<stdio.h>
- #include "1602.h"
- #include "delay.h"
- #include "bsp_ds18b20.h"
- #include "bsp_key.h"
- #define SWITCH_ON 0
- #define SWITCH_OFF 1
- sbit SWITCH_IO1 = P2^6; //定義降溫開關IO
- sbit SWITCH_IO2 = P2^5; //定義升溫開關IO
- sbit BEEP = P2^7;//定義蜂鳴器IO
- unsigned char Set_temperature = 25; //定義控制溫度變量 初始值25度
- bit Set_flag = 0;//定義設置標志位 0是未設置狀態 1是設置狀態
- void main()
- {
- unsigned char i;
- char buff[20];
- unsigned char key_num = 0;//定義鍵值臨時變量
- float temp = 0;//定義溫度臨時變量
- LCD_Init(); //初始化液晶
- DelayMs(20); //延時有助于穩定
- LCD_Clear(); //清屏
- Lcd_User_Chr(); //寫入自定義字符
- for(i=0; i<40; i++)//上電啟動讀取40次溫度值
- {
- temp = ds18b20ReadTemperature();//讀取溫度
- DelayMs(10); //延時10ms
- }
- while (1)//進入循環
- {
- temp = ds18b20ReadTemperature();//讀取溫度
- if(temp > 0 && temp < 100)//如果讀取溫度大于0小于100
- {
- Ds18b20_temperature = temp; //溫度賦值
- }
- /*************顯示溫度**************/
- if(Ds18b20_temperature < 10)
- sprintf(buff,"Temp: %0.1f", Ds18b20_temperature); //溫度組包
- else
- sprintf(buff,"Temp: %0.1f", Ds18b20_temperature);
- LCD_Write_String(3,0,buff);
- sprintf(buff,"Set : %02d", (int)Set_temperature);
- LCD_Write_String(3,1,buff);//更新顯存
- key_num = keyScan();//讀取鍵值
- if(key_num != 0)//如果鍵值不為0
- {
- switch(key_num)
- {
- case 1://按鍵1按下
- Set_flag = !Set_flag;//設置標志位取反 0是未設置狀態 1是設置狀態
- if(Set_flag == 0)//根據設置標志位顯示箭頭指示
- LCD_Write_Char(0, 1, ' ');
- else
- LCD_Write_Char(0, 1, '>');
- break;
- case 2:
- if(Set_flag == 1)//如果當前狀態為設置狀態
- {
- Set_temperature++ ; //溫度+1
- if(Set_temperature > 99)//最大值限位
- Set_temperature = 99;
- }
- break;
- case 3:
- if(Set_flag == 1)//如果當前狀態為設置狀態
- {
- Set_temperature--; //溫度-1
- if(Set_temperature > 99)//最小值限位
- Set_temperature = 0;
- }
- break;
- }
- }
- if((int)Ds18b20_temperature == Set_temperature)//如果當前溫度等于設定溫度
- {
- SWITCH_IO1 = SWITCH_OFF;//散熱開關關閉
- SWITCH_IO2 = SWITCH_OFF;//加熱開關關閉
- BEEP = SWITCH_OFF;//蜂鳴器報警關閉
- }
- else if((int)Ds18b20_temperature > Set_temperature)//如果當前溫度大于設定溫度
- {
- SWITCH_IO1 = SWITCH_ON;//散熱開關關閉
- SWITCH_IO2 = SWITCH_OFF;//加熱開關開啟
- BEEP = SWITCH_ON;//蜂鳴器報警開啟
- }
- else if((int)Ds18b20_temperature < Set_temperature)//如果當前溫度小于設定溫度
- {
- SWITCH_IO1 = SWITCH_OFF;//散熱開關關閉
- SWITCH_IO2 = SWITCH_ON;//加熱開關開啟
- BEEP = SWITCH_ON;//蜂鳴器報警開啟
- }
- }
- }
復制代碼
|