基于stm8的温湿度测量仪 - 图文(3)

2019-04-22 18:57

电 气 学 院 创 新 设 计 说 明 书

第四章·软件程序设计

4.1 软件设计实现的功能

系统单片机代码采用C语言编写,以IAR Embedded Workbench为开发环

100境。系统软件实现功能: 80(1)通过DHT11温湿度传感器采集温湿度数据 60东部(2)通过MAX7219显示温湿度数据 40(3)比较检测到的温湿度数值与报警值,发现超过上限蜂鸣器立即报警 北部20(4)通过独立按键中断切换显示温湿度 04.2 软件程序主流程图 第一季度第三季度西部开 始

启动DHT11

时钟HIS 定时器TIM2 按键 初始化

否 DHT11是否有响应? 从DHT11取数据 是

初始化7219

显示温度数据 是 蜂鸣器报警 数据是否超出上限? 否 关闭蜂鸣器 否 按键按下? 是

显示湿度数据 11 / 22

电 气 学 院 创 新 设 计 说 明 书

定时器中断服务子程序流程图

计时2秒时间到

转到中断服务

函数

响应DHT11

向DHT11取数据更新数据

4.3程序代码:

(1)函数声明、变量定义代码: Wsdcl_main.h文件: #include\

#define u8 unsigned char #define u16 unsigned char #define u32 unsigned long #define KEY_PORT GPIOE

#define KEY_PIN GPIO_PIN_0

extern unsigned int temp_1,temp_2, temp_4,temp_5; extern unsigned int humi_1, humi_2, humi_4, humi_5;

/************************************************************/ void CLK_Configuration(void); void GPIO_Configuration(void); void KEY_Init(void);

void TIM2_Configuration(); void ceshi_on(void); void Alarm_Beep(); void ceshi_off(void); DHT11.h文件: #include\

#define DHT11_IO_IN GPIO_Init(GPIOE, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT)//输入模式 #define DHT11_IO_OUT GPIO_Init(GPIOE, GPIO_PIN_6, GPIO_MODE_OUT_PP_LOW_FAST)//输出模式

#define GPIO_PIN_UP GPIO_WriteHigh(GPIOE, GPIO_PIN_6)//拉高电平

12 / 22

电 气 学 院 创 新 设 计 说 明 书

#define GPIO_PIN_DOWN GPIO_WriteLow(GPIOE, GPIO_PIN_6)//拉低电平

#define DHT11_DQ_IN GPIO_ReadInputPin(GPIOE, GPIO_PIN_6) //读取引脚信号 /************************************************************/ extern unsigned char Table_Data[4]; unsigned char DHT11_Get_Data(void); int start_DHT11(void);

unsigned char DHT11_Get_Data(void); 7219.h文件:

#include\

#include\/*定义7219各个地址*/ #define MSB 0x80 #define LSB 0x01

#define DECODE_MODE 0x09 #define INTENSITY 0x0A #define SCAN_LIMIT 0x0B #define SHUT_DOWN 0x0C #define DISPLAY_TEST 0x0F #define GPIO_PORT GPIOD

/************************************************************/ void Init_Max7219(); void clear_7219();

void Write_Max7219(unsigned char address,unsigned char dat); void Display_Error(void); void Display_Temp(void); void Display_Humi(void); Delay.h文件: #include\

#include\

/************************************************************/ void Delay_ms(u32 ms); void Delay_us(u32 us); (2)主函数代码: Wsdcl_main.c文件: #include\

#include\#include\#include\#include\

13 / 22

电 气 学 院 创 新 设 计 说 明 书

int _Turn; int main()

{ _Turn=1; //先显示温度

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //时钟配置16MHz KEY_Init(); //按键切换显示初始化 TIM2_Configuration();//TIM2时钟配置

if(start_DHT11()==1)//检测是否有响应,结果有响应往下执行 {

DHT11_Get_Data(); //从DHT11取数据 while(1) {

/*设置温湿度警戒 蜂鸣器报警*/

if((Table_Data[2]>30)|(Table_Data[0]>60)) Alarm_Beep();

else GPIO_WriteLow(GPIOD,GPIO_PIN_4); Init_Max7219(); //初始化Max7219 /*取温度数据各个位数值*/ temp_1=Table_Data[2]/10; temp_2=Table_Data[2]; temp_4=Table_Data[3]/10; temp_5=Table_Data[3]; /*取湿度数据各个位数值*/ humi_1=Table_Data[0]/10; humi_2=Table_Data[0]; humi_4=Table_Data[1]/10; humi_5=Table_Data[1];

/*按键切换显示温湿度*/ if(_Turn>0)

Display_Temp(); else

Display_Humi(); } } }

/*蜂鸣器报警函数*/ void Alarm_Beep() {

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);

14 / 22

电 气 学 院 创 新 设 计 说 明 书

BEEP_DeInit();

BEEP_Init(BEEP_FREQUENCY_1KHZ); BEEP_LSICalibrationConfig(12800); BEEP_Cmd(ENABLE);

GPIO_WriteHigh(GPIOD,GPIO_PIN_4);//蜂鸣器响 }

void ceshi_on(void)//用LED灯来测试程序运行情况 {

GPIO_Init(GPIOE, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_WriteLow(GPIOE, GPIO_PIN_5); }

void ceshi_off(void) {

GPIO_WriteHigh(GPIOE, GPIO_PIN_5); }

/*********************TIM2配置*****************************/ void TIM2_Configuration() {

TIM2_DeInit();

TIM2_ClearITPendingBit(TIM2_IT_UPDATE);

TIM2_TimeBaseInit(TIM2_PRESCALER_8192,0xF42);//2秒产生一次中断 TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE);//启动定时器2 enableInterrupts();//开总中断 }

/*********************按键配置*****************************/ void KEY_Init(void) {

GPIO_Init(KEY_PORT,KEY_PIN,GPIO_MODE_IN_PU_IT);

EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOE, EXTI_SENSITIVITY_FALL_ONLY);//只有下降沿触发

enableInterrupts(); }

/*********************中断服务函数*****************************/ #pragma vector=9

__interrupt void EXTI_PORTE_IRQHandler(void)//按键中断切换显示服务函数 {

_Turn=-_Turn;

15 / 22


基于stm8的温湿度测量仪 - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:概率论与数理统计作业及解答

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: