当前位置: 首页 > news >正文

肇庆做网站设计公司一整套vi系统包括哪些

肇庆做网站设计公司,一整套vi系统包括哪些,霍邱县住房和城乡建设局网站,昭通市有做网站的吗这一篇博客是为了实现温湿度的显示#xff0c;温湿度传感器将数据穿给单片机#xff0c;单片机又把数据送给LCD1602和蓝牙#xff0c;让温度和湿度可以再LCD1602显示屏和手机上显示#xff0c;它的执行逻辑和C51那里基本一样#xff0c;就是要修改程序#xff0c;在程序上…       这一篇博客是为了实现温湿度的显示温湿度传感器将数据穿给单片机单片机又把数据送给LCD1602和蓝牙让温度和湿度可以再LCD1602显示屏和手机上显示它的执行逻辑和C51那里基本一样就是要修改程序在程序上有略微的差距。至于LCD1602显示屏和dth11温度传感器怎么用 大家可以看看我C51有关的博客上面对于如何使用说的很详细http://t.csdnimg.cn/8DY1b   一、硬件介绍 名字图片作用32单片机--LCD1602显示屏显示温湿度具体的接线如下所示VSS -- GND VDD -- 5V VO -- GND ;RS -- B1, RW -- B2, E -- 10; BLA -- 5V, BLK -- GDN ; D0到D7 -- A0.到A7蓝牙模块与手机蓝牙通信在手机上显示温湿度TX接串口1的RXRX接串口1的TX温湿度传感器VCC接3.3V或5V,GND接地中间的DATE引脚接PB7继电器干控制电池为电机供电当温度或者湿度达到临界值后继电器闭合干电翅电机继电器三者组成的电路通路.继电器的VCC接3.3V电机-2节干电池-为电机提供电源 二、stm32Cube的配置 SYS,RCC,照旧我们要把如下图所示的GPIO口全部配置成推完输出初始状态为高电平 串口使用串口1对打开对应的中断如下图所示 三、代码部分 这里要说的是32单片机的引脚不同于C51,32单片机的引脚的输入和输出状态不能够同时出现。但是在dht11温度传感器里面温度传感器里面的date引脚与单片机的引脚相连接该单片机引脚既要输出信号启动温度传感器又要读入信号判断传感器是否工作因此我们没有在stm32Cube里配置该引脚PB7,而是自己手动配置。 #define DHT_VALUE HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) void DHT_GPIO_Init(uint32_t mode) {     GPIO_InitTypeDef GPIO_InitStruct {0};     __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin : PB8 */   GPIO_InitStruct.Pin GPIO_PIN_7;   GPIO_InitStruct.Mode mode;   GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;   HAL_GPIO_Init(GPIOB, GPIO_InitStruct); } void DHT11_Start() {     DHT_GPIO_Init(GPIO_MODE_OUTPUT_PP);//作为输出引脚启动温度传感器     DHT_HIGH;     DHT_LOW;     HAL_Delay(30);     DHT_HIGH;          DHT_GPIO_Init(GPIO_MODE_INPUT);作为输入引脚判断温度传感器是否工作     while(DHT_VALUE);     while(!DHT_VALUE);     while(DHT_VALUE); } 在LCD1602中我们写了输入数据还有输入指令的函数 void Write_Cmd_Func(char cmd) {     RS_LOW;     RW_LOW;     EN_LOW;     GPIOA-ODR cmd;     HAL_Delay(5);     EN_HIGH;     HAL_Delay(5);     EN_LOW; } void Write_Data_Func(char dataShow) {     RS_HIGH;     RW_LOW;     EN_LOW;     GPIOA-ODR dataShow;     HAL_Delay(5);     EN_HIGH;     HAL_Delay(5);     EN_LOW; } ODR代表输出数据寄存器  GPIOA-ODR cmd就是说我们要把cmd这个数据给到输出数据寄存器这样ODR就会把对应的内容给到LCD1602 在main函数里面 char message[16]; memset(message, 0, sizeof(message)); sprintf(message, Temp: %d.%d, datas[2], datas[3]); memset(message, 0, sizeof(message)); sprintf(message, Humi: %d.%d, datas[0], datas[1]); sprintf函数可以重映射把datas[i]里面的数据变成字符串存到 message里可以让LCD1602输出但是不能用做串口的输出串口输出依旧用printf函数在下面的main.c里有体现 memset函数是清除message里面的内容防止传输内容出错。 HAL_NVIC_SetPriority(SysTick_IRQn,0,0); 系统滴答定时器的优先级提前否则当你执行完中断里的命令后容易死机最好在main函数里加上 main.c的代码 #include main.h #include usart.h #include gpio.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include stdio.h #include string.h #include lcd1602.h #include dht11.h /* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD *//* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */ extern char datas[5]; extern uint8_t buf; /* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** brief The application entry point.* retval int*/ int main(void) {/* USER CODE BEGIN 1 */char message[16];/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit */ HAL_NVIC_SetPriority(SysTick_IRQn,0,0);/* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf(hello world\r\n);LCD1602_INIT();HAL_UART_Receive_IT(huart1, buf, 1); // Write_Cmd_Func(position);//选择要显示的地址 // Write_Data_Func(dataShow);//发送要显示的字符 // LCD1602_showLine(1,5,NO.2); // LCD1602_showLine(2,0,LX handsome);HAL_Delay(2000);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Read_Data_From_DHT();if(datas[2]24)HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);elseHAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);printf(Temp: %d.%d\r\n, datas[2], datas[3]);memset(message, 0, sizeof(message));sprintf(message, Temp: %d.%d, datas[2], datas[3]);LCD1602_showLine(1, 0, message);printf(Humi: %d.%d\r\n, datas[0], datas[1]);memset(message, 0, sizeof(message));sprintf(message, Humi: %d.%d, datas[0], datas[1]);LCD1602_showLine(2, 0, message);HAL_Delay(1000);} usart.c #include usart.h/* USER CODE BEGIN 0 */ #include stdio.h #include string.h//串口接收缓存1字节 uint8_t buf0;//定义最大接收字节数 200可根据需求调整 #define UART1_REC_LEN 200// 接收缓冲, 串口接收到的数据放在这个数组里最大UART1_REC_LEN个字节 uint8_t UART1_RX_Buffer[UART1_REC_LEN];// 接收状态 // bit15 接收完成标志 // bit14 接收到0x0d // bit13~0 接收到的有效字节数目 uint16_t UART1_RX_STA0;#define SIZE 12char buffer[SIZE];void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {// 判断中断是由哪个串口触发的if(huart-Instance USART1){// 判断接收是否完成UART1_RX_STA bit15 位是否为1if((UART1_RX_STA 0x8000) 0){// 如果已经收到了 0x0d 回车if(UART1_RX_STA 0x4000){// 则接着判断是否收到 0x0a 换行if(buf 0x0a){// 如果 0x0a 和 0x0d 都收到则将 bit15 位置为1UART1_RX_STA | 0x8000;// 灯控指令if(!strcmp(UART1_RX_Buffer, OPEN))HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);if(!strcmp(UART1_RX_Buffer, CLOSE))HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);memset(UART1_RX_Buffer, 0, UART1_REC_LEN);UART1_RX_STA 0;}else// 否则认为接收错误重新开始UART1_RX_STA 0;}else // 如果没有收到了 0x0d 回车{//则先判断收到的这个字符是否是 0x0d 回车if(buf 0x0d){// 是的话则将 bit14 位置为1UART1_RX_STA | 0x4000;}else{// 否则将接收到的数据保存在缓存数组里UART1_RX_Buffer[UART1_RX_STA 0X3FFF] buf;UART1_RX_STA;// 如果接收数据大于UART1_REC_LEN200字节则重新开始接收if(UART1_RX_STA UART1_REC_LEN - 1)UART1_RX_STA 0;}}}// 重新开启中断HAL_UART_Receive_IT(huart1, buf, 1);} }int fputc(int ch, FILE *f) { unsigned char temp[1]{ch};HAL_UART_Transmit(huart1,temp,1,0xffff); return ch; } 记得勾选Use Micro LIB dht11.c #include dht11.h #include gpio.h#define DHT_HIGH HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET) #define DHT_LOW HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET) #define DHT_VALUE HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7)char datas[5];void delay_us(uint16_t cnt) {uint8_t i;while(cnt){for (i 0; i 10; i){}cnt--;} }void DHT_GPIO_Init(uint32_t mode) {GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin : PB8 */GPIO_InitStruct.Pin GPIO_PIN_7;GPIO_InitStruct.Mode mode;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, GPIO_InitStruct); }void DHT11_Start() {DHT_GPIO_Init(GPIO_MODE_OUTPUT_PP);DHT_HIGH;DHT_LOW;HAL_Delay(30);DHT_HIGH;DHT_GPIO_Init(GPIO_MODE_INPUT);while(DHT_VALUE);while(!DHT_VALUE);while(DHT_VALUE); }void Read_Data_From_DHT(void) {int i;//轮int j;//每一轮读多少次char tmp;char flag;DHT11_Start();DHT_GPIO_Init(GPIO_MODE_INPUT);for(i 0;i 5;i){//卡g点while(!dht) 有效数据都是高电平持续时间不一样50us读低电平0 高电平for(j0;j8;j){while(!DHT_VALUE);//等待卡g点delay_us(40);if(DHT_VALUE 1){flag 1;while(DHT_VALUE);}else{flag 0;} tmp tmp 1;tmp | flag;}datas[i] tmp;} } lcd1602.c #include lcd1602.h #include gpio.h#define RS_GPIO_Port GPIOB #define RW_GPIO_Port GPIOB #define EN_GPIO_Port GPIOB #define RS_GPIO_PIN GPIO_PIN_1 #define RW_GPIO_PIN GPIO_PIN_2 #define EN_GPIO_PIN GPIO_PIN_10#define RS_HIGH HAL_GPIO_WritePin(RS_GPIO_Port, RS_GPIO_PIN, GPIO_PIN_SET) #define RS_LOW HAL_GPIO_WritePin(RS_GPIO_Port, RS_GPIO_PIN, GPIO_PIN_RESET) #define RW_HIGH HAL_GPIO_WritePin(RW_GPIO_Port, RW_GPIO_PIN, GPIO_PIN_SET) #define RW_LOW HAL_GPIO_WritePin(RW_GPIO_Port, RW_GPIO_PIN, GPIO_PIN_RESET) #define EN_HIGH HAL_GPIO_WritePin(EN_GPIO_Port, EN_GPIO_PIN, GPIO_PIN_SET) #define EN_LOW HAL_GPIO_WritePin(EN_GPIO_Port, EN_GPIO_PIN, GPIO_PIN_RESET)void Write_Cmd_Func(char cmd) {RS_LOW;RW_LOW;EN_LOW;GPIOA-ODR cmd;HAL_Delay(5);EN_HIGH;HAL_Delay(5);EN_LOW; }void Write_Data_Func(char dataShow) {RS_HIGH;RW_LOW;EN_LOW;GPIOA-ODR dataShow;HAL_Delay(5);EN_HIGH;HAL_Delay(5);EN_LOW; }void LCD1602_INIT(void) {//1延时 15msHAL_Delay(15); //2写指令 38H(不检测忙信号) Write_Cmd_Func(0x38); //3延时 5msHAL_Delay(5); //4以后每次写指令读/写数据操作均需要检测忙信号 //5写指令 38H显示模式设置Write_Cmd_Func(0x38); //6写指令 08H显示关闭Write_Cmd_Func(0x08); //7写指令 01H显示清屏Write_Cmd_Func(0x01); //8写指令 06H显示光标移动设置Write_Cmd_Func(0x06); //9写指令 0CH显示开及光标设置}Write_Cmd_Func(0x0c); }void LCD1602_showLine(char row, char col, char *string) {switch(row){case 1:Write_Cmd_Func(0x80col);while(*string){Write_Data_Func(*string);string;}break;case 2:Write_Cmd_Func(0x800x40col);while(*string){Write_Data_Func(*string);string;}break;} } 按照上述代码后连接实物打开对应的手机蓝牙APP连接就可以使用了。
http://www.pierceye.com/news/219473/

