代码解释 void LCDWrite_String(uchar x, uchar y, uchar *s) { LCD_set_xy(x,y); while(*s) { LcdWriteData(*s); s++; } }
时间: 2023-05-31 20:04:20 浏览: 63
这是一个LCD显示屏的字符串输出函数,具体解释如下:
1. void:表示该函数没有返回值。
2. LCDWrite_String:函数名。
3. (uchar x, uchar y, uchar *s):函数的参数,其中x和y表示字符串输出的起始坐标,s表示要输出的字符串。
4. LCD_set_xy(x,y):设置LCD显示屏的光标位置为(x,y)。
5. while(*s):当字符串s未结束时执行下面的语句。
6. LcdWriteData(*s):将当前指向的字符输出到LCD显示屏上。
7. s++:指向下一个字符,实现字符串的逐个输出。
相关问题
void main() { int ttt; GPIO_init(); LcdInit(); while(1) { LcdWriteCom(0x01); LCDWrite_String(0, 1, " P: W"); while(state==0) {
这段代码看起来像是嵌入式开发中使用的,其中GPIO_init()应该是初始化GPIO口,LcdInit()应该是初始化LCD屏幕。while(1)表示程序会一直循环执行下去。
在while循环中,LcdWriteCom(0x01)是LCD的清屏指令。LCDWrite_String(0, 1, " P: W")是LCD屏幕上显示"P: W"这个字符串。
接下来,while(state==0)表示当state等于0时,执行循环内的操作。但是代码中没有给出state变量的定义和赋值,所以无法知道state的值是多少。
整个代码片段缺少上下文,无法准确地判断代码的功能和用途。
51单片机串行接收,并将其用LCD1602显示的汇编代码
以下是51单片机串行接收并用LCD1602显示的汇编代码:
```
ORG 0H
MOV P0,#0FFH ; P0口设置为输入
MOV P1,#0FFH ; P1口设置为输入
MOV P2,#0FFH ; P2口设置为输入
MOV P3,#0FFH ; P3口设置为输入
MOV TMOD,#20H ; 定时器1工作在方式2下
MOV TH1,#FDH ; 定时器1初值设为FDH
MOV SCON,#50H ; 串行口工作在模式1下
SETB TR1 ; 启动定时器1
SETB ES ; 使能串行中断
SETB EA ; 总中断使能
MOV DPTR,#LcdInit ; 初始化LCD
ACALL LcdWrite ; 调用写LCD子程序
MOV DPTR,#LcdClear ; 清屏
ACALL LcdWrite ; 调用写LCD子程序
MOV DPTR,#LcdPos ; 设定光标位置
ACALL LcdWrite ; 调用写LCD子程序
MOV A,#'R' ; 显示提示信息
ACALL LcdData ; 调用写LCD数据子程序
MOV A,#'e'
ACALL LcdData
MOV A,#'c'
ACALL LcdData
MOV A,#'e'
ACALL LcdData
MOV A,#'i'
ACALL LcdData
MOV A,#'v'
ACALL LcdData
MOV A,#'i'
ACALL LcdData
MOV A,#'n'
ACALL LcdData
MOV A,#'g'
ACALL LcdData
MOV A,#':'
ACALL LcdData
MOV R7,#0 ; 数据计数器清零
HERE:
JNB RI,HERE ; 等待串行数据接收完毕
CLR RI ; 清除接收中断标志
MOV A,SBUF ; 读取串行数据
MOV @R0,A ; 将数据存入存储器
INC R0 ; 存储器指针加1
INC R7 ; 计数器加1
CJNE R7,#16,HERE ; 判断是否接收完16个字节
MOV DPTR,#LcdPos ; 设定光标位置
ACALL LcdWrite ; 调用写LCD子程序
MOV A,@R1 ; 读取存储器数据
ACALL LcdData ; 调用写LCD数据子程序
INC R1 ; 存储器指针加1
DJNZ R7,HERE ; 判断是否显示完16个字节
SJMP HERE ; 循环等待串口数据
; 子程序:写LCD指令
LcdWrite:
MOVX A,@DPTR ; 读取指令
CLR RS ; RS=0,写入指令
CLR RW ; RW=0,写入模式
MOV P2,A ; 输出指令
SETB EN ; EN=1,启动LCD
CLR EN ; EN=0,停止LCD
RET
; 子程序:写LCD数据
LcdData:
MOVX A,@DPTR ; 读取数据
SETB RS ; RS=1,写入数据
CLR RW ; RW=0,写入模式
MOV P2,A ; 输出数据
SETB EN ; EN=1,启动LCD
CLR EN ; EN=0,停止LCD
RET
; LCD初始化指令
LcdInit:
DB 38H ; 8位数据接口,2行显示,5x7点阵字符
DB 0FH ; 显示开,光标开,光标闪烁开
DB 01H ; 清屏
DB 06H ; 光标右移,字符不移动
RET
; LCD清屏指令
LcdClear:
DB 01H ; 清屏
RET
; LCD设定光标位置指令
LcdPos:
DB 80H ; 设定光标位置为第1行第1列
RET
```
此代码实现了串口接收16个字节的数据,并通过LCD1602显示。其中,通过定时器1实现了串口中断,当接收到串口数据时,会触发中断并将数据存入存储器中。然后从存储器中读取数据并显示在LCD上。