假设要写入的字符串为”Anystring”,那么以上代码中写入的是A, 如果要继续写入’n’,需要让p+1,重复以上步骤就可以将整个字符串写完。现在的问题是如何判断字符串有多少个字符呢?也就是说p=p+1要执行多少次呢?前面讲了,字符串有个0x00的结束标志符。因此这里我们可以用while(*p)循环,当p自增时,字符串写完后*p为0,跳出while循环。代码如下:- #include "reg52.h"
- sbit RS=P2^7;
- sbit EN=P2^6;
- void LCD_init(void);
- void delayUs(unsigned char t);
- void delayMs(unsigned char t);
- void write_com(unsigned char mycmd);
- void write_data(unsigned char mydata);
- void write_string(unsigned char *p);
- void main(void)
- {
- LCD_init();
- write_com(0x0f);
- // write_data(0x41);
- write_string("Any String");
- while(1);
- }
- void LCD_init(void)
- {
- delayMs(15);
- write_com(0x38);
- delayMs(5);
- write_com(0x38);
- write_com(0x08);
- write_com(0x01);
- write_com(0x06);
- write_com(0x0c);
- }
- void write_data(unsigned char mydata)
- {
- delayMs(5);//注意这里需要延时5ms比较保险
- P0=mydata;
- RS=1;
- EN=1;
- delayUs(5);
- EN=0;
- }
- void write_string(unsigned char *p) //如何写一个字符串
- {
- while(*p)
- {
- write_data(*p);
- p++;
- }
- }
- void write_com(unsigned char mycmd)
- {
- delayMs(5);//注意这里需要延时5ms比较保险 代替判断忙信号
- P0=mycmd; //准备好指令
- RS=0; //告诉LCD1602,P0中放的是指令不是数据
- EN=1;
- delayUs(5); //根据时序图,脉冲要有一定宽度
- EN=0; //使指令有效,开始执行
- }
- void delayUs(unsigned char t)
- {
- while(--t);
- }
- void delayMs(unsigned char t)
- {
- while(--t)
- {
- delayUs(245);
- delayUs(245);
- }
- }
|