#include <reg51.h>//應該是清屏失敗了#define uchar unsigned char #define uint unsigned int#define lcdrow 0xc0 //起始列#define lcdpage 0xb8 //起始頁#define lcdcolumn 0x40 //起始列//#define c_page_max 0x08 //頁數最大值 8//#define c_column_max 0x40 //列數最大值 64#define bus P0sbit rst=P2^0;sbit e=P2^2;sbit rw=P2^3;sbit rs=P2^4;sbit cs1=P2^5;sbit cs2=P2^6;void delayms(uint);void delayus10(void);void select(uchar);void send_cmd(ucahr);void send_data(uchar);void clear_screen(void);void initial(void); void display_zf(uchar,uchar,uchar,uchar); void display_hz(uchar,uchar,uchar,uchar); void display(void);void CheckState(void);uchar code table_zf[]={// P0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//R0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//00xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//T0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,// E0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//U0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//文字:S0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00};//漢字表//宋體12;此字體下對應的點陣為:寬X高=16X16//取模方式:縱向取模下高位,從上到下,從左到右取模uchar code table_hz[]={//文字:電0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,//文字:子0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00, //設 0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,//文字:計0x20,0x21,0x2E,0xE4,0x00,0x00,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//文字:與0x00,0x00,0x00,0x00,0x7E,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xCC,0x08,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x24,0x46,0x44,0x20,0x1F,0x00,0x00,//文字:創0x40,0x20,0xD0,0x4C,0x43,0x44,0x48,0xD8,0x30,0x10,0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,0x00,0x3F,0x40,0x40,0x42,0x44,0x43,0x78,0x00,0x00,0x07,0x20,0x40,0x3F,0x00,//文字:新0x20,0x24,0x2C,0x35,0xE6,0x34,0x2C,0x24,0x00,0xFC,0x24,0x24,0xE2,0x22,0x22,0x00,0x21,0x11,0x4D,0x81,0x7F,0x05,0x59,0x21,0x18,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,//文字:的0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00,//文字:最0x40,0x40,0xC0,0x5F,0x55,0x55,0xD5,0x55,0x55,0x55,0x55,0x5F,0x40,0x40,0x40,0x00,0x20,0x20,0x3F,0x15,0x15,0x15,0xFF,0x48,0x23,0x15,0x09,0x15,0x23,0x61,0x20,0x00,//文字:佳0x40,0x20,0xF0,0x1C,0x47,0x4A,0x48,0x48,0x48,0xFF,0x48,0x48,0x4C,0x68,0x40,0x00,0x00,0x00,0xFF,0x00,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x46,0x64,0x40,0x00,//文字:平0x00,0x01,0x05,0x09,0x71,0x21,0x01,0xFF,0x01,0x41,0x21,0x1D,0x09,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//文字:臺0x00,0x00,0x40,0x60,0x50,0x48,0x44,0x63,0x22,0x20,0x20,0x28,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x00};void mian(){ CheckState(); initial(); display(); clear_screen(); display(); while(1);}void CheckState(void) //狀態檢查,LCD是否忙?{ rs=0; rw=1; e=1; //僅當第7位為0時才可操作(判別busy信號) while((bus&0x80)==0x80); e=0;}void delayus10(void){ uchar i=5; while(--i);}void delayms(uint j){ uchar i=250; for(;j>0;j--) { while(--i); i=249; while(--i);i=250;}}//屏幕選擇-Cs=0選擇雙屏,cs=1選擇左半屏,cs=2選擇右半屏 //void select(uchar cs)void select(uchar cs){ if(cs==0) cs1=0,cs2=0; else if(cs==1) cs1=0,cs2=1; else cs1=1,cs2=0;}void send_cmd(uchar cmd) //寫命令函數{ CheckState(); rs=0;rw=0;bus=cmd;delayus10();e=1;e=0;}void send_data(uchar dat) //寫數據函數{ CheckState(); rs=1;rw=0;bus=dat;delayus10();e=1;e=0;}void clear_screen(void) //清屏函數{ uchar c_page,c_column; select(0); for(c_page=0;c_page<0x08;c_page++) { send_cmd(c_page+lcdpage); send_cmd(lcdcolumn); for(c_column=0;c_column<0x40;c_column++) { send_data(0x00); } }}void initial() //LCD初始化{ CheckState(); select(0); rst=0;delayms(10);rst=1; clear_screen(); send_cmd(lcdrow); send_cmd(lcdcolumn); send_cmd(lcdpage); send_cmd(0x3f);}//寫字符,c_page為當前頁,c_column為當前列,num為字符數,//offset為所取字符在顯示緩沖區中的偏移單位void display_zf(uchar c_page,uchar c_column,uchar num,uchar offset){uchar c1,c2,c3; //這里將uchar改為了uintfor(c1=0;c1<num;c1++){ for(c2=0;c2<2;c2++) { for(c3=0;c3<8;c3++) { send_cmd(lcdpage+c_page+c2); //lcdpage是起始頁,一頁八行,一共8頁 send_cmd(lcdcolumn+c_column+c1*8+c3); //lcdolumn是起始列,加當前列,再加 send_data(table_zf[(c1+offset)*16+c2*8+c3]); // } }}}//寫漢字,C_page為當前頁,C_ |