根据给定的文件信息,我们可以深入探讨液晶12864驱动程序的相关知识点,特别是针对带中文字库的驱动程序的实现与应用。 ### 液晶12864驱动程序简介 液晶12864驱动程序是用于控制128×64像素的液晶显示器的软件代码。这类显示器常用于各种嵌入式系统,如工业控制面板、仪器仪表、手持设备等,因为它们提供了足够的分辨率来显示复杂的图形和文本信息,同时功耗较低。在本案例中,驱动程序不仅支持基本的显示功能,还特别集成了中文字库,使得它能够直接显示中文字符,极大地提高了其在中文环境下的实用性。 ### 驱动程序的关键功能 1. **初始化**: `lcd_init()`函数负责对液晶屏进行初始化设置,包括选择通信模式(如本例中的PSB模式)、设置显示屏的工作模式(例如,8位数据总线、显示开/关状态、显示方向等)。 2. **清除屏幕**: `clr_lcd()`函数用于清空整个屏幕,将所有像素设置为背景色,为新的显示内容做准备。 3. **发送命令**: `send_com(cmd)`函数用于向液晶屏发送控制命令,这些命令可以控制显示屏的各种功能,比如设置显示模式、清除屏幕、设置显示位置等。 4. **发送数据**: `send_data(dat)`函数用于向液晶屏发送实际要显示的数据,如字符或图像的像素值。 5. **检查忙状态**: `chek_busy()`函数用于检查液晶屏是否处于忙碌状态,即正在处理之前的命令或数据。这一步骤对于确保命令和数据的正确顺序至关重要。 6. **设置显示位置**: `set_xy(xpos, ypos)`函数允许用户设定显示数据的起始位置,这对于多行或多列的布局非常有用。 7. **打印字符串**: `printstr(xpos, ypos, str, k)`函数可以将指定的字符串`str`显示在屏幕上的特定位置,其中`k`可能用于指定显示的字符串长度或其他格式选项。 ### 驱动程序的硬件接口 在提供的代码片段中,可以看到对硬件接口的定义: - `DATAP2`: 数据端口,用于发送数据和命令。 - `CONTROLP0`: 控制端口,用于控制信号如读写(RW)、寄存器选择(RS)、使能(E)、复位(RST)等。 - `E7`: 使能信号,当高电平有效时,液晶屏会接受数据或命令。 - `RW6`: 读写控制信号,决定是读取还是写入操作。 - `RS5`: 寄存器选择信号,用于区分命令或数据。 - `PSB4`: 通信模式选择信号,确定通信方式。 - `RST3`: 复位信号,用于初始化液晶屏。 ### 结论 液晶12864驱动程序是嵌入式系统中不可或缺的一部分,它通过软件实现了对硬件的精细控制,使复杂的显示功能变得简单易用。特别是对于需要显示中文字符的应用场景,带中文字库的驱动程序提供了极大的便利性,无需额外的编码转换工作,即可直接显示中文信息。通过理解并熟练掌握这些驱动程序的使用方法,开发者可以更高效地设计出功能丰富且用户体验良好的嵌入式系统产品。
#include <math.h>
void lcd_init(void);
void clr_lcd(void);
void send_com(unsigned char cmd);
void send_data(unsigned char dat);
void chek_busy(void);
void set_xy(unsigned char xpos,unsigned char ypos);
void print(unsigned char x,unsigned char y,char* str);
void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);
unsigned char code buf[4] ={0xbb,0xb6,0xd3,0xad};//欢迎
#define DATA P2
#define CONTROL P0
#define E 7 //并行的使能信号 sbit E = P0^7
#define RW 6 //并行的读写信号 sbit RW = P0^6
#define RS 5 //并行的指令数据选择信号 sbit RS = P0^5
#define PSB 4 //并/串行接口选择 sbit PSB = P0^4
#define RST 3 //复位 低电平有效 sbit RST = P0^3
#define SETB(x,y) (x|=(1<<y))
#define CLRB(x,y) (x&=(~(1<<y)))
#define CHKB(x,y) (x&(1<<y))
/********************测忙碌**********************/
//测忙碌子程序
//RS=0,RW=1,E=H,D0-D7=状态字
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;
}
/********************写命令**********************/
//写命令子程序
//
/************************************************/
void send_com(unsigned char cmd)/*写命令*/
{
chek_busy();
CLRB(CONTROL,RS); //RS = 0;
CLRB(CONTROL,RW); //RW = 0;
DATA = cmd;
SETB(CONTROL,E); //E = 1;
CLRB(CONTROL,E); //E = 0;
}
/********************写数据**********************/
//写数据子程序
//
/************************************************/
void send_data(unsigned char dat)
{
chek_busy();
剩余5页未读,继续阅读
- 粉丝: 35
- 资源: 13
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助