尽管部分初学者对液晶屏的全部代码的理解存在困难,不过没关系,只要我们懂得如何运用它们各个函数的功能即可,大家下载进开发板之后观察实验现象再结合代码与注释慢慢细读掌握吧。
#include <reg52.h> #include <function.h>//详见第六章第8讲 #include <lcd.h> void main() { char x;//取值范围-128~127 u8 str1[] = "Good Good Study"; u8 str2[] = "Day Day Up!"; InitLcd1602();//初始化液晶屏 while (1) { LcdSetCursor(0,0);//把光标移到第一行第1格,准备写入内容 LcdWriteDat(87); //写入字符“W”的ASCII码值,让其显示字符W delay_ms(2000); //延时一段时间 LcdSetCursor(0,1);//把光标移到第二行第1格,准备写入内容 LcdWriteDat('X'); //字符'X'的ASCII码值为88,此种表达写法更加直观明白要显示的内容 delay_ms(2000); //延时一段时间 LcdFullClear(); //全部内容清除显示 delay_ms(2000); //延时一段时间 LcdShowStr(1, 0, str1);//第一行显示"Good Good Study" LcdShowStr(3, 1, str2);//第二行显示"Day Day Up" delay_ms(2000);//延时一段时间 LcdFullClear();//全部内容清除显示 delay_ms(2000);//延时一段时间 LcdShowStr_len(0, 0, "CALL TO 10086", 7);//只能显示字符串的前面7个字符,也就是只能显示“CALL TO” LcdShowStr_len(0, 1, str1, 11); //只能显示“Good Good S” delay_ms(2000);//延时一段时间 for(x=10;x>=0;x--) { LcdAreaClear(x, 1, 1);//间隔1秒,依次清除“S”、“ ”、“d”、“o”、“o”、“G”······ delay_ms(1000); } for(x=6;x>=0;x--) { LcdAreaClear(x, 0, 1);//间隔1秒,依次清除“O”、“T”、“ ”、“L”、“L”、“A”、“C” delay_ms(1000); } } }
有了这段代码,观察实验现象就能更加明白掌握各功能函数的用法了。
此时我们回到第十章第4节的printf_str函数观察下面这两段代码
while(*str != '\0') //连续发送字符串数据,直到检测到结束符 { SBUF=*str++; while(!TI); TI = 0; }
while(i>=0) //剩余低位都如实发送出去 { SBUF='0'+buf[i];//如果此时的buf[i]的值是1,那么电脑端窗口在“文本模式”下要想显示字符“1”,只需'0'+1,因为‘0’就是ASCII码值48 while(!TI); TI = 0; i--; }
学过了液晶屏代码的写法技巧,现在再阅读当初的这两段代码就能明白“SBUF=*str++;”是发送一个数组或者一个字符串的所有数据。
而“SBUF='0'+buf[i];”发送的就是字符’0’~’9’其中一个数据,因为buf[i]在前面的执行内容中规定了数值范围为0~9,
所以“ '0'+buf[i] ”本质就是“ '0'~'9' ”。
需要注意的是,‘0’代表的是ASCII码值,跟ASCII码值为0不一样。
ASCII码值为0时的字符是:‘\0’(也就是结束符)
ASCII码值为48时的字符是:‘0’
本文固定URL:https://www.dotcpp.com/course/390