前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32驱动1602A 8086协议[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-11-08 19:13:54
4360
发布2022-11-08 19:13:54
举报
文章被收录于专栏:全栈程序员必看

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

本来想学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 != ‘\0’) { 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(“123456\r\n”);

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月22日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档