编写stm32f103c6t6用LCD1602显示数字的代码
时间: 2024-01-04 17:04:04 浏览: 60
以下是一个简单的示例代码,可以在stm32f103c6t6上使用LCD1602显示数字:
```c
#include "stm32f10x.h"
#include "delay.h"
#define RS GPIO_Pin_0
#define RW GPIO_Pin_1
#define EN GPIO_Pin_2
#define D0 GPIO_Pin_8
#define D1 GPIO_Pin_9
#define D2 GPIO_Pin_10
#define D3 GPIO_Pin_11
#define D4 GPIO_Pin_12
#define D5 GPIO_Pin_13
#define D6 GPIO_Pin_14
#define D7 GPIO_Pin_15
void LCD_Command(unsigned char command)
{
GPIO_ResetBits(GPIOA, RS); // RS = 0
GPIO_ResetBits(GPIOA, RW); // RW = 0
GPIO_SetBits(GPIOA, EN); // EN = 1
GPIO_Write(GPIOB, command); // write command
delay_ms(1);
GPIO_ResetBits(GPIOA, EN); // EN = 0
delay_ms(1);
}
void LCD_Data(unsigned char data)
{
GPIO_SetBits(GPIOA, RS); // RS = 1
GPIO_ResetBits(GPIOA, RW); // RW = 0
GPIO_SetBits(GPIOA, EN); // EN = 1
GPIO_Write(GPIOB, data); // write data
delay_ms(1);
GPIO_ResetBits(GPIOA, EN); // EN = 0
delay_ms(1);
}
void LCD_Init()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = RS | RW | EN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
delay_ms(100);
LCD_Command(0x38);
delay_ms(5);
LCD_Command(0x38);
delay_ms(1);
LCD_Command(0x38);
delay_ms(1);
LCD_Command(0x0C);
delay_ms(1);
LCD_Command(0x01);
delay_ms(2);
LCD_Command(0x06);
delay_ms(1);
}
void LCD_DisplayNumber(unsigned int num)
{
char buf[16];
sprintf(buf, "%d", num);
for (int i = 0; buf[i] != '\0'; i++) {
LCD_Data(buf[i]);
}
}
int main(void)
{
LCD_Init();
while (1) {
unsigned int num = 1234;
LCD_Command(0x01);
LCD_DisplayNumber(num);
delay_ms(1000);
}
}
```
上述代码使用了一个自定义的 `delay_ms()` 函数,你需要自己实现这个函数,或者使用其他库中提供的延时函数。此外,我使用的是 `sprintf()` 函数将数字转换为字符串,如果你的系统中没有这个函数,你需要自己实现一个。
阅读全文