编写stm32f103c6t6用LCD1602显示数字的代码
时间: 2024-01-04 09:04:37 浏览: 18
以下是使用STM32F103C6T6和LCD1602显示数字的基本代码:
```c
#include "stm32f10x.h"
#include "delay.h"
void LCD_Init(void);
void LCD_Write_Command(uint8_t command);
void LCD_Write_Char(uint8_t data);
void LCD_Write_String(char *str);
void LCD_Set_Cursor(uint8_t row, uint8_t col);
void LCD_Clear(void);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 打开 GPIOC 时钟
GPIO_InitTypeDef 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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure); // 初始化 GPIOC
LCD_Init(); // 初始化 LCD
LCD_Clear(); // 清空 LCD
while (1)
{
LCD_Set_Cursor(0, 0); // 设置光标位置为第一行第一列
LCD_Write_String("Count: 0"); // 显示数字
for (int i = 1; i <= 10; i++)
{
LCD_Set_Cursor(0, 7); // 设置光标位置为第一行第八列
LCD_Write_Char(i + '0'); // 显示数字
delay_ms(1000); // 等待1秒
}
}
}
void LCD_Init(void)
{
delay_ms(50); // 延时50毫秒等待 LCD 上电稳定
LCD_Write_Command(0x38); // 初始化 LCD
LCD_Write_Command(0x0C); // 关闭光标
LCD_Write_Command(0x06); // 光标右移
LCD_Write_Command(0x01); // 清空 LCD
}
void LCD_Write_Command(uint8_t command)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_0); // RS = 0 表示写入指令
GPIO_Write(GPIOC, (command >> 4) & 0x0F); // 高 4 位写入
GPIO_SetBits(GPIOC, GPIO_Pin_2); // 使 E = 1
delay_us(1); // 等待 E 线电平稳定
GPIO_ResetBits(GPIOC, GPIO_Pin_2); // 使 E = 0
GPIO_Write(GPIOC, command & 0x0F); // 低 4 位写入
GPIO_SetBits(GPIOC, GPIO_Pin_2); // 使 E = 1
delay_us(1); // 等待 E 线电平稳定
GPIO_ResetBits(GPIOC, GPIO_Pin_2); // 使 E = 0
}
void LCD_Write_Char(uint8_t data)
{
GPIO_SetBits(GPIOC, GPIO_Pin_0); // RS = 1 表示写入数据
GPIO_Write(GPIOC, (data >> 4) & 0x0F); // 高 4 位写入
GPIO_SetBits(GPIOC, GPIO_Pin_2); // 使 E = 1
delay_us(1); // 等待 E 线电平稳定
GPIO_ResetBits(GPIOC, GPIO_Pin_2); // 使 E = 0
GPIO_Write(GPIOC, data & 0x0F); // 低 4 位写入
GPIO_SetBits(GPIOC, GPIO_Pin_2); // 使 E = 1
delay_us(1); // 等待 E 线电平稳定
GPIO_ResetBits(GPIOC, GPIO_Pin_2); // 使 E = 0
}
void LCD_Write_String(char *str)
{
while (*str)
{
LCD_Write_Char(*str++);
}
}
void LCD_Set_Cursor(uint8_t row, uint8_t col)
{
uint8_t address = col;
switch (row)
{
case 0:
address |= 0x80;
break;
case 1:
address |= 0xC0;
break;
case 2:
address |= 0x94;
break;
case 3:
address |= 0xD4;
break;
}
LCD_Write_Command(address);
}
void LCD_Clear(void)
{
LCD_Write_Command(0x01);
delay_ms(2);
}
```
这个代码使用了一个延时函数 `delay_ms()` 和 `delay_us()`,你需要自行实现这些函数。此外,这个代码默认使用了 PC0~PC5 作为 LCD 的数据线,PC6 作为 RS,PC7 作为 RW,PC8 作为 E。你可以根据自己的需要修改这些引脚。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)