12864液晶并口驱动C程序-6800时序详解

4星 · 超过85%的资源 需积分: 12 13 下载量 89 浏览量 更新于2024-09-14 收藏 5KB TXT 举报
"12864液晶显示屏的并行接口驱动程序,基于6800时序,已通过实际测试" 本文将详细讲解如何使用C语言编写12864 LCD(Liquid Crystal Display)并口驱动程序,适用于MD12864-1型号的液晶模块,采用6800系列的时序。程序中定义了必要的函数来初始化LCD、清除显示、发送命令和数据,以及在指定位置打印字符和字符串。 首先,我们引入所需的头文件,如`<reg52.h>`用于访问S51单片机的寄存器,以及`<math.h>`用于数学运算,尽管在这个例子中并未使用到`<math.h>`。 ```c #include<reg52.h> #include<math.h> ``` 定义了一些全局变量和常量,例如控制数据线的数据存储区`DATAP2`,控制信号线的端口`CONTROLP0`,以及E、RW、RS、PSB、RST等信号线的位定义。这些定义使得我们可以方便地操作相应的IO引脚: ```c #define DATAP2 P2 #define CONTROLP0 P0 #define E7 P0^7 #define RW6 P0^6 #define RS5 P0^5 #define PSB4 P0^4 #define RST3 P0^3 ``` 接下来,我们定义了几个基本的位操作宏,用于设置、清除或检查特定位: ```c #define SETB(x,y) (x|=(1<<y)) #define CLRB(x,y) (x&=(~(1<<y))) #define CHKB(x,y) (x&(1<<y)) ``` `chek_busy`函数是用于检测LCD是否忙,即是否可以接收新的命令或数据。该函数通过读取返回的高8位来判断,如果该位为1,则表示LCD正在处理数据,需要等待;为0则表示LCD可以接收新数据: ```c void chek_busy(void) { unsigned char temp1; CLRB(CONTROL, RS); // RS=0; SETB(CONTROL, RW); // RW=1; SETB(CONTROL, E); // E=1; do { temp1 = DATA; DATA = 0xFF; } while(temp1 & 0x80); SETB(CONTROL, E); // E=1; DATA = 0xFF; } ``` `lcd_init`函数用于初始化LCD,包括设置初始化命令,设置显示模式,清屏,打开显示,设定光标位置等。这些命令通常由LCD的规格说明书给出。 `clr_lcd`函数清除LCD上的所有显示内容。 `send_com`和`send_data`函数分别用于发送LCD命令和数据。它们首先检查忙标志,然后设置RS和RW的值,再将数据写入到数据线上,最后使能E信号完成数据传输。 `set_xy`函数用于设置LCD的光标位置。 `print`函数用于在指定位置打印一个字符,而`printstr`函数用于打印一串字符数组。这两个函数都会先调用`set_xy`设置位置,然后通过`send_data`发送字符数据。 在实际应用中,用户可以根据自己的需求调用这些函数,比如在初始化后,就可以通过`printstr`函数在指定位置显示字符串了。 总结来说,这个C程序提供了一套完整的12864 LCD并行接口驱动方案,适用于6800时序的MD12864-1液晶模块。通过理解和使用这些函数,开发者能够有效地控制液晶屏幕显示各种信息。