解释这段代码:void LCD_WrCmd(unsigned char dat) { LCD_Write(dat,COMMAND); } void LCD_WrDat(unsigned char dat) { LCD_Write(dat,DATA); } void LCD_WrNUM(unsigned char dat) { LCD_WrDat(dat+'0'); }
时间: 2023-12-06 10:42:23 浏览: 269
这段代码定义了三个函数,分别为LCD_WrCmd、LCD_WrDat和LCD_WrNUM。
函数LCD_WrCmd的作用是向液晶屏写入指令,参数dat为一个字节的无符号整数。该函数调用了另外一个函数LCD_Write,将dat和COMMAND作为参数传入。其中,COMMAND是一个常量,表示写入的是指令而不是数据。
函数LCD_WrDat的作用是向液晶屏写入数据,参数dat为一个字节的无符号整数。该函数调用了LCD_Write函数,将dat和DATA作为参数传入。其中,DATA是一个常量,表示写入的是数据而不是指令。
函数LCD_WrNUM的作用是向液晶屏写入数字,参数dat为一个字节的无符号整数,表示要写入的数字。该函数先将数字转换为字符,然后调用LCD_WrDat函数写入字符。具体来说,它将dat加上字符'0',得到对应的ASCII码,然后调用LCD_WrDat函数写入该字符。
相关问题
一句句的解释void Write_IIC_Byte(unsigned char IIC_Byte) { unsigned char i; unsigned char m,da; da=IIC_Byte; OLED_SCLK_Clr(); for(i=0;i<8;i++) { m=da; // OLED_SCLK_Clr(); m=m&0x80; if(m==0x80) {OLED_SDIN_Set();} else OLED_SDIN_Clr(); da=da<<1; OLED_SCLK_Set(); OLED_SCLK_Clr(); } } /********************************************** // IIC Write Command **********************************************/ void Write_IIC_Command(unsigned char IIC_Command) { IIC_Start(); Write_IIC_Byte(0x78); //Slave address,SA0=0 IIC_Wait_Ack(); Write_IIC_Byte(0x00); //write command IIC_Wait_Ack(); Write_IIC_Byte(IIC_Command); IIC_Wait_Ack(); IIC_Stop(); } /********************************************** // IIC Write Data **********************************************/ void Write_IIC_Data(unsigned char IIC_Data) { IIC_Start(); Write_IIC_Byte(0x78); //D/C#=0; R/W#=0 IIC_Wait_Ack(); Write_IIC_Byte(0x40); //write data IIC_Wait_Ack(); Write_IIC_Byte(IIC_Data); IIC_Wait_Ack(); IIC_Stop(); } void OLED_WR_Byte(unsigned dat,unsigned cmd) { if(cmd) { Write_IIC_Data(dat); } else { Write_IIC_Command(dat); } } /******************************************** // fill_Picture ********************************************/ void fill_picture(unsigned char fill_Data) { unsigned char m,n; for(m=0;m<8;m++) { OLED_WR_Byte(0xb0+m,0); //page0-page1 OLED_WR_Byte(0x00,0); //low column start address OLED_WR_Byte(0x10,0); //high column start address for(n=0;n<128;n++) { OLED_WR_Byte(fill_Data,1); } } } /***********************Delay****************************************/ void Delay_50ms(unsigned int Del_50ms) { unsigned int m; for(;Del_50ms>0;Del_50ms--) for(m=6245;m>0;m--); } void Delay_1ms(unsigned int Del_1ms) { unsigned char j; while(Del_1ms--) { for(j=0;j<123;j++); } }
这是一段嵌入式系统中使用的代码,用于控制OLED显示屏的显示。具体来说,这段代码实现了以下几个函数:
1. Write_IIC_Byte:向I2C总线上写入一个字节的数据;
2. Write_IIC_Command:向OLED显示屏写入一个命令;
3. Write_IIC_Data:向OLED显示屏写入一段数据;
4. OLED_WR_Byte:向OLED显示屏写入一个字节的数据,可以指定是命令还是数据;
5. fill_picture:填充整个OLED显示屏的像素点;
6. Delay_50ms:延时50毫秒;
7. Delay_1ms:延时1毫秒。
这些函数的具体实现细节可以参考代码中的注释。
C51读取LCD1602显示代码
以下是使用C51单片机读取LCD1602并显示的示例代码:
```
#include <reg52.h>
#define LCD_DATA P0
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
void delay(unsigned int i)
{
while(i--);
}
void write_command(unsigned char cmd)
{
RW = 0; // 设置为写模式
RS = 0; // 选择指令寄存器
LCD_DATA = cmd; // 向LCD发送指令
EN = 1; // 使能信号高电平
delay(5); // 延时
EN = 0; // 使能信号低电平
}
void write_data(unsigned char dat)
{
RW = 0; // 设置为写模式
RS = 1; // 选择数据寄存器
LCD_DATA = dat; // 向LCD发送数据
EN = 1; // 使能信号高电平
delay(5); // 延时
EN = 0; // 使能信号低电平
}
void init_lcd()
{
write_command(0x38); // 初始化LCD
write_command(0x0c); // 开启LCD显示,光标不显示
write_command(0x06); // 指定光标右移,字符不动
write_command(0x01); // 清空显示
}
void main()
{
init_lcd(); // 初始化LCD
write_data('H'); // 在LCD上显示字符H
write_data('e'); // 在LCD上显示字符e
write_data('l'); // 在LCD上显示字符l
write_data('l'); // 在LCD上显示字符l
write_data('o'); // 在LCD上显示字符o
while(1);
}
```
该代码使用了P0口作为LCD1602的数据线,P2^0、P2^1、P2^2分别作为LCD1602的RS、RW、EN信号线。在初始化函数init_lcd()中,依次发送了一些指令来初始化LCD1602,然后在主函数中使用write_data()函数向LCD1602中写入字符。
阅读全文