/*include files */ #i nclude "w78e58.h" //#i nclude "zimo.h" //这是自己做的一个汉字库, 可以在本站下载一个字模程序,添加汉字。 世纪开发网:21hf.com*/ #i nclude "stdio.h" #i nclude "stdlib.h" #i nclude "math.h" #i nclude "absacc.h" #i nclude "intrins.h" #i nclude "string.h" /*define function*/ #define HIBYTE(V1) ((BYTE)((V1)>>8)) #define LOBYTE(V1) ((BYTE)((V1)&0Xff)) #define MAKEWORD(V1,V2) ((((WORD)(V1))<<8)+(WORD)(V2)) /*define SED1335 port address*/ #define SEDWRCOM XBYTE[0X1100] //写指令代码 #define SEDRDCSR XBYTE[0X1100] //读光标指针 #define SEDWRDAT XBYTE[0X1000] // 写指令参数和显示数据 /*define LCD code */ #define SYSSET 0x40 #define SCROLL 0x44 #define SLEEP 0x53 #define DISPON 0x59 #define DISPOFF 0x58 #define OVLAY 0x5b #define HDOTSCR 0x5a #define CSRFORM 0x5d #define CGRAMADR 0x5c #define CSRRGT 0x4c #define CSRLFT 0x4d #define CSRUP 0x4e #define CSRDOWN 0x4f #define CSRW 0x46 #define CSRR 0x47 #define MWRITE 0x42 #define MREAD 0x43 #define AP 30 /*define screen flag*/ BOOL FG_FIRST=0; BOOL FG_MAIN=0; BOOL FG_PWD=0; BOOL FG_PRG=0; BOOL FG_PRG1=0; BOOL FG_PRG2=0; BOOL FG_PRG3=0; BOOL FG_CYCLE=0; BOOL FG_LIMIT=0; BOOL FG_TIME=0; BOOL FG_INPUT=0; BOOL FG_OUTPUT=0; BOOL FG_PID=0; BOOL FG_SELFCTL=0; BOOL FG_VARY=0; /*LCD initial parameters*/ BYTE code SYSTAB[8]={0x30,0x87,0x0f,0x1d,0x4c,0xa0,0x1e,0x00}; BYTE code SCRTAB[10]={0x00,0x00,0xa0,0x00,0x40,0xa0,0x00,0x80,0x00,0x00}; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*START OF THE PROGRAME*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*SBUROUTINES OF LCD DRIVE*/ void WLCDCOM(BYTE com ) //写LCD控制命令 { SEDWRCOM=com; _nop_(); }
void WLCDDATA(BYTE ref ) //写LCD控制参数和显示字符数据 { SEDWRDAT=ref; _nop_(); } void CLRVRAM(void) //显示存储器清零 { WORD i,j; WLCDCOM(CSRRGT); WLCDCOM(CSRW); WLCDDATA(0x00); WLCDDATA(0x00); WLCDCOM(MWRITE); for(i=0;i<=0xff;i++) { for(j=0;j<=0xff;j++) { WLCDDATA(0x00); } } } void CLRSCREEN(void) //清除显示屏幕 { WORD i,j; WLCDCOM(CSRRGT); WLCDCOM(CSRW); WLCDDATA(0X00); WLCDDATA(0X00); WLCDCOM(MWRITE); for(i=0;i<0xa0;i++) { for(j=0;j { WLCDDATA(0x00); } } } void WNUMBER(BYTE x,BYTE y,BYTE (*p)[16],BYTE num ) //功能:显示0~9等10个数字,num为要显示的数字的值(16×8) //x坐标寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi,lo; BYTE a,b,c; temp=y*AP; hi=HIBYTE(temp); lo=LOBYTE(temp); lo=x+lo; if(CY==1) {hi+=0x01;CY=0;} WLCDCOM(CSRDOWN); WLCDCOM(CSRW); WLCDDATA(lo); WLCDDATA(hi); WLCDCOM(MWRITE); for(c=0;c<16;c++) { WLCDDATA(*(*(p+num)+c)); } lo=lo+0x01; if(CY==1) {hi+=0x01;CY=0;} } void WBLOCK(BYTE x,BYTE y,BYTE (*p)[16],BYTE num ) //功能:显示16×8点字符,num为要显示的字符块长度 //x坐标为低8位寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi,lo; BYTE a,b,c; temp=y*AP; hi=HIBYTE(temp); lo=LOBYTE(temp); lo=x+lo; if(CY==1) {hi+=0x01;CY=0;} WLCDCOM(CSRDOWN); WLCDCOM(CSRW); WLCDDATA(lo); WLCDDATA(hi); WLCDCOM(MWRITE); for(c=0;c<16;c++) { WLCDDATA(*(*(p+num-1)+c)); } lo=lo+0x01; if(CY==1) {hi+=0x01;CY=0;} |