lcd_write_char()的代码
时间: 2024-02-15 11:01:25 浏览: 19
以下是一个简单的lcd_write_char()函数的代码示例,用于在16x2的LCD屏幕上显示单个字符。
```c
void lcd_write_char(char c) {
// 写入字符到LCD缓存中
lcd_buffer[current_row][current_col++] = c;
// 如果当前列已满,则换行
if (current_col == 16) {
current_row++;
current_col = 0;
}
// 如果超出了16x2的范围,则回到第一行
if (current_row == 2) {
current_row = 0;
}
// 将光标移动到下一个位置
lcd_set_cursor(current_row, current_col);
}
```
其中,lcd_buffer是一个16x2的字符数组,表示LCD屏幕上的每个位置。current_row和current_col是当前光标的行和列位置。当一个字符被写入时,它被写入到lcd_buffer中的适当位置,然后光标位置被更新,以便下一个字符可以被写入到下一个位置。如果当前列已满,则光标位置将被移到下一行的第一个位置。如果超出了16x2的范围,则光标位置将被移到第一行的第一个位置。最后,lcd_set_cursor()函数被调用以将光标移动到下一个位置。
相关问题
void Dis_menu() { if(menu == 0) { LCD_Clear(); LCD_Write_String(0,0,"00:00:00"); LCD_Write_String(0,1,"00-00 Hum: %"); } else if(menu == 1) { LCD_Clear(); LCD_Write_String(0,0," Set time "); LCD_Write_String(0,1,"00-00 00:00:00 "); LCD_Write_Char(0,1,yue/16%16+0x30);LCD_Write_Char(1,1,yue%16+0x30); LCD_Write_Char(3,1,ri/16%16+0x30);LCD_Write_Char(4,1,ri%16+0x30); LCD_Write_Char(6,1,shi/16%16+0x30);LCD_Write_Char(7,1,shi%16+0x30); LCD_Write_Char(9,1,fen/16%16+0x30);LCD_Write_Char(10,1,fen%16+0x30); LCD_Write_Char(12,1,miao/16%16+0x30);LCD_Write_Char(13,1,miao%16+0x30); } else if(menu ==6) { LCD_Clear(); LCD_Write_String(0,0," Set chun "); LCD_Write_String(0,1," 00-00-00 S: "); LCD_Write_Char(1,1,A_shi/16%16+0x30);LCD_Write_Char(2,1,A_shi%16+0x30); LCD_Write_Char(4,1,A_fen/16%16+0x30);LCD_Write_Char(5,1,A_fen%16+0x30); LCD_Write_Char(7,1,A_miao/16%16+0x30);LCD_Write_Char(8,1,A_miao%16+0x30); LCD_Write_Number(13,1,shui1*10,3); } else if(menu ==10) { LCD_Clear(); LCD_Write_String(0,0," Set xia "); LCD_Write_String(0,1," 00-00-00 S: "); LCD_Write_Char(1,1,B_shi/16%16+0x30);LCD_Write_Char(2,1,B_shi%16+0x30); LCD_Write_Char(4,1,B_fen/16%16+0x30);LCD_Write_Char(5,1,B_fen%16+0x30); LCD_Write_Char(7,1,B_miao/16%16+0x30);LCD_Write_Char(8,1,B_miao%16+0x30); LCD_Write_Number(13,1,shui2*10,3); } else if(menu ==14) { LCD_Clear(); LCD_Write_String(0,0," Set qiu "); LCD_Write_String(0,1," 00-00-00 S: "); LCD_Write_Char(1,1,C_shi/16%16+0x30);LCD_Write_Char(2,1,C_shi%16+0x30); LCD_Write_Char(4,1,C_fen/16%16+0x30);LCD_Write_Char(5,1,C_fen%16+0x30); LCD_Write_Char(7,1,C_miao/16%16+0x30);LCD_Write_Char(8,1,C_miao%16+0x30); LCD_Write_Number(13,1,shui3*10,3); } else if(menu ==18) { LCD_Clear(); LCD_Write_String(0,0," Set dong "); LCD_Write_String(0,1," 00-00-00 S: "); LCD_Write_Char(1,1,D_shi/16%16+0x30);LCD_Write_Char(2,1,D_shi%16+0x30); LCD_Write_Char(4,1,D_fen/16%16+0x30);LCD_Write_Char(5,1,D_fen%16+0x30); LCD_Write_Char(7,1,D_miao/16%16+0x30);LCD_Write_Char(8,1,D_miao%16+0x30); LCD_Write_Number(13,1,shui4*10,3); } else if(menu ==22) { LCD_Clear(); LCD_Write_String(0,0,"Hum_L:"); LCD_Write_Number(6,0,hum_l,3); } } 对这段代码进行逐条注释
```c++
void Dis_menu() { //定义函数Dis_menu
if(menu == 0) { //如果当前菜单为0
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0,"00:00:00"); //在第0行第0列写入"00:00:00"
LCD_Write_String(0,1,"00-00 Hum: %"); //在第1行第0列写入"00-00 Hum: %"
} else if(menu == 1) { //如果当前菜单为1
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0," Set time "); //在第0行第0列写入" Set time "
LCD_Write_String(0,1,"00-00 00:00:00 "); //在第1行第0列写入"00-00 00:00:00 "
LCD_Write_Char(0,1,yue/16%16+0x30);LCD_Write_Char(1,1,yue%16+0x30); //在第1行第0列写入月份的十位数和个位数
LCD_Write_Char(3,1,ri/16%16+0x30);LCD_Write_Char(4,1,ri%16+0x30); //在第1行第3列写入日期的十位数和个位数
LCD_Write_Char(6,1,shi/16%16+0x30);LCD_Write_Char(7,1,shi%16+0x30); //在第1行第6列写入小时的十位数和个位数
LCD_Write_Char(9,1,fen/16%16+0x30);LCD_Write_Char(10,1,fen%16+0x30); //在第1行第9列写入分钟的十位数和个位数
LCD_Write_Char(12,1,miao/16%16+0x30);LCD_Write_Char(13,1,miao%16+0x30); //在第1行第12列写入秒钟的十位数和个位数
} else if(menu ==6) { //如果当前菜单为6
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0," Set chun "); //在第0行第0列写入" Set chun "
LCD_Write_String(0,1," 00-00-00 S: "); //在第1行第0列写入" 00-00-00 S: "
LCD_Write_Char(1,1,A_shi/16%16+0x30);LCD_Write_Char(2,1,A_shi%16+0x30); //在第1行第1列写入春季开始时间的小时的十位数和个位数
LCD_Write_Char(4,1,A_fen/16%16+0x30);LCD_Write_Char(5,1,A_fen%16+0x30); //在第1行第4列写入春季开始时间的分钟的十位数和个位数
LCD_Write_Char(7,1,A_miao/16%16+0x30);LCD_Write_Char(8,1,A_miao%16+0x30); //在第1行第7列写入春季开始时间的秒钟的十位数和个位数
LCD_Write_Number(13,1,shui1*10,3); //在第1行第13列写入水位的值
} else if(menu ==10) { //如果当前菜单为10
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0," Set xia "); //在第0行第0列写入" Set xia "
LCD_Write_String(0,1," 00-00-00 S: "); //在第1行第0列写入" 00-00-00 S: "
LCD_Write_Char(1,1,B_shi/16%16+0x30);LCD_Write_Char(2,1,B_shi%16+0x30); //在第1行第1列写入夏季开始时间的小时的十位数和个位数
LCD_Write_Char(4,1,B_fen/16%16+0x30);LCD_Write_Char(5,1,B_fen%16+0x30); //在第1行第4列写入夏季开始时间的分钟的十位数和个位数
LCD_Write_Char(7,1,B_miao/16%16+0x30);LCD_Write_Char(8,1,B_miao%16+0x30); //在第1行第7列写入夏季开始时间的秒钟的十位数和个位数
LCD_Write_Number(13,1,shui2*10,3); //在第1行第13列写入水位的值
} else if(menu ==14) { //如果当前菜单为14
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0," Set qiu "); //在第0行第0列写入" Set qiu "
LCD_Write_String(0,1," 00-00-00 S: "); //在第1行第0列写入" 00-00-00 S: "
LCD_Write_Char(1,1,C_shi/16%16+0x30);LCD_Write_Char(2,1,C_shi%16+0x30); //在第1行第1列写入秋季开始时间的小时的十位数和个位数
LCD_Write_Char(4,1,C_fen/16%16+0x30);LCD_Write_Char(5,1,C_fen%16+0x30); //在第1行第4列写入秋季开始时间的分钟的十位数和个位数
LCD_Write_Char(7,1,C_miao/16%16+0x30);LCD_Write_Char(8,1,C_miao%16+0x30); //在第1行第7列写入秋季开始时间的秒钟的十位数和个位数
LCD_Write_Number(13,1,shui3*10,3); //在第1行第13列写入水位的值
} else if(menu ==18) { //如果当前菜单为18
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0," Set dong "); //在第0行第0列写入" Set dong "
LCD_Write_String(0,1," 00-00-00 S: "); //在第1行第0列写入" 00-00-00 S: "
LCD_Write_Char(1,1,D_shi/16%16+0x30);LCD_Write_Char(2,1,D_shi%16+0x30); //在第1行第1列写入冬季开始时间的小时的十位数和个位数
LCD_Write_Char(4,1,D_fen/16%16+0x30);LCD_Write_Char(5,1,D_fen%16+0x30); //在第1行第4列写入冬季开始时间的分钟的十位数和个位数
LCD_Write_Char(7,1,D_miao/16%16+0x30);LCD_Write_Char(8,1,D_miao%16+0x30); //在第1行第7列写入冬季开始时间的秒钟的十位数和个位数
LCD_Write_Number(13,1,shui4*10,3); //在第1行第13列写入水位的值
} else if(menu ==22) { //如果当前菜单为22
LCD_Clear(); //清空LCD显示
LCD_Write_String(0,0,"Hum_L:"); //在第0行第0列写入"Hum_L:"
LCD_Write_Number(6,0,hum_l,3); //在第0行第6列写入湿度低值的值
}
}
```
解释这段代码: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'); }
这段代码定义了三个函数,分别为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函数写入该字符。