




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、LCD12864原理與應用 1、LCD12864簡介: LCD12864分為兩種,帶字庫的和不帶字庫的,不帶字庫的液晶顯示漢字的時候可以選擇自己喜歡的字體。而帶字庫的液晶,只能顯示GB2312字體,當然也可以顯示其他的字體,不過是用圖片的形式顯示。 下面介紹不帶字庫的LCD12864,以Proteus中的AMPIRE128×64為例,如下圖所示,它的液晶驅動器為KS0108。引腳功能:引腳符號狀態(tài)引腳名稱功能CS1,CS2輸入芯片片選端,都是低電平有效CS1=0開左屏幕,CS1=1關左屏幕CS2=0開右屏幕,CS2=1關右屏幕RS輸入數(shù)據(jù)/命令選擇信號RS=1為數(shù)據(jù)操作,RS=0為寫
2、指令或讀狀態(tài)RW輸入讀寫選擇信號R/W=1為讀選通,R/W=0為寫選通E輸入讀寫使能信號在E下降沿,數(shù)據(jù)被鎖存(寫)入液晶,在E高電平期間,數(shù)據(jù)被讀出 DB0DB7三態(tài)數(shù)據(jù)總線數(shù)據(jù)或指令的傳送通道RST輸入復位信號,低電平時復位復位時,關閉液晶顯示,使顯示起始行為0,可以跟單片機的復位引腳RST相連,也可以直接接VCC,使之不起作用V0液晶顯示器驅動電壓-Vout-10VLCD驅動負電壓 與帶字庫的液晶不同,此塊液晶含有兩個液晶驅動器,每塊驅動器都控制64*64個點,分為左右兩個屏幕顯示,總共為128*64個點(即有128×64個點)。這就是為什么AMPIRE128*64有CS1和C
3、S2兩個片選端的原因。此液晶有8頁,一頁有8行點陣點,左右各64列,共128列。如下圖所示:1 / 142、LCD12864中的幾條重要指令(一)行(line)設置命令:由此可見顯示的起始行地址為0XC0,共64行,有規(guī)律地改變起始行號,可以實現(xiàn)滾屏效果。(二)頁(page)設置指令:起始頁地址為0XB8,因為液晶有64行點,分為8頁,每頁就有8行點。(三)列(column)地址設置指令每塊驅動器的列地址都是從0X40到0X7F,共64列,所以此液晶共有128列點。(四)讀狀態(tài)指令3、用LCD12864顯示漢字(一) 由于這塊液晶不帶字庫,我們就要自己編寫字庫,編寫字庫所用的字模提取軟件為Zi
4、mo21(軟件下載地址字體選擇默認的“宋體,常規(guī),小四號”,小四號為16*16大小,如下圖所示:LCD12864與單片機的連接如下圖所示:C程序如下:#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/下面是“歡迎訪問伊人憔悴百度空間”點陣數(shù)據(jù),一個漢字有32字節(jié)數(shù)據(jù)組成unsigned char code huan= / 歡0x04,0x24,0x44,0x84,0x64,0x9C,0x40,0x30,0x0F,0xC8,0x08,0x08,0
5、x28,0x18,0x00,0x00,0x10,0x08,0x06,0x01,0x82,0x4C,0x20,0x18,0x06,0x01,0x06,0x18,0x20,0x40,0x80,0x00;unsigned char code ying= /迎0x40,0x40,0x42,0xCC,0x00,0x00,0xFC,0x04,0x02,0x00,0xFC,0x04,0x04,0xFC,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x40,0x4F,0x44,0x42,0x40,0x7F,0x42,0x44,0x43,0x40,0x00;unsigned char
6、code fang= /訪0x40,0x40,0x42,0xCC,0x00,0x08,0x08,0xF8,0x89,0x8E,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x00,0x00,0x3F,0x90,0x48,0x30,0x0F,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00;unsigned char code wen= /問0x00,0xF8,0x01,0x02,0x00,0xE2,0x22,0x22,0x22,0xE2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0
7、x00,0x1F,0x08,0x08,0x08,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00;unsigned char code yi= /伊0x00,0x80,0x60,0xF8,0x07,0x20,0x22,0x22,0xFE,0x22,0x22,0x22,0xFE,0x20,0x20,0x00,0x01,0x00,0x00,0xFF,0x00,0x80,0x42,0x32,0x0F,0x02,0x02,0x02,0x07,0x00,0x00,0x00;unsigned char code ren= /人0x00,0x00,0x00,0x00,0x00,0x00,
8、0xC0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x00;unsigned char code qiao= /憔0xE0,0x00,0xFF,0x10,0x20,0x10,0xFC,0x27,0x24,0x25,0xFE,0x24,0x24,0x24,0x04,0x00,0x01,0x00,0xFF,0x00,0x80,0x60,0x1F,0x29,0xC9,0x09,0x2F,0xC9,0x0
9、9,0x29,0xC8,0x00;unsigned char code cui= /悴0x80,0x70,0x00,0xFF,0x08,0x90,0x44,0x34,0x45,0x86,0x44,0x34,0x44,0x84,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x04,0x04,0x04,0x04,0xFE,0x04,0x04,0x04,0x04,0x04,0x00;unsigned char code bai= /百0x02,0x02,0xE2,0x22,0x22,0x32,0x2A,0x26,0x22,0x22,0x22,0x22,0xE2,0x02,0
10、x02,0x00,0x00,0x00,0xFF,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,0x00;unsigned char code du= /度0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00;unsigned char code kong= /
11、空0x10,0x0C,0x44,0x24,0x14,0x04,0x05,0x06,0x04,0x04,0x14,0x24,0x44,0x14,0x0C,0x00,0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,0x00;unsigned char code jian= /間0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0x
12、11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00;sbit CS1=P20;/片選1,低電平有效,CS1=0開左屏幕,CS1=1關左屏幕sbit CS2=P21;/片選2,低電平有效,CS2=0開右屏幕,CS2=1關右屏幕sbit RS=P22;/數(shù)據(jù),指令選擇信號,RS=1為數(shù)據(jù)操作,RS=0為寫指令或讀狀態(tài)(一般為讀忙標志)sbit RW=P23;/讀寫選擇信號,RW=1為讀選通,RW=0為寫選通sbit EN=P24;/讀寫使能信號void busy()/忙檢測函數(shù)P0=0X00; /這句不能少RS=0; RW=1;EN=1;while(P0
13、&0X80);/P0&0X80結果為真則一直執(zhí)行空操作,也就是說P0&0X80為0則結束循環(huán)EN=0;void wcmd(uchar cmd)busy(); /每次寫入指令或數(shù)據(jù)之前都進行忙檢測RS=0;RW=0;P0=cmd;EN=1;_nop_();_nop_();/在EN下降沿寫入數(shù)據(jù)和指令EN=0;void wdata(uchar dat) /寫命令和寫數(shù)據(jù)只在RS=0或RS=1上不同,其余都相同busy();RS=1;RW=0;P0=dat;EN=1;_nop_();_nop_();/在EN下降沿寫入數(shù)據(jù)和指令EN=0;void set_page(uchar
14、page)/設置頁,12864LCD共有8頁,每頁有8行點陣點。page=0xb8|page; /首頁地址為0XB8wcmd(page); /page取值范圍為07,表示第1到8頁void set_line(uchar line)/設置顯示的起始行,共有063行,一般從0行開始顯示line=0xc0|line; /起始行地址0XC0wcmd(line);/line取值范圍為063,表示第1到64行void set_column(uchar column)/設置顯示的列/column=column&0x3f; /列的最大值為0X3F,即64column=0x40|column; /列的首
15、地址為0X40,wcmd(column); /column的取值范圍為063,共64列void set_onoff(uchar onoff)/設置顯示開關,onoff取值為0或1onoff|=0x3e;/0X3E是關顯示,0X3F是開顯示wcmd(onoff);/所以若onoff為0,則表示關顯示,onoff為1,則表示開顯示void select_screen(uchar screen)/選屏,screen取值范圍為0,1,2switch(screen)case 0:CS1=0;CS2=0;break; /全屏case 1:CS1=0;CS2=1;break; /左半屏case 2:CS1=
16、1;CS2=0;break; /右半屏default:break;void clear_screen(uchar screen)/清屏uchar i,j;select_screen(screen);/先選屏for(i=0;i<8;i+)/控制頁數(shù)07,共8頁set_page(i);/設置頁set_column(0); /設置列,每頁都從第1列開始,共64列for(j=0;j<64;j+)/控制列數(shù)063,共64列wdata(0x00);/寫入0,列地址指針會自動加1 void init()/LCD初始化busy(); /忙檢測select_screen(0);/選屏,全屏set_o
17、noff(0);/關顯示select_screen(0); /選屏,全屏set_onoff(1); /開顯示select_screen(0); /選屏,全屏clear_screen(0); /清屏set_line(0); /起始行:0void show(uchar screen,uchar page,uchar column,uchar *p)/顯示一個漢字,一個漢字有32字節(jié)數(shù)據(jù) uchar i;/screen表示選擇屏幕,page表示頁,column表示列,*p表示漢字的數(shù)組select_screen(screen); /選屏set_page(page); /設置頁,寫上半頁set_col
18、umn(column);/設置列for(i=0;i<16;i+) /控制16列的數(shù)據(jù)輸出wdata(pi); /漢字的上半部分set_page(page+1); /寫下半頁set_column(column);/控制列for(i=0;i<16;i+) /控制16列的數(shù)據(jù)輸出wdata(pi+16); /漢字的下半部分void main()init(); /LCD初始化clear_screen(0); /清屏set_line(0); /顯示開始行/1表示左屏顯示,0表示從0頁開始顯示。因為一頁只有8行點,/而顯示一個漢字需要16行點(整屏有64行點),所以顯示一個漢字需要2頁/第0頁
19、顯示“歡”字的上半部分,第1頁顯示“歡”漢字的下半部分/2*16表示從第32列開始顯示,前面空出031列(即2個字的位置)show(1,0,2*16,huan);/歡/1表示左屏顯示,0表示從0頁開始顯示/3*16表示從第48列開始顯示,前面空出0477列(即3個漢字的位置)show(1,0,3*16,ying);/迎/2表示右屏顯示,0表示從0頁開始顯示/0*16表示從第0列開始顯示(即第一個漢字的位置)show(2,0,0*16,fang);/訪/1*16表示從第16列開始顯示,前面空出015列(即一個漢字的位置)show(2,0,1*16,wen); /問/左屏開,從第3頁(共8頁)第0
20、列開始顯示,即第3,4頁顯示”伊人憔悴百度空間“幾個字show(1,2,0*16,yi); /伊show(1,2,1*16,ren); /人show(1,2,2*16,qiao); /憔show(1,2,3*16,cui); /悴show(2,2,0*16,bai); /百show(2,2,1*16,du); /度show(2,2,2*16,kong); /空show(2,2,3*16,jian); /間while(1);4、用LCD12864顯示漢字(二)電路圖如下圖所示:C程序如下:#include<reg51.h> #include<intrins.h>#defi
21、ne uchar unsigned char#define uint unsigned int#define screen_on 0x3f /設置屏幕開關顯示,0x3f表示開顯示#define screen_off 0x3e /0x3e表示關顯示#define line 0xC0 /首行地址為0XC0#define page 0xb8 /首頁地址為0XB8#define col 0x40 /首列地址為0X40sbit CS1=P20 ; /*片選1*/sbit CS2=P21 ; /*片選2*/sbit RS=P22 ; /*數(shù)據(jù)/指令 選擇*/sbit RW=P23 ; /*讀/寫 選擇*/
22、sbit EN=P24 ; /*讀/寫 使能*/void delay(uint t) while(-t);uchar code dong= /*- 文字: 東 -*/*- 宋體12; 此字體下對應的點陣為:寬x高=16x16 -*/0x00,0x08,0x88,0x48,0x28,0x18,0x0F,0xE8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x20,0x11,0x09,0x05,0x41,0x81,0x7F,0x01,0x01,0x05,0x09,0x11,0x20,0x00,0x00;uchar code hua= /*- 文字:
23、華 -*/*- 宋體12; 此字體下對應的點陣為:寬x高=16x16 -*/0x20,0x10,0x08,0xFC,0x03,0x20,0x20,0x10,0x7F,0x88,0x88,0x84,0x82,0xE0,0x00,0x00,0x04,0x04,0x04,0x05,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00;uchar code li=/*- 文字: 理 -*/*- 宋體12; 此字體下對應的點陣為:寬x高=16x16 -*/0x04,0x84,0x84,0xFC,0x84,0x84,0x00,0xFE,0x
24、92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x00,0x20,0x60,0x20,0x1F,0x10,0x10,0x40,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x40,0x00;uchar code gong=/*- 文字: 工 -*/*- 宋體12; 此字體下對應的點陣為:寬x高=16x16 -*/0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,
25、0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00;uchar code da=/*- 文字: 大 -*/*- 宋體12; 此字體下對應的點陣為:寬x高=16x16 -*/0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00;uchar code xue=/*- 文字: 學 -*/*- 宋體12; 此字體
26、下對應的點陣為:寬x高=16x16 -*/0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96,0x90,0x90,0x98,0x14,0x13,0x50,0x30,0x00,0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x06,0x05,0x04,0x04,0x04,0x04,0x04,0x00;void busy()/狀態(tài)檢查,LCD是否忙P0=0X00;RS=0;RW=1;EN=1;while(P0&0X80);EN=0; void wcmd(uchar cmd) /寫命令函數(shù) busy();/檢測LCD是否忙RS=0;RW=0;P0=cmd;EN=1;_nop_();_nop_();EN=0;void wdata(uchar dat)/寫數(shù)據(jù)函數(shù)與寫命令函數(shù)只在RS=1或RS=0上不同,其余都相同 busy();/檢測LCD是否忙RS=1;RW=0;P0=dat;EN=1;_nop_();_nop_();EN=0;void init()/初始化LCDdelay(100);CS1=1;/剛開始關閉兩屏CS2=1;delay(100);wcmd(screen_off);/關屏幕顯示,0X3E表示關顯示,0X3F表示開顯示wcmd(page);/設置頁地址,首頁地址為0XB8wcmd(line
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測繪工程中特殊地形測量對策與優(yōu)化方案
- 民政系統(tǒng)檔案管理辦法
- 征用法律客體范圍界定研究
- 醫(yī)藥耗材流通管理辦法
- 學校安全教育課程:設計與實施
- 高校校園交通安全管理模式創(chuàng)新研究
- 材料采購預算管理辦法
- 體育從業(yè)機構管理辦法
- 教科書內容組織與科學設計
- 在線開放課程建設與管理策略
- 監(jiān)理通知回執(zhí)單新
- 母嬰保健-助產技術理論考核試題題庫及答案
- 保潔服務考核表(僅供參考)
- dd5e人物卡可填充格式角色卡夜版
- 教師進企業(yè)實踐三方協(xié)議書
- 施工現(xiàn)場隱患圖片識別合集
- 山西省建設工程計價依據(jù)
- 煤礦在用安全設備檢測檢驗制度
- GB/T 24632.2-2009產品幾何技術規(guī)范(GPS)圓度第2部分:規(guī)范操作集
- GB/T 20428-2006巖石平板
- GB/T 11363-1989釬焊接頭強度試驗方法
評論
0/150
提交評論