www.pudn.com > iar240128.rar > iar240128.c


/*本例程未使用6963的文本模式,使用程序填入字模也足够快。程序以Youth所提供 
的51例程移植过来,同时对有些地方做了简化处理,增加了画线画圆的例程,好在 
6963的画点有专用指令,所以不用读屏就可以直接画点。 
  							晓奇 
液晶模块供应商:广州市盛宝电子有限公司  Tel:020-87592491 Fax:87541571 
  Email:  tinsharp@public.guangzhou.gd.cn 
;************************************************************************ 
;连线图:  液晶屏分为8行*15列汉字,使用总线接口方式。      * 
;*LCM----S8515*    *LCM----S8515*   *LCM-----S8515*     *LCM-----S8515*  * 
;*DB0-----PA0*    *DB4-----PA4*     *Rd ------/Rd*      *Cd ------PC0*  * 
;*DB1-----PA1*    *DB5-----PA5*     *Wr ------/Wr*      *CE ------PC1*  * 
;*DB2-----PA2*    *DB6-----PA6*     *RST------VCC*      *FS ------Vcc*  *  
;*DB3-----PA3*    *DB7-----PA7*            * 
;注:S8515的晶振频率为8MHz,尝试使用11.0592MHz超频,发现偶尔有数据丢失  *     
;************************************************************************/ 
#include  
 
#define WDR() asm("wdr")	//汇编指令调用的定义 
#define BIT(x) (1<<(x)) 
 
#define    SRE          7 
#define    SRW          6 
#define    SE           5 
 
#define ulong  	unsigned long 
#define uint  	unsigned int 
#define uchar  	unsigned char 
 
// ASCII字符控制代码解释定义 
#define STX	0x02 
#define ETX	0x03 
#define EOT	0x04 
#define ENQ	0x05 
#define BS	0x08 
#define CR  	0x0D 
#define LF  	0x0A 
#define DLE  	0x10 
#define ETB  	0x17 
#define SPACE  	0x20 
#define COMMA  	0x2C 
                   
#define TRUE  	1 
#define FALSE  	0 
                   
#define HIGH  	1 
#define LOW  	0 
 
// T6963C 端口定义由汇编语言程序定义外部端口 
__no_init static uchar LCMCW @ 0xF100;    // 命令口  
__no_init static uchar LCMDW @ 0xF000;    // 数据口 
       
// T6963C 命令定义 
#define LC_CUR_POS  	0x21    // 光标位置设置 
#define LC_CGR_POS  	0x22    // CGRAM偏置地址设置 
#define LC_ADD_POS  	0x24    // 地址指针位置 
#define LC_TXT_STP  	0x40    // 文本区首址 
#define LC_TXT_WID  	0x41    // 文本区宽度 
#define LC_GRH_STP  	0x42    // 图形区首址 
#define LC_GRH_WID  	0x43    // 图形区宽度 
#define LC_MOD_OR	0x80    // 显示方式:逻辑“或” 
#define LC_MOD_XOR  	0x81    // 显示方式:逻辑“异或” 
#define LC_MOD_AND  	0x82    // 显示方式:逻辑“与” 
#define LC_MOD_TCH  	0x83    // 显示方式:文本特征 
#define LC_DIS_SW  	0x90	// 显示开关:D0=1/0:光标闪烁启用/禁用; 
          // D1=1/0:光标显示启用/禁用; 
          // D2=1/0:文本显示启用/禁用; 
          // D3=1/0:图形显示启用/禁用; 
#define LC_CUR_SHP  	0xA0    // 光标形状选择:0xA0-0xA7表示光标占的行数 
#define LC_AUT_WR  	0xB0    // 自动写设置 
#define LC_AUT_RD  	0xB1    // 自动读设置 
#define LC_AUT_OVR  	0xB2    // 自动读/写结束 
#define LC_INC_WR  	0xC0    // 数据一次写,地址加1 
#define LC_INC_RD  	0xC1    // 数据一次读,地址加1 
#define LC_DEC_WR  	0xC2    // 数据一次写,地址减1 
#define LC_DEC_RD  	0xC3    // 数据一次读,地址减1 
#define LC_NOC_WR  	0xC4    // 数据一次写,地址不变 
#define LC_NOC_RD  	0xC5    // 数据一次读,地址不变 
#define LC_SCN_RD  	0xE0    // 屏读 
#define LC_SCN_CP  	0xE8    // 屏拷贝 
#define LC_BIT_OP  	0xF0    // 位操作: 
          // D0-D2:定义D0-D7位;D3:1置位;0:清除 
 
