|
|
本人c學(xué)的很差,下面是哥們寫的程序,看不懂思路,沒法寫文檔啊,求大佬指點(diǎn)迷津。(stc89c52的恒溫控制系統(tǒng))下面是主函數(shù)。
- #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; //定義降溫開關(guān)IO
- sbit SWITCH_IO2 = P2^5; //定義升溫開關(guān)IO
- sbit BEEP = P2^7;//定義蜂鳴器IO
- unsigned char Set_temperature = 25; //定義控制溫度變量 初始值25度
- bit Set_flag = 0;//定義設(shè)置標(biāo)志位 0是未設(shè)置狀態(tài) 1是設(shè)置狀態(tài)
- void main()
- {
- unsigned char i;
- char buff[20];
- unsigned char key_num = 0;//定義鍵值臨時(shí)變量
- float temp = 0;//定義溫度臨時(shí)變量
- LCD_Init(); //初始化液晶
- DelayMs(20); //延時(shí)有助于穩(wěn)定
- LCD_Clear(); //清屏
- Lcd_User_Chr(); //寫入自定義字符
- for(i=0; i<40; i++)//上電啟動(dòng)讀取40次溫度值
- {
- temp = ds18b20ReadTemperature();//讀取溫度
- DelayMs(10); //延時(shí)10ms
- }
- while (1)//進(jìn)入循環(huán)
- {
- 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;//設(shè)置標(biāo)志位取反 0是未設(shè)置狀態(tài) 1是設(shè)置狀態(tài)
- if(Set_flag == 0)//根據(jù)設(shè)置標(biāo)志位顯示箭頭指示
- LCD_Write_Char(0, 1, ' ');
- else
- LCD_Write_Char(0, 1, '>');
- break;
- case 2:
- if(Set_flag == 1)//如果當(dāng)前狀態(tài)為設(shè)置狀態(tài)
- {
- Set_temperature++ ; //溫度+1
- if(Set_temperature > 99)//最大值限位
- Set_temperature = 99;
- }
- break;
- case 3:
- if(Set_flag == 1)//如果當(dāng)前狀態(tài)為設(shè)置狀態(tài)
- {
- Set_temperature--; //溫度-1
- if(Set_temperature > 99)//最小值限位
- Set_temperature = 0;
- }
- break;
- }
- }
- if((int)Ds18b20_temperature == Set_temperature)//如果當(dāng)前溫度等于設(shè)定溫度
- {
- SWITCH_IO1 = SWITCH_OFF;//散熱開關(guān)關(guān)閉
- SWITCH_IO2 = SWITCH_OFF;//加熱開關(guān)關(guān)閉
- BEEP = SWITCH_OFF;//蜂鳴器報(bào)警關(guān)閉
- }
- else if((int)Ds18b20_temperature > Set_temperature)//如果當(dāng)前溫度大于設(shè)定溫度
- {
- SWITCH_IO1 = SWITCH_ON;//散熱開關(guān)關(guān)閉
- SWITCH_IO2 = SWITCH_OFF;//加熱開關(guān)開啟
- BEEP = SWITCH_ON;//蜂鳴器報(bào)警開啟
- }
- else if((int)Ds18b20_temperature < Set_temperature)//如果當(dāng)前溫度小于設(shè)定溫度
- {
- SWITCH_IO1 = SWITCH_OFF;//散熱開關(guān)關(guān)閉
- SWITCH_IO2 = SWITCH_ON;//加熱開關(guān)開啟
- BEEP = SWITCH_ON;//蜂鳴器報(bào)警開啟
- }
- }
- }
復(fù)制代碼
|
|