您的位置:首页 > 新闻 > 会展 > 吉林省头条新闻_新媒体营销和网络营销的区别_网址链接生成器_百度大全下载

吉林省头条新闻_新媒体营销和网络营销的区别_网址链接生成器_百度大全下载

2025/1/1 18:48:20 来源:https://blog.csdn.net/L_1068/article/details/144714057  浏览:    关键词:吉林省头条新闻_新媒体营销和网络营销的区别_网址链接生成器_百度大全下载
吉林省头条新闻_新媒体营销和网络营销的区别_网址链接生成器_百度大全下载
1、红外避障模块

红外避障模块不断发射红外信号,当红外信号:

1. 有反射回来,OUT 输出低电平,输出指示灯(绿灯)亮。

2. 没反射回来,OUT 输出高电平,输出指示灯(绿灯)灭。

2、实现项目文件

复制07-震动点灯项目文件,重命名13-红外避障模块

把红外避障接到B4口

把相应的函数名改一下就好

ia_flag

ia_flag_get();

ia_flag_set();

实现手挡住亮灯2秒

3、LCD1602(知识点介绍在C51笔记6中)

复制03-流水灯项目,重命名14-LCD1602模块

新建文件夹LCD1602以及对应的.c和.h文件

加载文件

编译

接线如下:

 4、LCD1602显示一个字符

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "LCD1602.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯lcd1602_init();lcd1602_show_char();//    led1_ON();
//    led1_OFF();while(1){ led1_ON();led2_OFF();delay_ms(500);led1_OFF();led2_ON();delay_ms(500);}
}

lcd1602.c

#include "LCD1602.h"
#include "delay.h"//RS引脚定义
#define RS_GPIO_Port GPIOB
#define RS_GPIO_Pin  GPIO_PIN_1
#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);
//RW引脚定义
#define RW_GPIO_Port GPIOB
#define RW_GPIO_Pin  GPIO_PIN_2
#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);
//EN引脚定义
#define EN_GPIO_Port GPIOB
#define EN_GPIO_Pin  GPIO_PIN_10
#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);//初始化lcd1602函数
void lcd1602_init(void)
{//初始化GPIOlcd1602_gpio_init();//上电初始化流程lcd1602_start_init();
}
void  lcd1602_gpio_init(void)
{GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct//打开时钟__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();//调用GPIOA初始化函数gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度gpio_initstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;//LED1对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;//上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOA,&gpio_initstruct);//调用GPIOB初始化函数gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度gpio_initstruct.Pin = GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_10;//LED1对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;//上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOB,&gpio_initstruct);
}void  lcd1602_start_init(void)
{
//(1)延时 15ms delay_ms(15);
//(2)写指令 38H(不检测忙信号) lcd1602_write_cmd(0x38);
//(3)延时 5ms delay_ms(5);
//(4)以后每次写指令,读/写数据操作均需要检测忙信号 
//(5)写指令 38H:显示模式设置 lcd1602_write_cmd(0x38);
//(6)写指令 08H:显示关闭 lcd1602_write_cmd(0x08);
//(7)写指令 01H:显示清屏 lcd1602_write_cmd(0x01);
//(8)写指令 06H:显示光标移动设置 lcd1602_write_cmd(0x06);
//(9)写指令 0CH:显示开及光标设置 lcd1602_write_cmd(0x0C);}//写指令
void lcd1602_write_cmd(char cmd)
{RS_LOW;RW_LOW;EN_LOW;GPIOA->ODR = cmd;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}
//写数据
void lcd1602_write_data(char dataShow)
{RS_HIGH;RW_LOW;EN_LOW;GPIOA->ODR = dataShow;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}
//在一般情况下,不会让其读数据寄存器和指令寄存器的,因为用处不大,故在这里先不写了
//lcd1602显示内容,行,列,数据
void lcd1602_show_char()
{//在哪里显示?lcd1602_write_cmd(0x80+0x02);//显示什么?lcd1602_write_data('L');
}

lcd1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__#include "sys.h"void lcd1602_gpio_init(void);
void lcd1602_start_init(void);
void lcd1602_init(void);
void lcd1602_write_cmd(char cmd);
void lcd1602_write_data(char dataShow);
void lcd1602_show_char(void);#endif
5、显示一行字符串

main.c

#include "sys.h"
#include "delay.h"
#include "led.h"
#include "LCD1602.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */led_init();//初始化led灯lcd1602_init();lcd1602_show_char();lcd1602_show_line(1,1,"hello");//第一行,第一列开始显示字符lcd1602_show_line(2,2,"word");//    led1_ON();
//    led1_OFF();while(1){ led1_ON();led2_OFF();delay_ms(500);led1_OFF();led2_ON();delay_ms(500);}
}