__flash uchar uPowArr[]  = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; 
 
// ASCII 字模宽度及高度定义 
#define ASC_CHR_WIDTH     8 
#define ASC_CHR_HEIGHT    16 
 
// ASCII 字模,显示为8*16 
__flash char ASC_MSK[96*16] = { 
 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /*--      --*/ 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,  /*--   !  --*/ 
  0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,  /*--   "  --*/ 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,  /*--   #  --*/ 
  0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00, 
  0x00,0x18,0x18,0x3C,0x66,0x60,0x30,0x18,  /*--   $  --*/ 
  0x0C,0x06,0x66,0x3C,0x18,0x18,0x00,0x00, 
  0x00,0x00,0x70,0xD8,0xDA,0x76,0x0C,0x18,  /*--   %  --*/ 
  0x30,0x6E,0x5B,0x1B,0x0E,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x38,0x6C,0x6C,0x38,0x60,  /*--   &  --*/ 
  0x6F,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,  /*--   '  --*/ 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,  /*--   (  --*/ 
  0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00, 
  0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,  /*--   )  --*/ 
  0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x36,0x1C,0x7F,  /*--   *  --*/ 
  0x1C,0x36,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,  /*--   +  --*/ 
  0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /*--   ,  --*/ 
  0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,  /*--   -  --*/ 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /*--   .  --*/ 
  0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,  /*--   /  --*/ 
  0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x1E,0x33,0x37,0x37,0x33,  /*--   0  --*/ 
  0x3B,0x3B,0x33,0x1E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x0C,0x1C,0x7C,0x0C,0x0C,  /*--   1  --*/ 
  0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x0C,  /*--   2  --*/ 
  0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x1C,  /*--   3  --*/ 
  0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x30,0x30,0x36,0x36,0x36,  /*--   4  --*/ 
  0x66,0x7F,0x06,0x06,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,  /*--   5  --*/ 
  0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x1C,0x18,0x30,0x7C,0x66,  /*--   6  --*/ 
  0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x06,0x0C,0x0C,0x18,  /*--   7  --*/ 
  0x18,0x30,0x30,0x30,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x76,0x3C,  /*--   8  --*/ 
  0x6E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,  /*--   9  --*/ 
  0x3E,0x0C,0x18,0x38,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,  /*--   :  --*/ 
  0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x00,  /*--   ;  --*/ 
  0x00,0x00,0x1C,0x1C,0x0C,0x18,0x00,0x00, 
  0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,  /*--   <  --*/ 
  0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,  /*--   =  --*/ 
  0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,  /*--   >  --*/ 
  0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x0C,0x18,  /*--   ?  --*/ 
  0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0xC3,0xC3,0xCF,0xDB,  /*--   @  --*/ 
  0xDB,0xCF,0xC0,0x7F,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,  /*--   A  --*/ 
  0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,  /*--   B  --*/ 
  0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,  /*--   C  --*/ 
  0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x78,0x6C,0x66,0x66,0x66,  /*--   D  --*/ 
  0x66,0x66,0x6C,0x78,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,  /*--   E  --*/ 
  0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x60,0x60,0x60,0x7C,  /*--   F  --*/ 
  0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x60,  /*--   G  --*/ 
  0x6E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,  /*--   H  --*/ 
  0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,  /*--   I  --*/ 
  0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,  /*--   J  --*/ 
  0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x6C,0x6C,0x78,  /*--   K  --*/ 
  0x6C,0x6C,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,  /*--   L  --*/ 
  0x60,0x60,0x60,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x63,0x63,0x77,0x6B,0x6B,  /*--   M  --*/ 
  0x6B,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x63,0x63,0x73,0x7B,0x6F,  /*--   N  --*/ 
  0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,  /*--   O  --*/ 
  0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,  /*--   P  --*/ 
  0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,  /*--   Q  --*/ 
  0x66,0x66,0x66,0x3C,0x0C,0x06,0x00,0x00, 
  0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x7C,  /*--   R  --*/ 
  0x6C,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x66,0x60,0x30,0x18,  /*--   S  --*/ 
  0x0C,0x06,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,  /*--   T  --*/ 
  0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,  /*--   U  --*/ 
  0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,  /*--   V  --*/ 
  0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,  /*--   W  --*/ 
  0x6B,0x36,0x36,0x36,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x34,0x18,0x18,  /*--   X  --*/ 
  0x2C,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,  /*--   Y  --*/ 
  0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x7E,0x06,0x06,0x0C,0x18,  /*--   Z  --*/ 
  0x30,0x60,0x60,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,  /*--   [  --*/ 
  0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x3C, 
  0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,  /*--   \  --*/ 
  0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,  /*--   ]  --*/ 
  0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x3C, 
  0x00,0x18,0x3C,0x66,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,0xFF,0xFF, 
  0x00,0x38,0x18,0x0C,0x00,0x00,0x00,0x00,  /*--   `  --*/ 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x06,  /*--   a  --*/ 
  0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,  /*--   b  --*/ 
  0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,  /*--   c  --*/ 
  0x60,0x60,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,  /*--   d  --*/ 
  0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,  /*--   e  --*/ 
  0x7E,0x60,0x60,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x1E,0x30,0x30,0x30,0x7E,  /*--   f  --*/ 
  0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,  /*--   g  --*/ 
  0x66,0x66,0x66,0x3E,0x06,0x06,0x7C,0x7C, 
  0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,  /*--   h  --*/ 
  0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x18,0x18,0x00,0x78,0x18,0x18,  /*--   i  --*/ 
  0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x0C,0x0C,0x00,0x3C,0x0C,0x0C,  /*--   j  --*/ 
  0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x78, 
  0x00,0x00,0x00,0x60,0x60,0x66,0x66,0x6C,  /*--   k  --*/ 
  0x78,0x6C,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x78,0x18,0x18,0x18,0x18,  /*--   l  --*/ 
  0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x7E,0x6B,0x6B,  /*--   m  --*/ 
  0x6B,0x6B,0x6B,0x63,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,  /*--   n  --*/ 
  0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,  /*--   o  --*/ 
  0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,  /*--   p  --*/ 
  0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x60, 
  0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,  /*--   q  --*/ 
  0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x06, 
  0x00,0x00,0x00,0x00,0x00,0x66,0x6E,0x70,  /*--   r  --*/ 
  0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x3E,0x60,0x60,  /*--   s  --*/ 
  0x3C,0x06,0x06,0x7C,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x30,0x30,0x7E,0x30,0x30,  /*--   t  --*/ 
  0x30,0x30,0x30,0x1E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,  /*--   u  --*/ 
  0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,  /*--   v  --*/ 
  0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x63,0x6B,0x6B,  /*--   w  --*/ 
  0x6B,0x6B,0x36,0x36,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,  /*--   x  --*/ 
  0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,  /*--   y  --*/ 
  0x66,0x66,0x66,0x3C,0x0C,0x18,0xF0,0xF0, 
  0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x0C,  /*--   z  --*/ 
  0x18,0x30,0x60,0x7E,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,  /*--   {  --*/ 
  0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00, 
  0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,  /*--   |  --*/ 
  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 
  0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,  /*--   }  --*/ 
  0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xDB,  /*--   ~  --*/ 
  0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  /*--   .  --*/ 
  0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00 
}; 
      
