4 软件设计
程序是一个系统的思想,没有程序,电路就是死体,不能正常运作。有了程序,就想肉体有了灵魂,一个有效地程序,能让一堆电路工作,一个合理高效的程序,能优化整个系统是整个系统处于最佳的工作状态。
4.1 主程序流程图
本系统的软件程序主要包括主程序、温度检测程序、显示程序、报警系统程序,键盘控制程序几个大模块。主程序的优化结构,决定了一个系统的优化程度。
主程序采用循环式扫描,对系统进行循环的检测。首先是各个子程序的初始化程序,包括对各个功能模块的检测,然后是温度检测程序,不断的检测采集到的温度是否超出设置的范围,将检测到的温度显示在TFT彩屏上,在这过程中还可以设置显示哪路温度和温度测量的范围,如此不断的执行程序,主程序流程图如图4.1:
开始 子程序初始化 按键温度设置 读采集到的温度值 解除报警 是否超过设置的温度 Y 报警 N 显示温度 图4.1 主程序流程图
4.2温度采集处理流程图
温度采集程序主要是对DS18B20的控制程序。由微控制器STM32F103ZET6严格按
21
照DS18B20的时序控制它,进行温度的采集和转换并输出到TFTLCD,使我们能够清楚地看到当前温度值。对DS18B20的设定在主程序已经完成,在这几只是其转化的程序,不在需要不停地对其设置,减轻了系统的压力,使系统的运行速度提高。
温度采集程序流程图如下:
开始 初始化DS18B20 IO端口 检测DS18B20是否存在 提示错误 复位DS18B20
TFTLCD显示温度值 开始温度转换 得到温度值 图4.2 温度采集模块程序流程图
部分程序代码如下:
DS18B20_Start (a); // ds1820 start convert DS18B20_Rst(a); DS18B20_Check(a);
DS18B20_Write_Byte(a,0xcc);// skip rom DS18B20_Write_Byte(a,0xbe);// convert TL=DS18B20_Read_Byte(a); // LSB TH=DS18B20_Read_Byte(a); // MSB
4.3 显示子程序介绍
显示字程序需较为复杂,主要因为TFT的驱动难,但驱动程序就可以达百行。本系
22
统显示程序突出优点是折线图,通过折线图将实时的温度显示出来,看起来更加的直观,更容易看出温度的变化趋势走向。
开始 TFTLCD 初始化 确定显示位置 显示数据 图4.3 显示程序流程图
部分程序代码如下:
LCD_Fill(2,32,239,320,WHITE); //特点区域填充为白色
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,90,240,16,16,\LCD_ShowString(60,110,240,16,16,\LCD_ShowString(60,130,240,16,16,\LCD_ShowString(60,150,240,16,16,\LCD_ShowString(60,170,200,16,16,\ . C\ LCD_ShowString(60,190,200,16,16,\ . C\LCD_ShowString(60,210,200,16,16,\ . C\ LCD_ShowString(60,230,200,16,16,\ . C\LCD_ShowString(60,250,200,16,16,\ . C\LCD_ShowString(60,270,200,16,16,\ . C\LCD_ShowNum(60+40,270,(u32)Low_temp,2,16); LCD_ShowNum(60+48,250,(u32)High_temp,2,16);
显示子程序实现了当前温度值的显示,主要的是TFTLCD液晶显示器的初始化命令的设置,我们通过STM32F103微处理器控制显示器,使显示器能够显示我们想要的效果,程序设计过程中,能够同时显示四路温度,通过K0按键控制得到哪路温度显示,通过K1按键控制设置的温度上下限,通过显示器我们可以很清楚的知道当前温度和设置的温度上下限值。
4.4 按键子程序介绍
本设计采用中断方式来查询按键,所以按键后的相应操作即中断服务程序。中断按键
23
程序的较多优点,其不需要单片机随时扫描,让单片机一直处于对温度的检测,大大降低了单片机的压力,增强单片机的控制效率,增加了系统温度采集的效率,降低系统的延迟时间,提高系统的循环速度。设置键主要是TFTLCD上光标的切换,每按键一下,标志信号加一, 再根据标志信号执行对应的操作,表示光标相应的改变,即得到相应路数的温度。
N K0是否按下 无操作,程序正常运行
Y
K1是否按下 返回到断点处继续执行程序 外部中断0发生,执行外部中断0服务程序 使光标定位到选择的温度路数上 N 程序正常运行 Y 外部中断1 发生,执行外部中断1服务程序 使光标定位到设置温度的上限或者下限处
返回到断点处继续执行程序 图4.4 按键程序流程图
上图显示了K0 和K1的作用,K2按键实现报警温度上下限的加功能,K3按键实现报警温度上下限的减功能,同样也是用外部中断来实现其功能的,其温度值再送到TFTLCD上显示出来。
外部中断3服务程序代码如下: // 报警温度加
void EXTI3_IRQHandler(void) {
delay_ms(10);//消抖 if(KEY1==0) {
{
24
//按键KEY1
if(set_flag == 1)
}
Low_temp ++;
LCD_ShowNum(60+40,270,Low_temp,2,16); if(set_flag == 0) {
High_temp ++;
LCD_ShowNum(60+48,250,High_temp,2,16); } }
EXTI_ClearITPendingBit(EXTI_Line3); }
25
//清除LINE3上的中断标志位