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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • myeclipse 注册码(8.5版本)「建议收藏」

    myeclipse 注册码(8.5版本)「建议收藏」ID:myEclipse8.5code:zLR8ZC-855575-75526156215269972ID:myEclipse8.51code:zLR8ZC-855575-7552615625006863ID:myEclipse8.52code:zLR8ZC-855575-7552615625006864ID:myEclipse8.53code…

    2022年9月30日
    3
  • stringbuild和stringbuffer的区别_string和stringbuilder的区别

    stringbuild和stringbuffer的区别_string和stringbuilder的区别JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数值不可改变的字符串.而这个StringBuffer类提供的字符串进行修改.当你知道字符数据要改变的时候你就可以使用 StringBuffer.典型地,你可以使用 StringBuffers来动态构造字符数据.一、String的使用方法:

    2022年9月21日
    4
  • Qt之msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set[通俗易懂]

    Qt之msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set[通俗易懂]最近用Qt5.10.0VS2015新建一个工程,构建时报如下错误:msvc-version.confloadedbutQMAKE_MSC_VERisn’tset解决方法:打开文件D:\Qt\Qt5.10.0\5.10.0\msvc2015\mkspecs\common\msvc-version.conf在其中添加版本QMAKE_MSC_VER=1900,如下图所

    2022年5月19日
    71
  • 网络攻防实验之缓冲区溢出攻击

    网络攻防实验之缓冲区溢出攻击这个实验是网络攻防课程实验中的一个,但是目前我还没有完全搞懂代码,以后有机会来补。也欢迎大佬指点一、实验目的和要求通过实验掌握缓冲区溢出的原理,通过使用缓冲区溢出攻击软件模拟入侵远程主机理解缓冲区溢出危害性,并理解防范和避免缓冲区溢出攻击的措施。二、实验原理和实验环境实验原理:缓冲区溢出(BufferOverflow)是目前非常普遍而且危…

    2022年7月12日
    30
  • linux查看nfs端口命令,LinuxNFS端口命令是什么? 爱问知识人

    linux查看nfs端口命令,LinuxNFS端口命令是什么? 爱问知识人在Linux系统中,我们也会常遇到NFS的设置。针对这方面,我们这次主要讲解一下LinuxNFS的端口配置。看看如何设置可以调节好防火墙和端口的设置。#LinuxNFS服务固定端口及防火墙配置#1。在LINUX上正常安装NFS服务2。修改/etc/service,添加以下内容(端口号必须在1024以下,且未被占用)#Localservicesmountd1011/tcp#rpc。mount…

    2022年6月27日
    51
  • BigDecimal.setScale用法总结「建议收藏」

    BigDecimal.setScale用法总结「建议收藏」1. BigDecimalnum1=newBigDecimal(2.225667);//这种写法不允许,会造成精度损失2. BigDecimalnum2=newB

    2022年8月1日
    7

发表回复

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

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