lcd1602.c

#include "LCD1602.h"
#include "delay.h"//RS引脚定义
#define RS_GPIO_Port GPIOB
#define RS_GPIO_Pin  GPIO_PIN_1
#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);
//RW引脚定义
#define RW_GPIO_Port GPIOB
#define RW_GPIO_Pin  GPIO_PIN_2
#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);
//EN引脚定义
#define EN_GPIO_Port GPIOB
#define EN_GPIO_Pin  GPIO_PIN_10
#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);//初始化lcd1602函数
void lcd1602_init(void)
{//初始化GPIOlcd1602_gpio_init();//上电初始化流程lcd1602_start_init();
}
void  lcd1602_gpio_init(void)
{GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct//打开时钟__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();//调用GPIOA初始化函数gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度gpio_initstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3| GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;//LED1对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;//上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOA,&gpio_initstruct);//调用GPIOB初始化函数gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度gpio_initstruct.Pin = GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_10;//LED1对应的引脚gpio_initstruct.Pull = GPIO_PULLUP;//上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(GPIOB,&gpio_initstruct);
}void  lcd1602_start_init(void)
{
//(1)延时 15ms delay_ms(15);
//(2)写指令 38H(不检测忙信号) lcd1602_write_cmd(0x38);
//(3)延时 5ms delay_ms(5);
//(4)以后每次写指令,读/写数据操作均需要检测忙信号 
//(5)写指令 38H:显示模式设置 lcd1602_write_cmd(0x38);
//(6)写指令 08H:显示关闭 lcd1602_write_cmd(0x08);
//(7)写指令 01H:显示清屏 lcd1602_write_cmd(0x01);
//(8)写指令 06H:显示光标移动设置 lcd1602_write_cmd(0x06);
//(9)写指令 0CH:显示开及光标设置 lcd1602_write_cmd(0x0C);}//写指令
void lcd1602_write_cmd(char cmd)
{RS_LOW;RW_LOW;EN_LOW;GPIOA->ODR = cmd;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}
//写数据
void lcd1602_write_data(char dataShow)
{RS_HIGH;RW_LOW;EN_LOW;GPIOA->ODR = dataShow;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}
//在一般情况下,不会让其读数据寄存器和指令寄存器的,因为用处不大,故在这里先不写了
//lcd1602显示内容,行,列,数据
void lcd1602_show_char()
{//在哪里显示?lcd1602_write_cmd(0x80+0x02);//显示什么?lcd1602_write_data('L');
}
void lcd1602_show_line(char row,char col,char *string)
{switch(row){case 1:lcd1602_write_cmd(0x80 + col);while(*string){lcd1602_write_data(*string);string++;}break;case 2:lcd1602_write_cmd(0x80 + 0x40+col);while(*string){lcd1602_write_data(*string);string++;}break;}
}

lcd1602.h

#ifndef __LCD1602_H__
#define __LCD1602_H__#include "sys.h"void lcd1602_gpio_init(void);
void lcd1602_start_init(void);
void lcd1602_init(void);
void lcd1602_write_cmd(char cmd);
void lcd1602_write_data(char dataShow);
void lcd1602_show_char(void);
void lcd1602_show_line(char row,char col,char *string);#endif

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com