- 打卡等级:以坛为家III
- 打卡总天数:641
- 最近打卡:2025-10-10 07:47:09
荣誉版主
- 积分
- 4387
|
1, 这个LCD_DAT()和LCD_DATA()函数都是我自己定义的, 目的是简明, 前者发送8位,单字节数据, 后者是发送16位双字节数据. 搞清楚原理, 适当使用即可. 有时候写源程序比较简练, 属于个人爱好. 是可以灵活变化的.
2, 320*240显示屏切换横竖问题, 可以提供一下你的显示屏是什么驱动芯片的, 或许能帮你找找看解释一下.
3, 关于l=strlen(str); 这是求一个字符串长度的函数, 它是C语言中的标准函数,不需要自己编写的.它定义在string.h中, 只要在文件开始处加入#include <string.h>就可以使用此函数了.
(注意一下#include "string.h" 和#include <string.h>,虽然都可以,但还是有区别的.)
这里还牵涉到个人的习惯爱好问题.比如, 显示一个16点阵字体的字符串文本,函数咋写?
我的习惯是:
LCD_P16(u16 x,u16 y,char * str,u16 fc,u16 bc);
这里函数名称中P16就是Printf显示16点阵字体的意思, 后面就四个或五个参数: x,y,屏幕坐标,后跟具体字符串, 再就是指定前景色和背景色, 比较简明.(若是单色屏,可再省一个参数,简化为mode, 1或0,正显还是反显)
通常你可能会看到, 显示字符串的函数会这样写(外国人写源码往往如此):
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode,u8 len.....);
这里多了一些参数, 例如设定字体大小,还说明字符串的长度等等.
看似函数很通用, 算法很高级, 其实个人认为没必要的.
单片机编程, 可使用的字体是很少的,8,16,24,32,就那几种就足够用了.你把字体弄成是可以设定的, 实际上进入函数后, 还要增加判断字体大小的合法性, 计算字体的间隔和行距等等,要应对编程者使用不同大小字体的可能性, 反而将函数写得复杂难懂了.
另外再看len参数, C语言中字符串是以0x00为结束符的, 进入函数后只要调用strlen()就可计算出字符串的长度,因此不必要带这个参数来调用显示字符串函数的. 这也是回答了你,我为什么要用l=strlen(str)这样的语句了.
如果用通常的字符串显示函数来编程的话, 每当要显示字符串时, 就要想想,用多大的字体,别搞错了,算算字符串的长度该指定多少(缺少了灵活性)等等, 一是增加了源代码篇幅,二是也并不省心.
当然这是个人观点和习惯, 仅供参考了...
最后,感谢你节日的祝福. 本人乐见爱好单片机的同学. 交流也是快乐的. 愿你实验顺利愉快! |
|