欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
這個單片機程序的思路?看不懂
[打印本頁]
作者:
電子小白啊
時間:
2020-4-25 21:31
標題:
這個單片機程序的思路?看不懂
本人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;//蜂鳴器報警開啟
}
}
}
復制代碼
作者:
hantu
時間:
2020-4-26 01:30
注釋都寫這么詳細了你還看不懂,那真的是不適合編程。這個還只是簡單地比較然后升降溫,要是PID那你更是看天書了。
作者:
優雅而紫砂
時間:
2020-4-26 02:11
把c語言的書多看看,多敲就對了
作者:
f556
時間:
2020-4-26 15:05
你哥們已經良心大大地好了,基本每句都用漢語注釋,其實有1/10的注釋就正常了。
漢語是看不懂呢,還是....?
LCD_Init(); //初始化液晶
LCD_Clear(); //清屏
這些基本上沒人會注釋。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1