typedef struct         // 汉字字模数据结构 
	{ 
  	char Index[2]; 
  	char Msk[32]; 
	}typFNT_GB16; 
 
__flash typFNT_GB16 GB_16[] =  
{  // 显示为16*16 
"中",  	0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC, 
    	0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08, 
    	0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00, 
    	0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 
"文",  	0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE, 
        0x08,0x20,0x08,0x20,0x08,0x20,0x04,0x40, 
    	0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80, 
        0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00, 
"测",  	0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52, 
    	0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52, 
    	0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02, 
        0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04, 
"试",  	0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24, 
    	0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0, 
    	0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A, 
        0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00 
}; 
uchar const turnf[8] = {7,6,5,4,3,2,1,0}; 
uchar gCurRow,gCurCol;  // 当前行、列存储,行高16点,列宽8点 
 
/*  取当前行数据  */ 
uchar fnGetRow(void) 
{ 
  	return gCurRow; 
} 
 
/*  取当前列数据  */ 
uchar fnGetCol(void) 
{ 
  	return gCurCol; 
} 
 
/************************************************/ 
/* 状态位STA1,STA0判断(读写指令和读写数据)    */ 
/* 在读写数据或者写入命令前必须保证均为1      	*/ 
/************************************************/ 
uchar fnSTA01(void)       
{ 
  	uchar i; 
   
  	for(i=10;i>0;i--) 
  	{ 
    		if((LCMCW & 0x03) == 0x03)    	// 读取状态 
      		break; 
  	} 
  	return i;          			// 若返回零,说明错误 
} 
 
