第二章系统硬件设计
18
南昌工程学院本科毕业设计(论文)
第三章系统软件设计
3.1 系统主程序设计方法
本系统使用的是Keil 软件,它是C51系列兼容单片机C语言软件开发系统,能够应用通俗易懂的高级C语言对单片机进行软件开发。
当然,在写程序之前必须要对系统的电路有足够的了解,各个接口,还有系统各个芯片或者模块的时序,在编程过程中都要对其遵守,那样才能将你所预设的功能付诸实现。在搞清楚了硬件的特性之后,根据该特性首先要做的就是画出流程图,组织好每个模块的处理先后顺序。另外,也要善于利用软件去替代部分硬件做的事情,比如在此设计里,消除键盘按键抖动现象就使用了软件除抖,使得硬件电路更简洁,也降低了系统总体成本。
所有的程序,使用C51编程语言,在keil开发环境中编译和调试,整个程序利用了中断技术、数字滤波技术、系数补偿技术以及其他先进技术。程序设计都分了模块,模块化的程序结构清晰,易于修改[8]。由以下主要模块组成:主程序模块、温湿度采集模块,报警模块、数据显示模块、按键模块和其他的附加模块。
图3.1是该系统的主程序流图。
19
第三章系统软件设计
有无按下设定键 是 进入设定子程序
是否超出设定值 开始 初始化 显示欢迎界面 调用读取实时温湿度子程序值 显示 否 否 是 输出报警
结束 图3.1 系统主程序流图
3.2 LCD1602显示子程序
首先要对LCD模块进行初始化,另外由于该器件是慢显器件,在对其进行操作前要先读忙标示,为低电平时操作才有效,这个读忙标示也可以用延时操作来替代,作用是一样的[9]。这些都可以放在 LCD_init(void) 里面去实现。根据程序功能思路,结
20
南昌工程学院本科毕业设计(论文)
合硬件特性,得出下面程序流图:
是
图3.2 LCD1602显示子程序流图
1602初始化 延时 有无按键按下 无 有 按键子程序 按键程序完成 读温湿度 否 读取成功? DHT11通信重启 线性拟合数据 1602显示数据 延时0.8s
下面给出LCD1602初始化代码:
void LCD_Initial()
21
第三章系统软件设计
{ E=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); }
将字符输出到液晶显示部分代码:
void Print(unsigned char *str) {
while(*str!='\\0') {
LCD_Write(LCD_DATA,*str); str++; } }
3.3 DHT11温湿度采集子程序
下面给出这部分程序的流图:
22
//AC递增, 画面不动