|
- 帶中文字庫的LCD12864顯示幾個字的代碼.txt成熟不是心變老,而是眼淚在眼里打轉卻還保持微笑。把一切平凡的事做好既不平凡,把一切簡單的事做對既不簡單。下面是帶中文字庫的LCD12864
- #include<reg52.h>
- #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();
- SETB(CONTROL,RS); //RS = 1;
- CLRB(CONTROL,RW); //RW = 0;
- DATA = dat;
- SETB(CONTROL,E); //E = 1;
- CLRB(CONTROL,E); //E = 0;
- }
- /********************初始化**********************/
- //復位、通訊方式選擇
- /************************************************/
- void lcd_init(void)
- {
- SETB(CONTROL,RST);//復位RST=1
- SETB(CONTROL,PSB); //通訊方式為并口PSB = 1
- //send_com(0x34);//34H--擴充指令操作
- send_com(0x30);//功能設置,一次送8位數據,基本指令集
- send_com(0x0C);//0000,1100 整體顯示,游標off,游標位置off
- send_com(0x01);//0000,0001 清DDRAM
- send_com(0x02);//0000,0010 DDRAM地址歸位
- send_com(0x80);//1000,0000 設定DDRAM 7位地址000,0000到地址計數器AC
- }
-
- /*******************************************************************/
- // 設置顯示位置 xpos(1~16),tpos(1~4)
- /*******************************************************************/
- 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;
- default: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取0~7共八列,ypos1取0~3共四行。
- /**********************************************/
- void printstr(unsigned char xpos,unsigned char ypos,unsigned 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(str[n]);//顯示漢字時注意碼值,連續兩個碼表示一個漢字
- }
- }
-
- /********************清屏************************/
- //清屏
- /************************************************/
- 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) { }
- }
復制代碼
|
|