/********************************************************/ 
/*检查STA2,如果 STA2=1 为自动读状态      		*/ 
/********************************************************/ 
uchar fnSTA2(void) 
{ 
  	uchar i; 
   
  	for(i=10;i>0;i--) 
  	{ 
		if((LCMCW & 0x04) == 0x04) 
		break; 
  	} 
	return i;        			// 若返回零,说明错误 
} 
 
/********************************************************/ 
/* 状态位STA3判断(STA3 = 1 数据自动写状态)    	*/ 
/********************************************************/ 
uchar fnSTA3(void) 
{ 
  	uchar i; 
   
  	for(i=10;i>0;i--) 
  	{ 
    		if((LCMCW & 0x08) == 0x08) 
      		break; 
  	} 
  	return i;        			// 若返回零,说明错误 
} 
 
/********************************************************/ 
/* 状态位STA6判断(STA6 =1 屏读/屏拷贝状态)    	*/ 
/********************************************************/ 
uchar fnSTA6(void) 
{ 
  	uchar i; 
   
  	for(i=10;i>0;i--) 
  	{ 
    		if((LCMCW & 0x40) == 0x40) 
      		break; 
  	} 
  	return i;        		// 若返回零,说明错误 
} 
 
/********************************************************/ 
/* 写双参数的指令          				*/ 
/********************************************************/ 
uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) 
{ 
  	if(fnSTA01() == 0) 
    		return 1; 
  	LCMDW = uPar1; 
  	if(fnSTA01() == 0) 
    		return 2; 
  	LCMDW = uPar2; 
  	if(fnSTA01() == 0) 
    		return 3; 
  	LCMCW = uCmd; 
  	return 0;        		// 返回0成功 
} 
 
/********************************************************/ 
/* 写单参数的指令          				*/ 
/********************************************************/ 
uchar fnPR11(uchar uCmd,uchar uPar1) 
{ 
  	if(fnSTA01() == 0) 
    		return 1; 
  	LCMDW = uPar1; 
  	if(fnSTA01() == 0) 
    		return 2; 
  	LCMCW = uCmd; 
  	return 0;        		// 返回0成功 
} 
 
/********************************************************/ 
/* 写无参数的指令                    			*/ 
/********************************************************/ 
uchar fnPR12(uchar uCmd) 
{ 
  	if(fnSTA01() == 0) 
    		return 1; 
  	LCMCW = uCmd; 
  	return 0;        		// 返回0成功 
} 
 
/********************************************************/ 
/*  写数据                       			*/ 
/********************************************************/ 
uchar fnPR13(uchar uData) 
{ 
  	if(fnSTA3() == 0) 
    		return 1; 
  	LCMDW = uData; 
  	return 0;        		// 返回0成功 
} 
 
/********************************************************/ 
/* 读数据            					*/ 
/********************************************************/ 
uchar fnPR2(void) 
{ 
  	if(fnSTA01() == 0)return 1;    	// 获取状态,如果状态错 
  	return LCMDW;        		// 返回数据 
} 
 
/********************************************************/ 
/* 设置当前地址            				*/ 
/********************************************************/ 
void fnSetPos(uchar urow, uchar ucol) 
{ 
  	uint  iPos; 
 
  	iPos = urow * 30 + ucol; 
  	fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256); 
  	gCurRow = urow; 
  	gCurCol = ucol; 
} 
 
