写一段stm32f103c8t6用LCD1602显示数字的程序
时间: 2023-08-11 22:07:00 浏览: 90
好的,以下是一段stm32f103c8t6用LCD1602显示数字的程序,代码中使用了寄存器编程的方式:
```c
#include "stm32f10x.h"
#define LCD_Port GPIOB
#define RS GPIO_Pin_8
#define EN GPIO_Pin_9
void LCD_Init(void);
void LCD_Cmd(char);
void LCD_Data(char);
void LCD_String(char*);
void delay_ms(int);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = RS | EN | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(LCD_Port, &GPIO_InitStructure);
LCD_Init();
while(1)
{
int num = 1234;
char str[10];
sprintf(str, "%d", num);
LCD_String(str);
delay_ms(1000);
}
return 0;
}
void LCD_Init()
{
delay_ms(15);
LCD_Cmd(0x30);
delay_ms(5);
LCD_Cmd(0x30);
delay_ms(1);
LCD_Cmd(0x30);
delay_ms(1);
LCD_Cmd(0x38);
LCD_Cmd(0x06);
LCD_Cmd(0x0C);
LCD_Cmd(0x01);
delay_ms(3);
}
void LCD_Cmd(char cmd)
{
LCD_Port->BRR = RS;
LCD_Port->ODR &= 0x00FF;
LCD_Port->ODR |= cmd << 8;
LCD_Port->BSRR = EN;
delay_ms(1);
LCD_Port->BRR = EN;
delay_ms(3);
}
void LCD_Data(char data)
{
LCD_Port->BSRR = RS;
LCD_Port->ODR &= 0x00FF;
LCD_Port->ODR |= data << 8;
LCD_Port->BSRR = EN;
delay_ms(1);
LCD_Port->BRR = EN;
delay_ms(3);
}
void LCD_String(char* str)
{
while(*str)
{
LCD_Data(*str++);
}
}
void delay_ms(int n)
{
int i;
for(; n > 0; n--)
for(i = 0; i < 3600; i++);
}
```
此程序需要连接LCD1602到stm32f103c8t6的GPIOB引脚,其中RS连接到GPIO_Pin_8,EN连接到GPIO_Pin_9。
在主函数中,将数字1234转换成字符串,再通过LCD_String函数将其显示在LCD1602上。程序中使用了delay_ms函数提供的延时功能,以确保LCD1602的正常显示。
阅读全文