file:///C:/Users/user1/AppData/Local/Temp/msohtml1/01/clip_image002.jpg 中文資料文庫地址: http://wenku.baidu.com/link?url=2RskpTcACLnDJp-GdMjaTVbrq7HNjjeLZ_5Kvkz3Xld-PkmTcTwzUFbEfC_daKr0KcE57b_JYbeD2eX3VRI2qSAV7exIPvhsnWfnPw8ATSu #include<reg52.h> #include<intrins.h> #define uchar unsigned char sbit CS1=P2^4; sbit CS2=P2^3; sbit RS=P2^2; sbit RW=P2^1; sbit E=P2^0; void check_busy(); //忙檢測 void write_cmd(ucharinst); //寫命令 void write_data(uchardat); //寫數(shù)據(jù) void set_xy(ucharx,uchar y); //設(shè)置顯示坐標(biāo) void LCD_Init(); //lcd初始化 // 字摸軟件提取出的數(shù)據(jù),提取字模時要注意參數(shù)設(shè)置,縱向取模,字節(jié)倒序。 uchar code HZ0[6][32]={//;-- 文字: 安 -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -- {0x80,0x90,0x8C,0x84,0x84,0x84,0xF5,0x86,0x84,0x84,0x84,0x84,0x94,0x8C,0x80,0x00,0x00,0x80,0x80,0x84,0x46,0x49,0x28,0x10,0x10,0x2C,0x23,0x40,0x80,0x00,0x00,0x00}, //;-- 文字: 徽 -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -- {0x10,0x88,0xC4,0x23,0xAE,0x68,0x2F,0x28,0xAE,0x20,0xD8,0x17,0x10,0xF0,0x10,0x00,0x01,0x00,0xFF,0x48,0x29,0x8D,0xFB,0x09,0xAC,0x48,0x37,0x08,0x36,0x41,0x80,0x00}, //;-- 文字: 工 -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬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,0x20,0x20,0x20,0x20,0x30,0x20,0x20,0x00}, //;-- 文字: 業(yè) -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -- {0x00,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,0x00,0xFF,0x00,0x00,0xC0,0x30,0x00,0x00,0x40,0x40,0x40,0x43,0x40,0x7F,0x40,0x40,0x40,0x7F,0x42,0x41,0x40,0x40,0x40,0x00}, //;-- 文字: 大 -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬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}, //;-- 文字: 學(xué) -- //;-- 宋體12; 此字體下對應(yīng)的點陣為:寬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} }; uchar code FZ0[10][32]={ /*-- 文字: I --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00}, /*-- 文字: --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, /*-- 文字: L --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00}, /*-- 文字: O --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00}, /*-- 文字: V --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00}, /*-- 文字: E --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00}, /*-- 文字: --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, /*-- 文字: Y --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00}, /*-- 文字: O --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00}, /*-- 文字: U --*/ /*-- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 --*/ {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00} }; /************************延時函數(shù)**************************/ voiddelayus(uchar delay) { uchar i; for(i=0;i<=delay;i++) _nop_(); } /********************忙檢查*********************************/ voidcheck_busy() { uchar a=0; for(a=0;a<200;a++); //此處為延時,一段時間后確保處于空閑狀態(tài) /* //此處為狀態(tài)查詢,查詢忙狀態(tài),沒有使用成功,以后再調(diào)試 RW=1; RS=0; E=1; while(1) { E=1; if(!(P0&0x80)) break; a++; if(a>10) break; } E=1; */ } /********************寫命令函數(shù)*********************************/ voidwrite_cmd(ucharinst) { check_busy(); RS=0; RW=0; E=1; P3=inst; E=0; _nop_(); } /********************寫數(shù)據(jù)函數(shù)*********************************/ voidwrite_data(uchardat) { check_busy(); RS=1; RW=0; E=1; P3=dat; E=0; _nop_(); } /********************初始化函數(shù)*********************************/ voidLCD_Init() { write_cmd(0x30);//30H--基本指令操作? delayus(4); write_cmd(0x0c);//開顯示,關(guān)光標(biāo),不閃爍。 delayus(10); write_cmd(0x01);//清除顯示 delayus(10); write_cmd(0x06);//光標(biāo)的移動方向左,DDRAM的地址計數(shù)器(AC)加1。 delayus(10); } /*******************設(shè)置顯示坐標(biāo)*********************************/ void set_xy(ucharx,uchar y) //x為行,y為列 { if(y>=64) //列地址大于等于64時右屏顯示? { CS2=0; //低電平選擇 CS1=1; //寫右屏是左屏關(guān)閉,不然兩邊會同時顯示 y=y-64; } else //列地址小于64時左屏顯示 { CS1=0; //同上 CS2=1; } write_cmd(0x40|y); //寫列地址 _nop_(); write_cmd(0xb8|x); //寫行地址? } /*******************顯示中文字體*********************************/ voiddisp_hz(ucharR,ucharL,uchar *p) { uchar i; for(i=0;i<16;i++) { set_xy(2*R,16*L+i); //設(shè)定顯示位置,每個漢字16*16個點,顯示時每行8*16個點,所以需要兩行8*32個點,此處為第一行 write_data(p); //寫入DDRAM set_xy(2*R+1,16*L+i); //第二行 write_data(p[i+16]); } } voiddisp_zf(ucharR,ucharL,uchar *p) { uchar i; for(i=0;i<8;i++) { set_xy(2*R,8*L+i); //設(shè)定顯示位置,每個字母16*8個點,顯示時每行8*8個點,所以需要兩行8*16個點,此處為第一行 write_data(p); set_xy(2*R+1,8*L+i); //第二行 write_data(p[i+8]); } } void main() { uchar k=0,n=0; LCD_Init(); //初始化 for(k=0;k<6;k++) disp_hz(1,1+k,HZ0[k]); //顯示安徽工業(yè)大學(xué) for(n=0;n<10;n++) disp_zf(2,3+n,FZ0[n]); //顯示 I LOVE YOU while(1){;}; }
|