/********************************************************/ 
/* 设置当前显示行、列          				*/ 
/********************************************************/ 
void cursor(uchar uRow, uchar uCol) 
{ 
  	fnSetPos(uRow * 16, uCol); 
} 
 
/********************************************************/ 
/* 清屏              */ 
/********************************************************/ 
void cls(void) 
{ 
  	uint  i; 
 
  	fnPR1(LC_ADD_POS,0x00,0x00);    // 置地址指针为从零开始 
  	fnPR12(LC_AUT_WR);      	// 自动写 
  	for(i=0;i<240*128/8;i++)    	// 清一屏 
    		{ 
    		fnSTA3(); 
    		fnPR13(0x0);      	// 写数据,实际使用时请将0x55改成0x0 
    		} 
  	fnPR12(LC_AUT_OVR);      	// 自动写结束 
  	fnPR1(LC_ADD_POS,0x00,0x00);  	// 重置地址指针 
  	gCurRow = 0;        		// 置地址指针存储变量 
  	gCurCol = 0; 
} 
 
/********************************************************/ 
/* LCM 初始化            				*/ 
/********************************************************/ 
char fnLCMInit(void) 
{ 
  	if(fnPR1(LC_TXT_STP,0x00,0x00) != 0)  	// 文本显示区首地址 
    		return (0xff); 
  	fnPR1(LC_TXT_WID,0x1E,0x00);    	// 文本显示区宽度 
  	fnPR1(LC_GRH_STP,0x00,0x00);    	// 图形显示区首地址 
  	fnPR1(LC_GRH_WID,0x1E,0x00);    	// 图形显示区宽度 
  	fnPR12(LC_CUR_SHP | 0x01);    		// 光标形状 
  	fnPR12(LC_MOD_OR);      		// 显示方式设置 
  	fnPR12(LC_DIS_SW | 0x08);    		// 显示开关设置 
   
  	return 0; 
} 
 
/********************************************************/ 
/* ASCII(8*16) 及 汉字(16*16) 显示函数      */ 
/********************************************************/ 
uchar dprintf(uchar x,uchar y, char *ptr) 
{ 
 
  	char  c1,c2,cData; 
  	uchar i,j,uLen,uRow,uCol; 
  	uint  k; 
    	uLen=0; 
    	i=0; 
  	uRow = y; 
  	uCol = x; 
  	fnSetPos(uRow*16,uCol);      					//起点定位 
  	while (ptr[uLen]!=0){uLen++;};    				//探测字串长度 
 
  	while(i= 0x20) 
          			{ 
            				fnPR13( ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] ); 
          			} 
        			else 
          				fnPR13(cData); 
         			fnPR12(LC_AUT_OVR);  			//写数据结束 
                    		fnSetPos(uRow+j+1,uCol); 
        		} 
        		if(c1 != BS)      				// 非退格 
          			uCol++;      				// 列数加1 
      		} 
    		else           						// 中文 
      		{ 
      			for(j=0;j= 30)      					// 光标后移 
      		{ 
      			uRow += 16; 
      			if(uRow < 0x80) 
        		uCol -= 30; 
      			else 
        		{ 
        			uRow = 0; 
        			uCol = 0; 
        		} 
      		} 
    		fnSetPos(uRow,uCol); 
    		i++; 
  	} 
	return uLen;        //返回字串长度,汉字按2字节计算 
}   
 
/*==============================*/ 
/* 延时        */ 
/*==============================*/ 
void shortdelay(uint tt) 
{ 
	uchar i; 
        while (tt) 
	{ 
		i=100; 
                while (i)i--; 
                tt--; 
        }; 
}         
/****************************************/ 
/*  画点        */ 
/****************************************/ 
 
void point(uchar x,uchar y,uchar s) 
	{ 
	uchar	x1; 
	x1=x>>3;			//取Y方向分页地址 
	fnSetPos(y,x1);			//起点定位 
        x1 = turnf[ x & 0x07 ]; 
	x1=0xF0|x1|s;			//字节内位置计算 
	fnPR12(x1);			//画上屏幕,S显示属性8画点0擦除点 
	} 
 
 
