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

STM32驱动1602A 8086协议[通俗易懂]本来想学I2C发现1602上没有I2C的接口,他是8086并口的就先把它搞了//1602的外设文件#include“lcd1602.h”#include“sys.h”#include“delay.h”#include“stdio.h”voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;R…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本来想学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.net/190838.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 首选DNS服务器地址不显示,首选dns服务器如何设置?如何设置DNS地址

    首选DNS服务器地址不显示,首选dns服务器如何设置?如何设置DNS地址首选dns服务器如何设置?如何设置DNS地址分类:云服务资讯编辑:聊聊云计算浏览量:1652021-01-2915:18:29现在有很多朋友对于首选dns服务器的设置方法不是很了解,不知道如何操作,今天新网就给大家详细的介绍下首选dns服务器如何设置以及如何设置DNS地址等问题,希望提供些帮助。首选dns服务器怎么设置?在“开始”中找到“运行”或者直接【Win】+【R】,然后输入“cmd”进入管…

    2022年6月13日
  • recvfrom的参数

    recvfrom的参数今天遇到一个奇怪的问题。linux环境下gcc,socket中UDP的recvfrom函数原型ssize_trecvfrom(intsockfd,void*buf,intlen,unsignedintflags,structsockaddr*from,socket_t*fromlen);网上给出的最基本的UDP—echo服务器测试基本的是可以的。…

    2022年7月23日
  • spss聚类分析步骤详细解读_spss聚类分析实验报告

    spss聚类分析步骤详细解读_spss聚类分析实验报告目录快速聚类系统聚类分析二阶聚类分析快速聚类【分析】【分类】【k-均值聚类】,将变量移至变量框中,员工id移至【个案标注依据】框中【聚类数】是期望分成几组【保存】勾选【聚类成员】复选框结果解读:随机选择三个数据作为快速聚类的初始位置显示迭代次数,迭代过程可以理解为每个类别与初始位置之间的距离改变情况,当这个距离变动非常小,迭代就完成了…

    2022年10月9日
  • lseek函数

    lseek函数转自:https://baike.baidu.com/item/lseek/6385407?fr=aladdin相关函数dup,open,fseek表头文件#include#include定义函数off_tlseek(intfilde,off_toffset,intwhence);

    2022年6月29日
  • oracle srvctl命令,用srvctl命令配置service

    oracle srvctl命令,用srvctl命令配置service.用srvctl命令配置service除了用DBCA图形方式,还可以使用命令方式配置service,这种方法对于维护远程尤其有用。无论是创建还是维护都是用一个命令srvctl,先看一下srvctl命令和service相关的语法,如下:创建service[oracle@felix1~]$srvctladdservi.用srvctl命令配置service除了用DBCA图形方式,还可以使用…

    2022年9月12日
  • Chilkat—-开源站点之VS2010 CKMailMan一个很好的邮件发送开源开发包

    Chilkat—-开源站点之VS2010 CKMailMan一个很好的邮件发送开源开发包

    2022年2月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号