lcd1602的stm32f103c6的代码.c和.h
时间: 2024-03-07 16:50:10 浏览: 61
以下是LCD1602的STM32F103C6驱动代码的头文件和源文件,供参考:
lcd1602.h
```c
#ifndef __LCD1602_H__
#define __LCD1602_H__
#include "stm32f10x.h"
void LCD_WriteCmd(unsigned char cmd);
void LCD_WriteData(unsigned char data);
void LCD_DisplayString(unsigned char x,unsigned char y,unsigned char *str);
void LCD_ClearScreen(void);
void LCD_Init(void);
#endif
```
lcd1602.c
```c
#include "lcd1602.h"
#include "delay.h"
#define LCD_RS_H GPIO_SetBits(GPIOB,GPIO_Pin_12)
#define LCD_RS_L GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define LCD_RW_H GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define LCD_RW_L GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define LCD_EN_H GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define LCD_EN_L GPIO_ResetBits(GPIOB,GPIO_Pin_14)
void LCD_WriteByte(unsigned char data)
{
LCD_EN_H;
Delay_us(5);
GPIO_Write(GPIOA,data);
LCD_EN_L;
Delay_us(5);
}
void LCD_WriteCmd(unsigned char cmd)
{
LCD_RS_L;
LCD_RW_L;
LCD_WriteByte(cmd);
}
void LCD_WriteData(unsigned char data)
{
LCD_RS_H;
LCD_RW_L;
LCD_WriteByte(data);
}
void LCD_ClearScreen(void)
{
LCD_WriteCmd(0x01);
Delay_ms(2);
}
void LCD_Init(void)
{
Delay_ms(20);
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x06);
LCD_WriteCmd(0x0c);
LCD_WriteCmd(0x01);
Delay_ms(2);
}
void LCD_DisplayString(unsigned char x,unsigned char y,unsigned char *str)
{
unsigned char i;
if(x>39) x=0;
if(y>1) y=0;
if(y==0) x|=0x80;
else x|=0xc0;
LCD_WriteCmd(x);
for(i=0;str[i]!='\0';i++)
{
LCD_WriteData(str[i]);
}
}
```
在使用时,需要先添加`lcd1602.h`头文件,然后在主函数中调用对应的函数即可。如下面的示例代码:
```c
#include "stm32f10x.h"
#include "lcd1602.h"
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
LCD_Init();
LCD_ClearScreen();
LCD_DisplayString(0,0,"Hello, World!");
while(1){}
}
```
注意,这里的代码中使用了一个名为`Delay_us`和`Delay_ms`的函数,这里默认已经实现。如果没有实现,需要自行添加。另外,这里的代码中使用了GPIOA和GPIOB两个GPIO口来控制LCD1602的数据线和控制线,你需要根据自己的实际情况修改GPIO口和引脚号。
阅读全文