基于 STM32 实现的温度控制系统 TFTLCD 蜂鸣器

主要功能:
本系统采用 STM32f103ZET6 作为主控芯片,能对 DS18B20 采集到的信息进行解算,并将结果显示在 TFTLCD 显示屏上面,并可以通过两个按键实现设定温度加减到设定温度,同时温度大于设定阈值,会进行报警。
使用 TIM2 进行计数,采集时间为 50ms 采集一次。
在这里插入图片描述
在这里插入图片描述

真实温度和设定温度进行比较,大于设定温度,进行报警;小于设定温度,不出声音。
蜂鸣器采用 STM32F103ZET6 自带的蜂鸣器,也可改端口,应用外部蜂鸣器。
在这里插入图片描述
温度传感器应用 DS18B20,用三极管封装的传感器,同样也是采用板子上面的接口。也可进行更改应用外部成品模块。
在这里插入图片描述
按键采用 KEY0 和 KEY1,进行设定温度的改变,KEY0 为设定温度增加 1 度功能按钮,KEY1 为设定温度减小 1 度功能按钮。
在这里插入图片描述
同时通过 TFTLCD 屏幕显示出来真实温度和设定温度。
在这里插入图片描述

详细引脚信息在压缩包内的注意.txt。
资料在这个链接里面

基于 STM32 实现的温度控制系统 TFTLCD 蜂鸣器.zip

第一次发帖子,排版不太明白,下次争取做得更好。

  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
以下是基于STM32的2.8寸TFT LCD显示文字的代码示例: 首先,需要定义LCD的引脚和初始化LCD: ``` #define LCD_RST_Pin GPIO_PIN_2 #define LCD_RST_GPIO_Port GPIOB #define LCD_DC_Pin GPIO_PIN_12 #define LCD_DC_GPIO_Port GPIOB #define LCD_CS_Pin GPIO_PIN_13 #define LCD_CS_GPIO_Port GPIOB #define LCD_SPI hspi2 void LCD_Init(void){ HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_RESET); HAL_Delay(100); HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_SET); HAL_Delay(100); HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET); LCD_WriteCommand(0x11); // Sleep out HAL_Delay(120); LCD_WriteCommand(0x29); // Display on LCD_WriteCommand(0x3a); // Interface pixel format: 16 bits/pixel LCD_WriteData(0x05); LCD_WriteCommand(0x36); // Memory data access control LCD_WriteData(0x08); // BGR order LCD_WriteCommand(0x2a); // Column address set LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0xef); LCD_WriteCommand(0x2b); // Row address set LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteData(0x01); LCD_WriteData(0x3f); LCD_WriteCommand(0x2c); // Memory write } ``` 然后,可以使用以下代码在LCD上显示文字: ``` void LCD_DrawString(uint16_t x, uint16_t y, char* str, uint16_t color, uint16_t bgcolor, uint8_t fontsize){ LCD_SetCursor(x, y); LCD_WriteCommand(0x2c); // Memory write uint16_t i, j, k; uint16_t len = strlen(str); for(i = 0; i < len; i++){ uint8_t c = str[i]; if(c == '\n'){ y += fontsize * 8; LCD_SetCursor(x, y); continue; } for(j = 0; j < 8; j++){ uint8_t line; if(fontsize == 1){ line = Font_8x8[c][j]; }else{ line = Font_16x16[c * 16 + j]; line = ((line & 0x80) >> 7) | ((line & 0x40) >> 5) | ((line & 0x20) >> 3) | ((line & 0x10) >> 1) | ((line & 0x08) << 1) | ((line & 0x04) << 3) | ((line & 0x02) << 5) | ((line & 0x01) << 7); } for(k = 0; k < 8; k++){ if((line & (1 << k)) != 0){ LCD_WriteData(color); }else{ LCD_WriteData(bgcolor); } } } } } ``` 其中,`Font_8x8`和`Font_16x16`是字体库,可以根据需要使用其他字体库。`fontsize`表示字体大小,可以设置为1或2。`color`和`bgcolor`表示字体和背景颜色。 最后,可以在主函数中调用`LCD_DrawString`函数来显示文字: ``` int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI2_Init(); LCD_Init(); LCD_DrawString(10, 10, "Hello world!", LCD_COLOR_WHITE, LCD_COLOR_BLACK, 1); while(1) { } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值