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);这些代码分别是什么意思
时间: 2023-12-07 17:03:59 浏览: 33
这段代码是通过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。
相关问题
void Send_Byte(unsigned char data) { while (!(UCA0IFG & UCTXIFG)) ; // USCI_A0 TX buffer ready? UCA0TXBUF = data; // TX -> RXed character }
这段代码定义了一个函数`Send_Byte`,用于向MSP430芯片的串口发送一个字节数据。
函数的参数是一个unsigned char类型的变量data,它表示要发送的数据。
函数实现的过程是先进入一个while循环,判断UCA0IFG寄存器的UCTXIFG位是否为1,如果不为1则说明USCI_A0的TX缓冲区还没有准备好,需要等待。一旦UCTXIFG位为1,则表示TX缓冲区已经准备好,可以向里面写入数据。
接着,将要发送的数据写入UCA0TXBUF寄存器,这个寄存器就是将要发送的数据缓存区。
最后,函数会自动返回,等待下一次调用。
void LCD1602_ShowNum(unsigned char x,unsigned char y,unsigned char *str,unsigned char i);
这是一个用于在LCD1602上显示数字的函数,函数原型如下:
```c
void LCD1602_ShowNum(unsigned char x, unsigned char y, unsigned char *str, unsigned char i);
```
函数参数说明:
- `x`:数字在LCD上显示的起始列位置,取值范围为0~15。
- `y`:数字在LCD上显示的起始行位置,取值为0或1。
- `str`:要显示的数字的字符数组,数组中每个元素存储一个数字字符。
- `i`:要显示的数字的位数,取值范围为1~4。
函数实现:
```c
void LCD1602_ShowNum(unsigned char x, unsigned char y, unsigned char *str, unsigned char i)
{
unsigned char j;
for(j=0; j<i; j++)
{
LCD1602_WriteData(x+j, y, str[j]);
}
}
```
该函数通过调用`LCD1602_WriteData()`函数将数字一个个显示在LCD屏幕上。注意,`LCD1602_ShowNum()`函数中的参数`str`是一个字符数组,因此在调用该函数时需要将数字转换为字符并存储在数组中。例如,要在LCD屏幕上显示数字1234,可以将其转换为字符数组并传递给`LCD1602_ShowNum()`函数:
```c
unsigned char num[4] = {'1', '2', '3', '4'};
LCD1602_ShowNum(0, 0, num, 4);
```