STM32驱动1602A 8086协议[通俗易懂]

2022-11-08 19:13:54 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

本来想学I2C发现1602上没有I2C的接口,他是8086并口的就先把它搞了

//1602的外设文件 #include “lcd1602.h” #include “sys.h” #include “delay.h” #include “stdio.h”

void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_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; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); }

void LCD1602_Wait_Ready(void) { u8 sta;

DATAOUT(0xff);//8¸ö¿ÚÈ«²¿Ö®¸ß LCD_RS_Clr(); LCD_RW_Set(); do { LCD_EN_Set(); delay_ms(5); sta = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7); LCD_EN_Clr(); }while(sta & 0x80);//¼ì²âbusy×î¸ßλ0²»Ã¦ }

void LCD1602_Write_Cmd(u8 cmd)//дָÁî { // if(busy) LCD1602_Wait_Ready(); DATAOUT(cmd); LCD_RS_Clr(); LCD_RW_Clr();

LCD_EN_Set(); LCD_EN_Clr(); // printf(“%d”,cmd); }

void LCD1602_Write_Dat(u8 dat)//дÊý¾Ý { LCD1602_Wait_Ready(); DATAOUT(dat); LCD_RS_Set(); LCD_RW_Clr();

LCD_EN_Set(); LCD_EN_Clr(); }

void LCD1602_ClearScreen(void) { LCD1602_Write_Cmd(0x01); }

void LCD1602_Set_Cursor(u8 x, u8 y) { u8 addr;

if (y == 0) addr = 0x00 x; else addr = 0x40 x; LCD1602_Write_Cmd(addr | 0x80); }

void LCD1602_Show_Str(u8 x, u8 y, u8 *str) { LCD1602_Set_Cursor(x, y); while(*str != ‘’) { LCD1602_Write_Dat(*str ); } }

void LCD1602_Init(void) { GPIO_Configuration(); delay_ms(15); LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú delay_ms(5); LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú delay_ms(5); LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú delay_ms(5); LCD1602_Write_Cmd(0x38); //162ÏÔʾ£¬57µãÕó£¬8λÊý¾Ý¿Ú LCD1602_Write_Cmd(0x08); //¿ªÏÔʾ£¬¹â±ê¹Ø±Õ LCD1602_Write_Cmd(0x01); //ÎÄ×Ö²»¶¯£¬µØÖ·×Ô¶¯ 1 LCD1602_Write_Cmd(0x06); //ÇåÆÁ LCD1602_Write_Cmd(0x0c); //ÇåÆÁ

} //头文件 #ifndef __LCD1602_H #define __LCD1602_H #include “sys.h” #define LCD_RS_Set() GPIO_SetBits(GPIOB, GPIO_Pin_5) #define LCD_RS_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_5) #define LCD_RW_Set() GPIO_SetBits(GPIOB, GPIO_Pin_6) #define LCD_RW_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_6) #define LCD_EN_Set() GPIO_SetBits(GPIOB, GPIO_Pin_7) #define LCD_EN_Clr() GPIO_ResetBits(GPIOB, GPIO_Pin_7) #define DATAOUT(x) GPIO_Write(GPIOA, x)

void GPIO_Configuration(void); void LCD1602_Wait_Ready(void); void LCD1602_Write_Cmd(u8 cmd); void LCD1602_Write_Dat(u8 dat); void LCD1602_ClearScreen(void); void LCD1602_Set_Cursor(u8 x, u8 y); void LCD1602_Show_Str(u8 x, u8 y, u8 *str); void LCD1602_Init(void); #endif //主函数 #include “led.h” #include “lcd1602.h” #include “delay.h” #include “sys.h” #include “usart.h”

int main(void) {

delay_init();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ uart_init(115200); //´®¿Ú³õʼ»¯Îª115200 LCD1602_Init(); LCD1602_Show_Str(4, 0, “L B”); LCD1602_Show_Str(4, 1, “FIGHTING”); // LCD1602_Set_Cursor(2, 1); printf(“123456rn”);

while(1) { delay_ms(10); } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/190838.html原文链接:https://javaforall.cn

0 人点赞