1.题目要求
这次我们使用串口来实现液晶屏功能函数的执行,也就是说我们电脑端发送字符串“LcdFullClear();”给单片机,单片机就让液晶屏执行整屏清除;电脑端发送“LcdShowStr(1,0,"Good Good Study");”给单片机,液晶屏就在第一行显示“Good Good Study”。需要注意的是,我们的代码对这两个功能函数的判别是有严格规定的,如果发送的字符串中间有多出的空格,
也就是说当“LcdShowStr(1, 0, "Good Good Study");”逗号之间多出空格单片机则无法正常执行功能代码,所以要严格按照要求来发送字符串才能实现功能代码。
下面的代码笔者就不一一讲解实现的原理了,大家先下载进开发板,然后跟着教程去实践,后面再回过头分析原理。
2.main.c测试代码
#include #include #include #include u8 i=0; u8 pdata RXDBUF[64]; void COUNT_TIMES() { TMOD&=0xF0; //清0低四位 TMOD|=0x01; //设置定时器0为工作模式1 } void UART_LcdFullClear() { if( RXDBUF[0]== 'L'&&RXDBUF[1]== 'c'&&RXDBUF[2]== 'd'&&RXDBUF[3]=='F' &&RXDBUF[4]== 'u'&&RXDBUF[5]== 'l'&&RXDBUF[6]== 'l'&&RXDBUF[7]== 'C' &&RXDBUF[8]== 'l'&&RXDBUF[9]== 'e'&&RXDBUF[10]=='a'&&RXDBUF[11]=='r' ) { LcdFullClear();//整屏清除 } } void UART_LcdShowStr() { u8 lcd_x,lcd_y,z; if( RXDBUF[0]=='L'&&RXDBUF[1]=='c'&&RXDBUF[2]=='d'&&RXDBUF[3]=='S'&&RXDBUF[4]=='h' &&RXDBUF[5]=='o'&&RXDBUF[6]=='w'&&RXDBUF[7]=='S'&&RXDBUF[8]=='t'&&RXDBUF[9]=='r') { //以下是确定要在哪个位置开始显示,也就是知道坐标位置 if(RXDBUF[12]>='0'&&RXDBUF[12]<='9') //RXDBUF[11]接收到的肯定是字符'0'~'9',如果RXDBUF[12]接收到的也是字符'0'~'9', { //那么可以知道x坐标系是大于等于10的 lcd_x=(RXDBUF[11]-'0')*10; //比如我们发送的是“LcdShowStr(13,0,"YES");”, lcd_x+=RXDBUF[12]-'0'; //则有RXDBUF[11]==‘1’,RXDBUF[12]==‘3’ } else lcd_x=RXDBUF[11]-'0'; //如果x坐标小于10,也就是只是个位数,则只需处理RXDBUF[11] if(RXDBUF[14]>='0'&&RXDBUF[14]<='9') //如果RXDBUF[12]接收到的是字符'0'~'9', { //那么RXDBUF[13]==',',RXDBUF[14]就是决定y坐标 lcd_y=RXDBUF[14]-'0'; } else lcd_y=RXDBUF[13]-'0'; //如果RXDBUF[14]接收到的不是字符'0'~'9',那么x坐标为个位数,则由RXDBUF[13]决定y坐标 //以下是判断两种结果,一种是如果x坐标是小于10,也就是只有个位数, //那么RXDBUF[15]肯定是等于'"',如果x坐标是大于等于10,则RXDBUF[16]才是等于'"' if(RXDBUF[15]=='"') { for(z=1; ;z++) { if(RXDBUF[15+z]=='"') //当遇到第二个'"'时,表明要显示的字符串已经确定,此时需要添加结束符,然后退出for循环 { RXDBUF[15+z]='