标题:
这个单片机程序的思路?看不懂
[打印本页]
作者:
电子小白啊
时间:
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://www.51hei.com/bbs/)
Powered by Discuz! X3.1