|
|
你這個(gè)是lcd 12864 st7920
給你個(gè)程序
- /**************************************************************************************
- (PRECHIN 普中)
- 實(shí)驗(yàn)名稱:LCD12864液晶顯示實(shí)驗(yàn)(帶字庫(kù))
- 接線說(shuō)明:
- 實(shí)驗(yàn)現(xiàn)象:下載程序后,LCD12864上顯示漢字字符信息
- 注意事項(xiàng):
- ***************************************************************************************/
- #include "reg52.h"
- typedef unsigned int u16; //對(duì)系統(tǒng)默認(rèn)數(shù)據(jù)類型進(jìn)行重定義
- typedef unsigned char u8;
- typedef unsigned long u32;
- //管腳定義
- sbit LCD12864_RS=P2^6; //數(shù)據(jù)命令選擇
- sbit LCD12864_WR=P2^5; //讀寫選擇
- sbit LCD12864_E =P2^7; //使能信號(hào)
- #define LCD12864_DATAPORT P0 //LCD12864數(shù)據(jù)端口定義
- sbit LCD12864_PSB=P3^2; //8位或4并口/串口選擇
- //函數(shù)聲明
- void lcd12864_init(void);
- void lcd12864_clear(void);
- void lcd12864_show_string(u8 x,u8 y,u8 *str);
- void delay_10us(u16 ten_us);
- void delay_ms(u16 ms);
- /*******************************************************************************
- * 函 數(shù) 名 : delay_10us
- * 函數(shù)功能 : 延時(shí)函數(shù),ten_us=1時(shí),大約延時(shí)10us
- * 輸 入 : ten_us
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void delay_10us(u16 ten_us)
- {
- while(ten_us--);
- }
- /*******************************************************************************
- * 函 數(shù) 名 : delay_ms
- * 函數(shù)功能 : ms延時(shí)函數(shù),ms=1時(shí),大約延時(shí)1ms
- * 輸 入 : ms:ms延時(shí)時(shí)間
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void delay_ms(u16 ms)
- {
- u16 i,j;
- for(i=ms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd12864_write_cmd
- * 函數(shù)功能 : LCD12864寫命令
- * 輸 入 : cmd:指令
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void lcd12864_write_cmd(u8 cmd)
- {
- LCD12864_RS=0;//選擇命令
- LCD12864_WR=0;//選擇寫
- LCD12864_E=0;
- LCD12864_DATAPORT=cmd;//準(zhǔn)備命令
- delay_ms(1);
- LCD12864_E=1;//使能腳E先上升沿寫入
- delay_ms(1);
- LCD12864_E=0;//使能腳E后負(fù)跳變完成寫入
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd12864_write_data
- * 函數(shù)功能 : LCD12864寫數(shù)據(jù)
- * 輸 入 : dat:數(shù)據(jù)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void lcd12864_write_data(u8 dat)
- {
- LCD12864_RS=1;//選擇數(shù)據(jù)
- LCD12864_WR=0;//選擇寫
- LCD12864_E=0;
- LCD12864_DATAPORT=dat;//準(zhǔn)備數(shù)據(jù)
- delay_ms(1);
- LCD12864_E=1;//使能腳E先上升沿寫入
- delay_ms(1);
- LCD12864_E=0;//使能腳E后負(fù)跳變完成寫入
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd12864_init
- * 函數(shù)功能 : LCD12864初始化
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void lcd12864_init(void)
- {
- LCD12864_PSB=1;//選擇8位或4位并口方式
- lcd12864_write_cmd(0x30);//數(shù)據(jù)總線8位,基本指令操作
- lcd12864_write_cmd(0x0c);//整體顯示關(guān),游標(biāo)顯示關(guān),游標(biāo)正常顯示
- lcd12864_write_cmd(0x06);//寫入新數(shù)據(jù)后光標(biāo)右移,顯示屏不移動(dòng)
- lcd12864_write_cmd(0x01);//清屏
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd12864_clear
- * 函數(shù)功能 : LCD12864清屏
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void lcd12864_clear(void)
- {
- lcd12864_write_cmd(0x01);
- }
- /*******************************************************************************
- * 函 數(shù) 名 : lcd12864_show_string
- * 函數(shù)功能 : LCD12864顯示字符串
- * 輸 入 : x,y:顯示坐標(biāo),x=0~7,y=0~3;
- str:顯示字符串?dāng)?shù)據(jù)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void lcd12864_show_string(u8 x,u8 y,u8 *str)
- {
- if(y<=0)y=0;
- if(y>3)y=3;
- x&=0x0f; //限制x,y不能大于顯示范圍
- switch(y)
- {
- case 0: x|=0x80;break;//第1行地址+x的偏移
- case 1: x|=0x90;break;//第2行地址+x的偏移
- case 2: x|=0x88;break;//第3行地址+x的偏移
- case 3: x|=0x98;break;//第4行地址+x的偏移
- }
- lcd12864_write_cmd(x);
- while(*str!='\0')
- {
- lcd12864_write_data(*str);
- str++;
- }
-
- }
- /*******************************************************************************
- * 函 數(shù) 名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void main()
- {
- lcd12864_init();//LCD12864初始化
- lcd12864_show_string(0,0,"Hello World!");//第1行字符串顯示
- lcd12864_show_string(0,1,"大家好!");//第2行字符串顯示
- lcd12864_show_string(0,2,"歡迎使用51開發(fā)板");//第3行字符串顯示
- lcd12864_show_string(0,3,"好好學(xué)習(xí)天天向上");//第4行字符串顯示
- while(1)
- {
-
- }
- }
復(fù)制代碼
|
|