www.pudn.com > TG12864.rar > SPISerilaA.c
#include#include #include ////////////////////////////////////////////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /////////////////////////////////////////////////////////////////////////////////// code uchar hz[]= { /*-- 文字: 早 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 //*/ 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00, /*-- 文字: 辞 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x1 6*/ 0x00,0x7E,0x22,0x23,0x22,0x7E,0x00,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x00, 0x24,0x24,0x24,0xFC,0x22,0x22,0xA0,0x84,0x94,0xA5,0x86,0x84,0xA4,0x94,0x84,0x00, /*-- 文字: 白 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00, 0x00,0x00,0xF8,0x08,0x08,0x0C,0x0B,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00, /*-- 文字: 帝 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x3F,0x01,0x01,0x01,0xFF,0x01,0x11,0x21,0x1F,0x00,0x00,0x00,0x00, 0x80,0x64,0x24,0x24,0x2C,0x34,0x25,0xE6,0x24,0x24,0x34,0x2C,0xA4,0x64,0x24,0x00, /*-- 文字: 彩 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x10,0x08,0x06,0xFF,0x02,0x04,0x58,0x48,0x20,0x22,0x11,0x08,0x07,0x02,0x00, 0x82,0x8A,0xB2,0x86,0xDB,0xA1,0x91,0x8D,0x88,0x20,0x10,0x08,0x86,0x64,0x40,0x00, /*-- 文字: 云 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00, 0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x64,0x60,0x40,0x00, /*-- 文字: 间 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00, 0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00, /*-- 文字: , --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x58,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,0x00,0x00,0x00,0x00, /*-- 文字: 千 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x44,0x44,0x44,0x44,0x44,0xFC,0x42,0x42,0x42,0x43,0x42,0x60,0x40,0x00, /*-- 文字: 里 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00, 0x00,0x00,0xFF,0x91,0x91,0x91,0x91,0xFF,0x91,0x91,0x91,0x91,0xFF,0x00,0x00,0x00, /*-- 文字: 江 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0x04,0x7E,0x01,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x00, 0x10,0x60,0x01,0xC6,0x30,0x00,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0x00, /*-- 文字: 陵 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xFF,0x02,0x04,0x43,0x48,0x24,0x22,0x15,0x09,0x15,0x23,0x60,0xC0,0x40,0x00, 0x00,0xFE,0x22,0x5A,0x86,0x10,0x94,0x74,0x94,0x1F,0x34,0x54,0x94,0x94,0x10,0x00, /*-- 文字: 一 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00, /*-- 文字: 日 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00, /*-- 文字: 还 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x20,0x1F,0x20,0x42,0x41,0x40,0x40,0x5F,0x40,0x40,0x40,0x47,0x42,0x40,0x00, 0x40,0x41,0xCE,0x04,0x00,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x02,0x00,0x00, /*-- 文字: 。 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: 两 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x7F,0x08,0x04,0x03,0x00,0x10,0x09,0x06,0x01,0x01,0x26,0x40,0x3F,0x00,0x00, 0x02,0xF2,0x12,0x12,0x12,0xFE,0x92,0x12,0x12,0xFE,0x12,0x12,0x12,0xFB,0x12,0x00, /*-- 文字: 岸 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x20,0x1F,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0x00,0xE0,0x2E,0xA8,0xA8,0xA8,0xA8,0xAF,0xA8,0xA8,0xA8,0xA8,0xAE,0x20,0x00, /*-- 文字: 猿 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0x42,0x81,0x40,0x3F,0x10,0x08,0xFD,0x43,0x27,0x09,0x11,0x69,0xC4,0x44,0x00, 0x20,0x12,0x0C,0x9C,0xE3,0x10,0x14,0xD4,0x54,0x5F,0x54,0x54,0xD4,0x14,0x10,0x00, /*-- 文字: 声 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00, 0x02,0x12,0xD2,0x52,0x52,0x52,0x52,0xDF,0x52,0x52,0x52,0x52,0xD2,0x12,0x02,0x00, /*-- 文字: 啼 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x0F,0x02,0x02,0x07,0x00,0x00,0x3F,0x01,0x01,0xFF,0x11,0x21,0x1F,0x00,0x00,0x00, 0xFC,0x04,0x04,0xFC,0x80,0x64,0x24,0x2C,0x35,0xE6,0x24,0x34,0xAC,0x66,0x24,0x00, /*-- 文字: 不 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x08,0x04,0x02,0x01,0x00,0x00,0x7F,0x00,0x00,0x00,0x01,0x07,0x02,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x82,0x42,0xFE,0x06,0x42,0xC2,0x82,0x02,0x03,0x02,0x00, /*-- 文字: 住 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x7F,0x00,0x20,0x21,0x21,0x21,0x21,0x3F,0x21,0x21,0x21,0x31,0x20,0x00, 0x40,0x20,0xF0,0x0C,0x03,0x08,0x08,0x09,0x0A,0xFC,0x08,0x08,0x8C,0x08,0x00,0x00, /*-- 文字: , --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x58,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,0x00,0x00,0x00,0x00, /*-- 文字: 轻 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x08,0xFF,0x04,0x44,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x00, 0xC4,0xB4,0x8F,0xF4,0x84,0x84,0x04,0x82,0x42,0x22,0x12,0x2A,0x46,0xC2,0x00,0x00, /*-- 文字: 舟 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x40,0x30,0x0F,0x00,0x02,0x04,0x0C,0x40,0x80,0x7F,0x00,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0xFC,0x84,0x86,0x95,0xA4,0x84,0x84,0xFC,0x80,0x80,0x80,0x00, /*-- 文字: 已 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C,0x10,0x00, 0x00,0x00,0xE2,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x00, /*-- 文字: 过 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x20,0x1F,0x20,0x20,0x40,0x40,0x43,0x41,0x48,0x50,0x4F,0x40,0x40,0x40,0x00, 0x80,0x81,0x8E,0x04,0x00,0x10,0x50,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00, /*-- 文字: 万 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x60,0x20,0x1F,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0x82,0x7E,0x22,0x22,0x22,0x22,0xF2,0x22,0x02,0x02,0x00, /*-- 文字: 重 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x40,0x40,0x00, 0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFF,0xA9,0xA9,0xA9,0xE9,0x08,0x08,0x08,0x00, /*-- 文字: 山 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x20,0x7F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00, 0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, /*-- 文字: 。 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //管脚定义//////////////////////////////////////////////////////////////// sbit A0=P2^1; sbit CS=P2^4; //函数列表////////////////////////////////////////////////////////////////// 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); ////////////////////////////////////////////////////////////////////////// //写控制命令到lcd void wcode (uchar i) //A0=0,CS=0 { SPSTAT=0xc0; CS=1;_nop_(); A0=0;_nop_(); CS=0;_nop_(); SPDAT=i; while(1) { if(SPSTAT&0x80) break; } CS=1;_nop_(); SPSTAT=0xc0; } ////////////////////////////////////////////////////////////////////////// //写显示数据到lcd //A0=1,CS=0 void wdata (uchar i) { SPSTAT=0xc0; CS=1;_nop_(); A0=1;_nop_(); CS=0;_nop_(); SPDAT=i; while(1) { if(SPSTAT&0x80) break; } CS=1;_nop_(); SPSTAT=0xc0; } /////////////////////////////////////////////////////////////////////// //液晶屏初始化 void init_12864(void) { /*函数名为lcd_init 的LCM初始化子函数*/ disoff(0x00);//开显示屏//0x00关显示;0x01开显示////1 wcode(0xa1); //设置ADC 为正常0---64 ///8 wcode(0xa6);//设置正常的开关状态/////9 wcode(0x2f);//设置能量控制16 wcode(0x81);wcode(0x00);//Electronic volume control setting 18 wcode(0xa3);//设置lcd bias///////11 wcode(0xc8);///选择输出状态寄存器////15 wcode(0xa5);//全屏亮///10 delay(4); ////// wcode(0xa4); //正常显示////// 10 startline(0x00);//从第一行开始显示//////2 clear();//清屏 /// disoff(0x01);//开显示屏//0x00关显示;0x01开显示////1 } ////////////////////////////////////////////////////////////////////// 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[i+n*32]; //取得第n个汉字的上半部分数据代码 if(fb)dx=255-dx; //若fb不为0,获得反白数据代码 lw(xx*8+i+2,yy+1,dx); } //将数据代码写入LCd for(i=0;i<16;i++) {dx=hz[(i+16)+n*32]; //取得第n个汉字的下半部分数据代码 if(fb)dx=255-dx; //若fb不为0,获得反白数据代码 lw(xx*8+i+2,yy,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,0x00); } } /****************************主函数******************************/ void main(void) { uchar loop;//定义字符型局部变量loop P2M1=0xc0;P2M2=0xc0; SPCTL=0xdc; SPSTAT=0xc0; init_12864(); //延时一会 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); } /*************************/ while(1) { _nop_(); } } }