相关文章:

  • 网站建设对旅游意义公众号运营策划
  • 成都专业网站制作关于论文网站开发参考文献
  • 免费做代理郑州seo招聘
  • 做网站系统更新后wordpress
  • 兰州网站建站2024免费网站推广
  • 深圳模板建站企业网站出现搜索
  • app开发网站模板该网站正在紧急升级维护中
  • 公众号编辑器365保定seo推广
  • 陕西整站关键词自然排名优化外贸获客渠道有哪些
  • 网站策划需要具备什么福州高端建站
  • 域名注册没有网站美食网页设计素材图片
  • wordpress网站在哪里修改密码ps做网站要求高吗
  • 企业网站带商城源码Audiology wordpress
  • 星月教你做网站东营城乡建设局官网
  • 镇江网站建设开发旺店通erp系统
  • 体育直播网站建设深圳制作小程序
  • 手机微信管理系统搜索引擎优化的流程是什么
  • 壁纸公司网站源码做网站价格表
  • 潜江网站设计商务科技网站建设
  • 合肥企业网站制作网站开发公司简介
  • 德州市建设小学网站文员工作内容
  • 网站域名买卖营销技巧第三季在线观看
  • 西宁市公司网站建设比较网站建设
  • 深圳网站设计公司建设部人才网站
  • 广水住房和城乡建设部网站巅峰网站建设
  • 建设智能家居网站SWOT分析商业网站有哪些
  • 相亲网站男人拉我做外汇h5特效网站欣赏
  • 网站一个多少钱有什么做同城的网站
  • 网站 改版 方案wordpress谷歌字体 4.9
  • 全网引流推广 价格网站百度关键词seo排名优化