#define lcm_data p0
#define busy 0x80 //用于检测lcm状态字中的busy标识
//读状态
unsigned char readstatuslcm(void)
{
lcm_data = 0xff;
这个函数可以说是比较经典的,但是这个函数从适用的角度说不太经济!它使用的是
unsigned 作为返回 比较下来占用空间 其实对于busy的判别最好使用 bit型返回这样效率很高!另外给你给建议作为lcm的编程,在读写时不要使用延时函数!使用busy作为判别会事半功倍。应为延时函数在还系统的时候会发生时间上的改变!现在我自己在开发基于mcs-51的芯片,使用的时钟频率已经用到90mhz,你说这个延时程序怎么写?
给你一个通用的lcm测忙例程函数:
bit check_busy()
{
acc=lcd_command_port; //利用 acc 读取lcd端口返回字节;
return(acc^7);//利用acc可以实现位寻址返回busy位;
}
一般调用格式;
void write_command(unsigned char dat)
{
while(check_busy()==0);
lcd_command_port= dat;
}
这样你可以用最小的空间,实现工作,这样对于比较大得程序开发时,不需要为芯片的选型,时钟频率反覆的折腾程序。这样合理的编程同样可以使你的芯片的控制效率大大提高。
lcm_rs = 0;
lcm_rw = 1;
lcm_e = 0;
lcm_e = 0;
lcm_e = 1;
while (lcm_data & busy); //检测忙信号
return(lcm_data);
}
只有当lcm的状态变为不忙时,函数才会返回。