void Lcd_Init( void ) { Lcd_GPIO_init(); delay_us(1500); Lcd_Write_Command( 0x38,0); delay_us(500); Lcd_Write_Command( 0x38,0); delay_us(500); Lcd_Write_Command( 0x38,0); Lcd_Write_Command( 0x38,1); Lcd_Write_Command( 0x08,1); Lcd_Write_Command( 0x01,1); Lcd_Write_Command( 0x06,1); Lcd_Write_Command( 0x0C,1); }
时间: 2023-12-31 07:04:15 浏览: 46
这是一个LCD初始化函数,它的作用是对LCD进行初始化设置。函数中使用了Lcd_GPIO_init()函数来初始化LCD相关的GPIO引脚,然后延时1.5毫秒。接着使用了三次Lcd_Write_Command()函数发送0x38命令,这个命令用于设置LCD的数据总线为8位模式,并设置行数为单行或多行,字体大小为5x7或5x10。然后延时500微秒,并再次发送0x38命令。接下来发送0x08命令,用于关闭显示。然后发送0x01命令,用于清除显示屏。接着发送0x06命令,用于设置光标移动方向为从左到右。最后发送0x0C命令,用于打开显示。
相关问题
void I2C_3(unsigned char mcmd) { unsigned char length = 8; // Send Command while(length--) { if(mcmd & 0x80) { SDA3_1; } else { SDA3_0; } // uDelay(3); SCL3_1; // uDelay(3); SCL3_0; // uDelay(3); mcmd = mcmd << 1; } } void I2C_Ack3() { SDA3_1; // uDelay(3); SCL3_1; // uDelay(3); SCL3_0; // uDelay(3); } void I2C_NAck3() { SDA3_0; // uDelay(3); SCL3_1; // uDelay(3); SCL3_0; // uDelay(3); } void I2C_Start3() { SDA3_0; // uDelay(3); SCL3_1; // uDelay(3); SCL3_0; // uDelay(3); I2C_3(0x78); I2C_Ack3(); } void I2C_Stop3() { SCL3_1; // uDelay(5); SDA3_0; // uDelay(5); SDA3_1; // uDelay(5); } void Write_Command3(unsigned char Data) { I2C_Start3(); I2C_3(0x00); I2C_Ack3(); I2C_3(Data); I2C_Ack3(); I2C_Stop3(); } void Write_Data3(unsigned char Data) { I2C_Start3(); I2C_3(0x40); I2C_Ack3(); I2C_3(Data); I2C_Ack3(); I2C_Stop3(); } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= void pic13(void) { unsigned char i,j; unsigned int k; k=0; for(j=0;j<8;j++) { Write_Command3(0x22);//--set page1 Write_Command3(j);//--set start page Write_Command3(0x07);//--set end page for(i=0;i<128;i++) //ÏÔʾµ¥É«Êý¾Ýµ½LCD { Write_Data3(color13[k]); k=k+1; } } } void pic14(void) { Uchar i,j; Uint k; k=0; for(j=0;j<8;j++) { Write_Command3(0x22);//--set page1 Write_Command3(j);//--set start page Write_Command3(0x07);//--set end page for(i=0;i<128;i++) //ÏÔʾµ¥É«Êý¾Ýµ½LCD { Write_Data3(color14[k]); k=k+1; } } } void LCD_Init3(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructure); delay_ms(500);这些代码分别是什么意思
这段代码是通过STM32的I2C总线控制一个LCD显示屏的初始化和显示操作。具体来说:
1. I2C_3()函数是用来向I2C总线发送命令的,其中mcmd参数是要发送的命令。
2. I2C_Ack3()和I2C_NAck3()函数分别是用来发送应答信号和非应答信号的。
3. I2C_Start3()和I2C_Stop3()函数分别是用来发送起始信号和停止信号的。
4. Write_Command3()和Write_Data3()函数分别是用来向LCD屏幕写入指令和数据的。
5. pic13()和pic14()函数分别是用来显示13和14两个图像的。
6. LCD_Init3()函数则是用来初始化GPIO口,打开GPIOB时钟,并延时500ms。
编写stm32f103c6t6用LCD1602显示数字的代码
以下是使用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_3
#define D1 GPIO_Pin_4
#define D2 GPIO_Pin_5
#define D3 GPIO_Pin_6
#define D4 GPIO_Pin_7
#define D5 GPIO_Pin_8
#define D6 GPIO_Pin_9
#define D7 GPIO_Pin_10
void LCD_command(unsigned char command);
void LCD_data(unsigned char data);
void LCD_init();
void LCD_clear();
void LCD_send_string(char* string);
void LCD_send_number(int number);
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = RS | RW | EN | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
LCD_init();
while (1)
{
LCD_clear();
LCD_send_number(123456);
delay_ms(1000);
}
}
void LCD_command(unsigned char command)
{
GPIO_ResetBits(GPIOA, RS);
GPIO_ResetBits(GPIOA, RW);
GPIO_SetBits(GPIOA, EN);
GPIO_Write(GPIOA, (GPIO_ReadOutputData(GPIOA) & 0xFF00) | command);
delay_us(50);
GPIO_ResetBits(GPIOA, EN);
delay_us(50);
}
void LCD_data(unsigned char data)
{
GPIO_SetBits(GPIOA, RS);
GPIO_ResetBits(GPIOA, RW);
GPIO_SetBits(GPIOA, EN);
GPIO_Write(GPIOA, (GPIO_ReadOutputData(GPIOA) & 0xFF00) | data);
delay_us(50);
GPIO_ResetBits(GPIOA, EN);
delay_us(50);
}
void LCD_init()
{
delay_ms(15);
LCD_command(0x30);
delay_ms(5);
LCD_command(0x30);
delay_us(100);
LCD_command(0x30);
delay_us(100);
LCD_command(0x38);
LCD_command(0x06);
LCD_command(0x01);
LCD_command(0x0C);
}
void LCD_clear()
{
LCD_command(0x01);
delay_ms(2);
}
void LCD_send_string(char* string)
{
while (*string)
{
LCD_data(*string++);
}
}
void LCD_send_number(int number)
{
char buffer[16];
sprintf(buffer, "%d", number);
LCD_send_string(buffer);
}
```
这个代码使用了GPIOA作为LCD的控制信号。你需要在代码中根据你的硬件连接修改引脚定义。代码中使用了一个简单的delay函数,你需要提供一个合适的delay函数以满足你的需求。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![](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)