STM32 驱动1602液晶

摘要:
使用STM32f103c8t6 MCU驱动1602A LCD显示功能。上面的图片是写信息后的效果图。我使用STM32的核心系统,没有任何外围库功能:3.5版的库功能驱动模式:使用4线驱动模式的电源:STM32使用3.3v的电源,1602 LCD使用5v的电源(如果使用3.3v电源,则只能显示背光,其他数据无法显示)。杜邦管线的连接方式如上图所示:RS-˃C13,RW-˃C14,E-˃C15,D4-D7-˃A4-A7

利用STM32f103c8t6单片机驱动1602A液晶进行显示功能

STM32 驱动1602液晶第1张

上图即为写入信息后的效果图

本人用的是STM32的核心系统,无任何外设

库函数:3.5版本的库函数

驱动模式:采用4线驱动模式

供电:STM32采用3.3v供电,1602液晶采用5v供电(如果采用3.3v供电,只能显示背光,其他数据均无法显示)

上图所示的杜邦线的连接方法:
RS->C13,   RW->C14,   E->C15,  D4-D7->A4-A7

代码部分:
/****************************LCD.c**************************/

#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "LCD.h"
unsigned char LCD_PORT;

void LCD_delay(void)
{
unsigned int i,j;
for(i=0;i<800;i++)
for(j=0;j<800;j++);
}


void LCD_Write_Com(unsigned char c)
{
u16 f;
register unsigned char i;
GPIO_SetBits(GPIOA,GPIO_Pin_7);
LCD_RS_L();
LCD_RW_H();
do
{
LCD_E_H();
f=LCD_FLAG();
LCD_E_L();
}while(f==1);

LCD_RW_L();


i=c;
i&=0xf0;
GPIO_Write(GPIOA,i|0);
LCD_E_H();
LCD_delay();
LCD_E_L();


i=c<<4;
i&=0xf0;
GPIO_Write(GPIOA,i);
LCD_E_H();
LCD_delay();
LCD_E_L();


}


void LCD_Write_Data(unsigned char d)
{
u16 f;
register unsigned char i;
GPIO_SetBits(GPIOA,GPIO_Pin_7);
LCD_RS_L();
LCD_RW_H();
do
{
LCD_E_H();
f=LCD_FLAG();
LCD_E_L();
}while(f==1);

LCD_RS_H();
LCD_RW_L();


i=d;
i&=0xf0;
GPIO_Write(GPIOA,i);
LCD_E_H();
LCD_delay();
LCD_E_L();


i=(d<<4);
i&=0xf0;
GPIO_Write(GPIOA,i);
LCD_E_H();
LCD_delay();
LCD_E_L();
}


void LCD_INIT(void)
{
LCD_delay();
LCD_Write_Com(0x28);
LCD_Write_Com(0x01);
LCD_Write_Com(0x06);
LCD_Write_Com(0x0f);
}


void LCD_PUTS(unsigned char line,unsigned char col,unsigned char *s)
{
unsigned char i,addr;
if(line==1) addr=0x80;
else if(line==2) addr=0x80+0x40;
LCD_Write_Com(addr+col);
for(i=0;i<20;i++)
{
if(s[i]!=0)
LCD_Write_Data(s[i]);
else
break;
}
}

/*****************主函数中的端口设置***********************/

void Display_GPIO_Conf(void)
{

GPIO_InitTypeDef GPIO_InitIntructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitIntructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitIntructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitIntructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOC,&GPIO_InitIntructure);

GPIO_InitIntructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_Init(GPIOA,&GPIO_InitIntructure);

GPIO_InitIntructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitIntructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_Init(GPIOA,&GPIO_InitIntructure);


}

其中最为特殊的是:A7,需要将其设置为OD模式,外接上拉电阻,将其拉到5v,目的:将其变为准双向IO口,可以读取1602的忙状态信号。

免责声明:文章转载自《STM32 驱动1602液晶》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows API参考大全(转)iOS 控制台打印unicode 转中文汉字 UTF8String下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

STM32(13)——SPI

简介:   SPI,Serial Peripheral interface串行外围设备接口。   接口应用在:EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。   特点:高速的、全双工、同步的通信总线、占用4根线;可以同时发生和接收串行数据;可以当做主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护...

Stm32 ADC学习

stm32 ADC 简介 stm32的ADC是 12位逐次逼近型 模拟数字转换器;它包括18个通道,可以用来测量16个外部通道和2个内部通道.ADC转换的结果存放在16位数据寄存器(ADC规则数据寄存器,ADC_DR 和 ADC注入数据寄存器,ADC_JDCx)中,这个数据寄存器可以设置对齐方式为左对齐或右对齐. ADC通道与GPIO对应表(图片来自整点...

STM32 USB HID BarCodeReader不兼容问题的解决

STM32USB HID class的一部分 BarCodeScanner(条码枪)不兼容的解决 硬件构成 STM32F479-EVAL 评价板型号为FFTAA10AP条码枪 现象 最近用CubeMX生成的USB库做条形码枪的USB驱动,用的是HID协议。有的条形码枪,用标准的USB库一次就能成功。但是有的型号的条码枪貌似和标准USB库流程有所出入,执行后...

STM32一键下载电路设计原理

先放原理图(补充:图中的BOOT0通过10K的电阻接到地),再解释为什么这么设计: STM32启动方式:BOOT0和 BOOT1用于设置 STM32的启动方式 ,见下表: BOOT0=1,BOOT1=0:串口下载模式; BOOT0=0,BOOT1=X:程序启动模式,从内部flash启动。 设计思路:串口一键下载需要做的就是下载时,为串口下载模式,下载完...

STM32 ------ HardFault_Hander 中断函数

1、数组越界(对数组赋值) 正常情况,数组越界会进入 HardFault_Hander 中断函数的无线循环。 避免数组越界的一个方法是:每次使用数组前,检查要放入数据的数据长度是否大于数组长度,大于则进入while(1),方便定位,如果可以打印信息更好。  2、定义的局部数组过大,超过 IAR 设置的栈大小(未使用FreeRTOS) 单步运行时,刚执行完定...

一、STM32简介、选型及其目标

STM32简介 STM32系列是由意法半导体公司推出的ARM Cortex-M内核单片机,从字面上来看,ST为意法半导体公司的缩写,M是Microcontrollers即单片机的缩写,32代表32位 芯片系列 STM32系列芯片分类 STM32后缀的型号说明 模块准备 STM8S103F3P6 STM8S芯片,20引脚,8KB闪存,TSSOP封装,工...