www.pudn.com > TG12864.rar > tg12864.c
#include#include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define uint8 unsigned char #define DATA P0 code uchar hz[]= { 0x00,0x04,0x00,0x04,0x00,0x04,0xFE,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0x92,0xFF, 0x92,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0xFE,0x04,0x00,0x04,0x00,0x04,0x00,0x00,/*"早",0*/ 0x24,0x00,0x24,0x7E,0x24,0x22,0xFC,0x23,0x22,0x22,0x22,0x7E,0xA0,0x00,0x84,0x04, 0x94,0x04,0xA5,0x04,0x86,0xFF,0x84,0x04,0xA4,0x04,0x94,0x04,0x84,0x04,0x00,0x00,/*"辞",1*/ 0x00,0x00,0x00,0x00,0xF8,0x7F,0x08,0x21,0x08,0x21,0x0C,0x21,0x0B,0x21,0x08,0x21, 0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*"白",2*/ 0x80,0x00,0x64,0x00,0x24,0x00,0x24,0x3F,0x2C,0x01,0x34,0x01,0x25,0x01,0xE6,0xFF, 0x24,0x01,0x24,0x11,0x34,0x21,0x2C,0x1F,0xA4,0x00,0x64,0x00,0x24,0x00,0x00,0x00,/*"帝",3*/ 0x82,0x20,0x8A,0x10,0xB2,0x08,0x86,0x06,0xDB,0xFF,0xA1,0x02,0x91,0x04,0x8D,0x58, 0x88,0x48,0x20,0x20,0x10,0x22,0x08,0x11,0x86,0x08,0x64,0x07,0x40,0x02,0x00,0x00,/*"彩",4*/ 0x40,0x00,0x40,0x20,0x44,0x70,0x44,0x38,0x44,0x2C,0x44,0x27,0xC4,0x23,0xC4,0x31, 0x44,0x10,0x44,0x12,0x46,0x14,0x46,0x18,0x64,0x70,0x60,0x20,0x40,0x00,0x00,0x00,/*"云",5*/ 0x00,0x00,0xF8,0xFF,0x01,0x00,0x06,0x00,0x00,0x00,0xF0,0x07,0x92,0x04,0x92,0x04, 0x92,0x04,0x92,0x04,0xF2,0x07,0x02,0x40,0x02,0x80,0xFE,0x7F,0x00,0x00,0x00,0x00,/*"间",6*/ 0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",7*/ 0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xFC,0x7F, 0x42,0x00,0x42,0x00,0x42,0x00,0x43,0x00,0x42,0x00,0x60,0x00,0x40,0x00,0x00,0x00,/*"千",8*/ 0x00,0x40,0x00,0x40,0xFF,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x7F, 0x91,0x44,0x91,0x44,0x91,0x44,0x91,0x44,0xFF,0x44,0x00,0x40,0x00,0x40,0x00,0x00,/*"里",9*/ 0x10,0x04,0x60,0x04,0x01,0x7E,0xC6,0x01,0x30,0x20,0x00,0x20,0x04,0x20,0x04,0x20, 0x04,0x20,0xFC,0x3F,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x00,0x20,0x00,0x00,/*"江",10*/ 0x00,0x00,0xFE,0xFF,0x22,0x02,0x5A,0x04,0x86,0x43,0x10,0x48,0x94,0x24,0x74,0x22, 0x94,0x15,0x1F,0x09,0x34,0x15,0x54,0x23,0x94,0x60,0x94,0xC0,0x10,0x40,0x00,0x00,/*"陵",11*/ 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00, 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,/*"一",12*/ 0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10, 0x42,0x10,0x42,0x10,0x42,0x10,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"日",13*/ 0x40,0x40,0x41,0x20,0xCE,0x1F,0x04,0x20,0x00,0x42,0x02,0x41,0x82,0x40,0x42,0x40, 0xF2,0x5F,0x0E,0x40,0x42,0x40,0x82,0x40,0x02,0x47,0x02,0x42,0x00,0x40,0x00,0x00,/*"还",14*/ 0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",15*/ 0x02,0x00,0xF2,0x7F,0x12,0x08,0x12,0x04,0x12,0x03,0xFE,0x00,0x92,0x10,0x12,0x09, 0x12,0x06,0xFE,0x01,0x12,0x01,0x12,0x26,0x12,0x40,0xFB,0x3F,0x12,0x00,0x00,0x00,/*"两",16*/ 0x00,0x40,0x00,0x20,0xE0,0x1F,0x2E,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04, 0xAF,0xFF,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xA8,0x04,0xAE,0x04,0x20,0x04,0x00,0x00,/*"岸",17*/ 0x20,0x04,0x12,0x42,0x0C,0x81,0x9C,0x40,0xE3,0x3F,0x10,0x10,0x14,0x08,0xD4,0xFD, 0x54,0x43,0x5F,0x27,0x54,0x09,0x54,0x11,0xD4,0x69,0x14,0xC4,0x10,0x44,0x00,0x00,/*"猿",18*/ 0x02,0x40,0x12,0x30,0xD2,0x0F,0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xDF,0x03, 0x52,0x02,0x52,0x02,0x52,0x02,0x52,0x02,0xD2,0x07,0x12,0x00,0x02,0x00,0x00,0x00,/*"声",19*/ 0xFC,0x0F,0x04,0x02,0x04,0x02,0xFC,0x07,0x80,0x00,0x64,0x00,0x24,0x3F,0x2C,0x01, 0x35,0x01,0xE6,0xFF,0x24,0x11,0x34,0x21,0xAC,0x1F,0x66,0x00,0x24,0x00,0x00,0x00,/*"啼",20*/ 0x00,0x00,0x02,0x08,0x02,0x04,0x02,0x02,0x02,0x01,0x82,0x00,0x42,0x00,0xFE,0x7F, 0x06,0x00,0x42,0x00,0xC2,0x00,0x82,0x01,0x02,0x07,0x03,0x02,0x02,0x00,0x00,0x00,/*"不",21*/ 0x40,0x00,0x20,0x00,0xF0,0x7F,0x0C,0x00,0x03,0x20,0x08,0x21,0x08,0x21,0x09,0x21, 0x0A,0x21,0xFC,0x3F,0x08,0x21,0x08,0x21,0x8C,0x21,0x08,0x31,0x00,0x20,0x00,0x00,/*"住",22*/ 0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",23*/ 0xC4,0x08,0xB4,0x08,0x8F,0x08,0xF4,0xFF,0x84,0x04,0x84,0x44,0x04,0x41,0x82,0x41, 0x42,0x41,0x22,0x41,0x12,0x7F,0x2A,0x41,0x46,0x41,0xC2,0x41,0x00,0x41,0x00,0x00,/*"轻",24*/ 0x80,0x00,0x80,0x80,0x80,0x40,0x80,0x30,0xFC,0x0F,0x84,0x00,0x86,0x02,0x95,0x04, 0xA4,0x0C,0x84,0x40,0x84,0x80,0xFC,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,/*"舟",25*/ 0x00,0x00,0x00,0x00,0xE2,0x3F,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20,0x42,0x20, 0x42,0x20,0x42,0x20,0x42,0x20,0x7E,0x20,0x00,0x20,0x00,0x3C,0x00,0x10,0x00,0x00,/*"已",26*/ 0x80,0x40,0x81,0x20,0x8E,0x1F,0x04,0x20,0x00,0x20,0x10,0x40,0x50,0x40,0x90,0x43, 0x10,0x41,0x10,0x48,0x10,0x50,0xFF,0x4F,0x10,0x40,0x10,0x40,0x10,0x40,0x00,0x00,/*"过",27*/ 0x00,0x00,0x02,0x40,0x02,0x20,0x02,0x10,0x02,0x0C,0x82,0x03,0x7E,0x00,0x22,0x00, 0x22,0x20,0x22,0x60,0x22,0x20,0xF2,0x1F,0x22,0x00,0x02,0x00,0x02,0x00,0x00,0x00,/*"万",28*/ 0x08,0x40,0x08,0x40,0x0A,0x48,0xEA,0x4B,0xAA,0x4A,0xAA,0x4A,0xAA,0x4A,0xFF,0x7F, 0xA9,0x4A,0xA9,0x4A,0xA9,0x4A,0xE9,0x4B,0x08,0x48,0x08,0x40,0x08,0x40,0x00,0x00,/*"重",29*/ 0x00,0x00,0x00,0x20,0xE0,0x7F,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F, 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0xE0,0x7F,0x00,0x00,0x00,0x00,/*"山",30*/ 0x00,0x00,0x00,0x18,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };/*"。",31*/ //管脚定义//////////////////////////////////////////////////////////////// sbit CS=P2^1; sbit A0=P1^0; sbit WR=P2^6; sbit RD=P2^7; //函数列表////////////////////////////////////////////////////////////////// void wcode(uchar i); void wdata(uchar i); void lcd_busy(void); void rdata(uchar i); void init_12864(void); void startline(uchar i); void disoff(uchar o); void delay(ulong v) ; void setxy (uchar x1,uchar x2,uchar y) ; void lw(uchar x, uchar y, uchar dd) ; void dh(uchar xx, uchar yy, uchar n, uchar fb); void clear(void); //void test(void); //void rcode(void); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //检测忙信号? //A0=0;RD=0;WR=1 void lcd_busy(void) { //函数名为lcd_busy 的判LCM忙子函数 //lcd_busy函数开始 CS=1; WR=1;_nop_(); A0=0; RD=0;_nop_(); DATA=0xff;_nop_(); //选择指令寄存器,选择读方式,LCM数据口置全1 CS=0; while(1) { //while循环体,无限循环 //使能,将LCM的状态读入MCU if(DATA&0x80)break; /*若读入状态的数据小于0x80,说明最高位为0,LCM空闲,执行break语句跳出while循环体*/ //禁能 } CS=1;_nop_(); }// / while循环体结束 ///////////////////////////////////////////////////////////////////////////// //写控制命令到lcd //A0=0;RD=1;WR=0 void wcode (uchar i) { lcd_busy(); //检测忙? CS=1; RD=1;_nop_(); // delay(0x04); A0=0; WR=0;_nop_(); CS=0;_nop_(); DATA=i; //delay(0x04); // DATA=i; _nop_(); _nop_(); CS=1;_nop_(); } ////////////////////////////////////////////////////////////////////////// //写显示数据到lcd void wdata (uchar i) //A0=1;RD=1;WR=0 { lcd_busy();//检测忙? CS=1; RD=1;_nop_(); // delay(0x04); A0=1; WR=0;_nop_(); CS=0;_nop_(); DATA=i; // delay(0x04); //DATA=i; _nop_(); _nop_(); CS=1;_nop_(); } /////////////////////////////////////////////////////////////////////// //lcd读显示数据 void rdata (uchar i) //A0=1;RD=0;WR=1 { lcd_busy();//检测忙? CS=1; WR=1;_nop_(); // delay(0x04); A0=1; RD=0;_nop_(); CS=0;_nop_(); DATA=i; //delay(0x04); //DATA=i; _nop_(); _nop_(); CS=1;_nop_(); } /////////////////////////////////////////////////////////////////// //液晶屏初始化 void init_12864(void) { //wcode(0xe2); /*函数名为lcd_init 的LCM初始化子函数*/ disoff(0x00);//开显示屏//0x00关显示;0x01开显示////1 wcode(0xa0); //设置ADC 为正常0---64 ///8 wcode(0xa6);//设置正常的开关状态/////9 wcode(0x2f);//设置能量控制16 wcode(0x81);wcode(0x00);//Electronic volume control setting 18 wcode(0xa4);//设置lcd bias///////11 wcode(0xc0);///选择输出状态寄存器////15 wcode(0xa5);//全屏亮///10 delay(4); ////// wcode(0xa4); //正常显示////// 10 startline(0x00);//从第一行开始显示//////2 disoff(0x01);//开显示屏//0x00关显示;0x01开显示////1 clear();//清屏 /// } ////////////////////////////////////////////////////////////////////// void startline (uchar i) //设置显示起始行 { i=i+0x40; wcode(i); } /////////////////////////////////////////////////////////////////////// void setxy (uchar x1,uchar x2,uchar y) //定位x方向、y方向的子函数 { y=y+0xb0; x2=x2+0x10; x1=x1+0x00; wcode(x1); wcode(x2); wcode(y); } /////////////////////////////////////////////////////////////////////// void disoff (uchar o)//显示屏关子函数 { o=o+0xae; wcode(o); } ////////////////////////////////////////////////////////////////////// void delay (ulong v) { while(v!=0)v--; } ///////////////////////////////////////////////////////////// /*-----------------------------------写数据至LCM子函数----------------------------------*/ void lw (uchar x, uchar y, uchar dd) /*函数名为lw 的写数据至LCM子函数。定义x、y、dd为无符号 字符型局部变量*/ {uchar temp,x1,x2; //lw子函数开始 temp=x; x=x&0x0f; x1=x; x=temp; x=x&0xf0; x=x/16; x=x&0x0f; x2=x; setxy(x1,x2,y); wdata(dd); } //////////////////////////////////////////////////////////// /*-------------------------------------显示汉字子函数------------------------------------------*/ void dh (uchar xx, uchar yy, uchar n, uchar fb) /*函数名为dh的显示汉字子函数。 定义xx、yy、n、fb为无符号字符型局部变量。其中xx、yy为列、页定位值, n为汉字库中的第n个汉字,fb为反白显示选择*/ { //dh子函数开始 uchar i,dx; //定义i、dx为无符号字符型局部变量 for(i=0;i<16;i++) //for循环体,用于扫描汉字的上半部分 {dx=hz[2*i+n*32]; //取得第n个汉字的上半部分数据代码 if(fb)dx=255-dx; //若fb不为0,获得反白数据代码 lw(xx*8+i+2,yy,dx); //将数据代码写入LCM dx=hz[(2*i+1)+n*32]; //取得第n个汉字的下半部分数据代码 if(fb)dx=255-dx; //若fb不为0,获得反白数据代码 lw(xx*8+i+2,yy+1,dx); //将数据代码写入LCM } //for循环体结束 } //dh子函数结束 /********************************************************/ void clear(void) { uchar x,y; for(y=0;y<8;y++) { for(x=0;x<=131;x++) lw(x,y,0xff); } } /****************************主函数******************************/ void main(void) { uchar loop;//定义字符型局部变量loop P0M1=0x00;P0M2=0x00; P1M1=0x0c;P1M2=0x00; P2M1=0x00;P2M2=0x00; P3M1=0x00;P3M2=0x00; //test(); init_12864(); //LCM初始化 delay(10); //延时一会 while(1) //无限循环 { /************显示第一行(8个字)***********/ for(loop=0;loop<8;loop++) {dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); //dh(2*loop,0,loop,0); } /*************显示第二行(8个字)**********/ for(loop=0;loop<8;loop++) {dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); //dh(2*loop,2,loop+8,0); } /**************显示第三行(8个字)*************/ for(loop=0;loop<8;loop++) {dh(2*loop,4,loop+16,0); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); //dh(2*loop,4,loop+16,1); } /*************显示第四行(8个字)*************/ for(loop=0;loop<8;loop++) {dh(2*loop,6,loop+24,0); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); //dh(2*loop,6,loop+24,1); } /*************************/ //delay(100000); //延时一会 } }