/************************************************/ 
/*画线。任意方向的斜线,直线数学方程 aX+bY=1	*/ 
/************************************************/ 
void Linexy(uchar x0,uchar y0,uchar xt,uchar yt,uchar s) 
{ 
	register uchar t; 
	int xerr=0,yerr=0,delta_x,delta_y,distance; 
	int incx,incy,uRow,uCol; 
 
	delta_x = xt-x0;				//计算坐标增量 
	delta_y = yt-y0; 
	uRow = x0; 
	uCol = y0; 
	if(delta_x>0) incx=1;				//设置单步方向 
	else if( delta_x==0 ) incx=0;			//垂直线 
		else {incx=-1;delta_x=-delta_x;} 
 
	if(delta_y>0) incy=1; 
	else if( delta_y==0 ) incy=0;			//水平线 
		else {incy=-1;delta_y=-delta_y;} 
 
	if( delta_x > delta_y )	distance=delta_x;	//选取基本增量坐标轴 
	else distance=delta_y; 
 
	for( t=0;t <= distance+1; t++ ) 
        	{					//画线输出 
		point(uRow,uCol,s);			//画点 
		xerr +=	delta_x	; 
		yerr +=	delta_y	; 
		 
		if( xerr > distance ) 
                	{ 
			xerr-=distance; 
			uRow+=incx; 
			} 
		if( yerr > distance ) 
                	{ 
			yerr-=distance; 
			uCol+=incy; 
			} 
		} 
} 
 
/************************************************/ 
/*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2			*/ 
/************************************************/ 
void circle(uchar Ox,uchar Oy,uchar Rx,uchar s) 
{ 
	unsigned int xx,rr,xt,yt,rs,row,col; 
	yt=Rx; 
	rr=Rx*Rx+1;			//补偿 1 修正方形 
	rs=(yt+(yt>>1))>>1;		//(*0.75)分开1/8圆弧来画 
	for (xt=0;xt<=rs;xt++) 
	{ 
		xx=xt*xt; 
		while ((yt*yt)>(rr-xx))yt--; 
		row=Ox+xt;		//第一象限 
		col=Oy-yt; 
		point(row,col,s); 
		row=Ox-xt;		//第二象限 
		point(row,col,s); 
		col=Oy+yt;		//第三象限 
		point(row,col,s); 
		row=Ox+xt;		//第四象限 
		point(row,col,s); 
 
/***************45度镜象画另一半***************/ 
 
		row=Ox+yt;		//第一象限 
		col=Oy-xt; 
		point(row,col,s); 
		row=Ox-yt;		//第二象限 
		point(row,col,s); 
		col=Oy+xt;		//第三象限 
		point(row,col,s); 
		row=Ox+yt;		//第四象限 
		point(row,col,s); 
	} 
} 
         
         
void main(void)	// 测试用 
{ 
	uchar i; 
	shortdelay(1200); 
	MCUCR |=BIT(SRE)|BIT(SRW); 
	fnLCMInit(); 
	cls(); 
	cursor(0,0); 
	dprintf(3,3,"This is a test: 中文测试"); 
 
	dprintf(0,6,"LCM Exsample use 90S8515&6963"); 
	dprintf(15,7,"~Xiaoqi~"); 
	Linexy(10,20,239,110,8);			// 画斜线1 
	Linexy(10,20,217,1,8);				// 斜线2 
	Linexy(239,110,217,1,8);			// 斜线3 
	circle(185,45,40,8);				// 画圆 
	circle(185,45,41,8);				// 画同心圆加粗 
	shortdelay(24000); 
 
	while(1) 
        { 
//变化圆演示,直径不断的变化,由大到小再由小到大来回缩放 
		for (i=40;i>5;i--) 
        	{ 
            	circle(185,45,i+1,0);		//擦除外圆 
	    	circle(185,45,i,8); 
    		circle(185,45,i-1,8); 
		shortdelay(3600); 
            	}; 
 
		shortdelay(8000); 
 
		for (i=5;i<40;i++) 
        	{ 
            	circle(185,45,i-1,0);		//擦除内圆 
	    	circle(185,45,i,8);					 
    		circle(185,45,i+1,8); 
		shortdelay(1800); 
            	}; 
 
		shortdelay(4000); 
 
        }; 
}