《带中文字库的lcd12864显示几个字的代码》由会员分享,可在线阅读,更多相关《带中文字库的lcd12864显示几个字的代码(6页珍藏版)》请在金锄头文库上搜索。
1、带中文字库的带中文字库的 LCD12864LCD12864 显示几个字的代码显示几个字的代码下面是带中文字库的 LCD12864#include#include 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
2、 y,char* str);void printstr(unsigned char xpos,unsigned char ypos,unsigned char str,unsigned char k);unsigned char code buf4 =0xbb,0xb6,0xd3,0xad;/欢迎#define DATA P2#define CONTROL P0#define E 7 /并行的使能信号 sbit E = P07 #define RW 6 /并行的读写信号 sbit RW = P06 #define RS 5 /并行的指令数据选择信号 sbit RS = P05 #define
3、PSB 4 /并/串行接口选择 sbit PSB = P04#define RST 3 /复位 低电平有效 sbit RST = P03#define SETB(x,y) (x|=(1y)#define CLRB(x,y) (x/状态信息(判断是否忙) CLRB(CONTROL,RS); / RS = 0;SETB(CONTROL,RW); / RW = 1;SETB(CONTROL,E); / E = 1;dotemp1 = DATA;DATA=0xFF; while(temp1SETB(CONTROL,E); / E = 1;DATA=0xFF;/*写命令*/写命令子程序/*/void s
4、end_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();SETB(CONTROL,RS); /RS = 1;CLRB(CONTROL,RW); /RW = 0;DATA = dat;SETB(CONTROL,E); /
5、E = 1;CLRB(CONTROL,E); /E = 0;/*初始化*/复位、通讯方式选择/*/void lcd_init(void) SETB(CONTROL,RST);/复位 RST=1SETB(CONTROL,PSB); /通讯方式为并口 PSB = 1/send_com(0x34);/34H-扩充指令操作send_com(0x30);/功能设置,一次送 8 位数据,基本指令集send_com(0x0C);/0000,1100 整体显示,游标 off,游标位置 offsend_com(0x01);/0000,0001 清 DDRAMsend_com(0x02);/0000,0010 D
6、DRAM 地址归位send_com(0x80);/1000,0000 设定 DDRAM 7 位地址 000,0000 到地址计数器 AC/*/ 设置显示位置 xpos(116),tpos(14)/*/void set_xy(unsigned char xpos,unsigned char ypos)switch(ypos)case 1:send_com(0X80|xpos);break;case 2:send_com(0X90|xpos);break;case 3:send_com(0X88|xpos);break;case 4:send_com(0X98|xpos);break;defaul
7、t:break;/*/ 在指定位置显示字符串/*/void print(unsigned char x,unsigned char y,char* str) unsigned char lcd_temp; set_xy(x,y);lcd_temp=*str;while(lcd_temp != 0x00) send_data(lcd_temp);lcd_temp=*(+str); /*写字符串*/写字符串子程序/xpos1 取 07 共八列,ypos1 取 03 共四行。/*/void printstr(unsigned char xpos,unsigned char ypos,unsigned
8、 char str,unsigned char k) unsigned char n;switch (ypos) case 1: xpos |= 0x80;break; /第一行case 2: xpos |= 0x90;break; /第二行case 3: xpos |= 0x88;break; /第三行case 4: xpos |= 0x98;break; /第四行default: break;send_com(xpos); /此处的 Xpos 已转换为 LCM 的显示寄存器实际地址for(n=0;n k;n+) send_data(strn);/显示汉字时注意码值,连续两个码表示一个汉字/*清屏*/清屏/*/void clr_lcd(void)send_com(0x01);/send_com(0x34);/send_com(0x30);/*主函数*/void main () lcd_init(); /设定液晶工作方式printstr(1,1,buf,4);print(5,1,“光临“);print(0,3,“ SEEGU 百度空间“);while(1)