⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd驱动芯片1335控制器c51源程序.c

📁 Epson的1335 Controller的C51驱动程序
💻 C
字号:
/*include files */ 
#include "w78e58.h" 
//#include "zimo.h" //这是自己做的一个汉字库, 
#include "stdio.h" 
#include "stdlib.h" 
#include "math.h" 
#include "absacc.h" 
#include "intrins.h" 
#include "string.h"  
/*define function*/ 
#define HIBYTE(V1) ((BYTE)((V1)>>8)) 
#define LOBYTE(V1) ((BYTE)((V1)&0Xff)) 
#define MAKEWORD(V1,V2) ((((WORD)(V1)) 

/*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 
{ 
for(j=0;j 
{ 
WLCDDATA(0x00); 
} 
} 
} 

void CLRSCREEN(void) 
//清除显示屏幕 
{ 
WORD i,j; 
WLCDCOM(CSRRGT); 
WLCDCOM(CSRW); 
WLCDDATA(0X00); 
WLCDDATA(0X00); 
WLCDCOM(MWRITE); 
for(i=0;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 
{ 
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 
{ 
WLCDDATA(*(*(p+num-1)+c)); 
} 
lo=lo+0x01; 
if(CY==1) {hi+=0x01;CY=0;} 
} 

void FILLBLOCK(BYTE x,BYTE y,BYTE len ) 
//功能:显示16×16字符,len为要显示的字符块的长度 
//x坐标为低8位寄存器(字节),y坐标寄存器(点行) 
{ 
WORD temp; 
BYTE hi,lo; 
BYTE a,b; 
temp=y*AP; 
hi=HIBYTE(temp); 
lo=LOBYTE(temp); 
lo=x+lo; 
if(CY==1) {hi+=0x01;CY=0;} 
for(b=0;b { 
WLCDCOM(CSRDOWN); 
WLCDCOM(CSRW); 
WLCDDATA(lo); 
WLCDDATA(hi); 
WLCDCOM(MWRITE); 
for(a=0;a 
{ 
WLCDDATA(0xff); 
} 
lo=lo+0x01; 
if(CY==1) {hi+=0x01;CY=0;} 
} 
} 

void CLRBLOCK(BYTE x,BYTE y,BYTE len ) 
//清除16×8字符快,len为要清除的字符块的长度 
//x坐标寄存器(字节),y坐标寄存器(点行) 
{ 
WORD temp; 
BYTE hi,lo; 
BYTE a,b; 
temp=y*AP; 
hi=HIBYTE(temp); 
lo=LOBYTE(temp); 
lo=x+lo; 
if(CY==1) {hi+=0x01;CY=0;} 
for(b=0;b { 
WLCDCOM(CSRDOWN); 
WLCDCOM(CSRW); 
WLCDDATA(lo); 
WLCDDATA(hi); 
WLCDCOM(MWRITE); 
for(a=0;a 
{ 
WLCDDATA(0x00); 
} 
lo=lo+0x01; 
if(CY==1) {hi+=0x01;CY=0;} 
} 
} 


void WLCDCHR(BYTE x,BYTE y,BYTE (*p)[32],BYTE num ) 
//功能:显示16×32字符,num为要显示字符数组的第一维的值 
//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); 
for(a=0;a { 
WLCDCOM(CSRW); 
WLCDDATA(lo); 
WLCDDATA(hi); 
WLCDCOM(MWRITE); 
for(c=0;c 
{ 
WLCDDATA(*(*(p+a)+c)); 
} 
lo=lo+0x01; 
if(CY==1) {hi+=0x01;CY=0;} 

WLCDCOM(CSRW); 
WLCDDATA(lo); 
WLCDDATA(hi); 
WLCDCOM(MWRITE); 
for(c=1;c 
{ 
WLCDDATA(*(*(p+a)+c)); 
} 
lo=lo+0x01; 
if(CY==1) {hi+=0x01;CY=0;} 

} 
} 

void INITLCD(void) 
//初始化LCD显示参数以及界面 
{ 
WORD a,b,c; 
WLCDCOM(SYSSET); 
for(b=0;b 
{ 
WLCDDATA(SYSTAB[b]); 
} 
WLCDCOM(SCROLL); 
for(b=0;b 
{ 
WLCDDATA(SCRTAB[b]); 
} 
WLCDCOM(HDOTSCR); 
WLCDDATA(0X00); 
WLCDCOM(OVLAY); 
WLCDDATA(0X1c); 
WLCDCOM(DISPOFF); 
WLCDDATA(0X56); 
CLRVRAM(); 
WLCDCOM(CSRFORM); 
WLCDDATA(0X07); 
WLCDDATA(0X8f); 
WLCDCOM(DISPON); 
WLCDDATA(0X16); 

} 

/*DELAY SUBROUTINES*/ 
void DELAYX1MS(WORD count) 
//延时count毫秒 
{ 
BYTE i,j; 

for(i=0;i for(j=0;j 
; 
} 


void CLRFG(void)//清除标志位 
{ 
FG_FIRST=0; 
FG_MAIN=0; 
FG_PRG=0; 
FG_PRG1=0; 
FG_PRG2=0; 
FG_PRG3=0; 
FG_CYCLE=0; 
FG_LIMIT=0; 
FG_TIME=0; 
FG_INPUT=0; 
FG_OUTPUT=0; 
FG_PID=0; 
FG_SELFCTL=0; 
FG_VARY=0; 

} 

/* 
void FLASH() 
{ 
FILLBLOCK(7,0,2); 
DELAYX1MS(15); 
CLRBLOCK(7,0,2); 
DELAYX1MS(8); 
WNUMBER(7,0,C_NUM,1); 
WNUMBER(8,0,C_NUM,2); 
DELAYX1MS(15); 
} 
*/ 

void DISPPWD(void) 
{ 
// CLRFG(); 
CLRSCREEN(); 
WLCDCHR(2,64,C_PASSWORD,5); 
WBLOCK(12,64,C_COLON,1); 
FG_PWD=1; 
} 

void DISPPRG(void) //编程的第一界面 
{ 
CLRFG(); 
CLRSCREEN(); 
WLCDCHR(0,0,C_ROUT,2); 
WBLOCK(4,0,C_COLON,1); 

WLCDCHR(1,144,C_PROG,2); 
WLCDCHR(9,144,C_CANCEL,2); 
WLCDCHR(17,144,C_ENTER,2); 
WLCDCHR(25,144,C_MAIN,2); 
FG_PRG=1; 
} 


void DISPCYCLE(void) 
{ 
CLRFG(); 
CLRSCREEN(); 
WLCDCHR(0,16,C_CYCLE,2); 
WLCDCHR(4,16,C_STSEG,2); 

WLCDCHR(10,16,C_CYCLE,2); 
WLCDCHR(14,16,C_ENDSEG,2); 

WLCDCHR(20,16,C_CYCLE,2); 
WLCDCHR(24,16,C_TIMES,2); 


WLCDCHR(9,144,C_CANCEL,2); 
WLCDCHR(17,144,C_ENTER,2); 
WLCDCHR(25,144,C_MAIN,2); 
FG_CYCLE=1; 
} 


main() 
{ 
BYTE i; 
INITLCD(); 
CLRSCREEN(); 
WNUMBER(6,32,C_LETTER,3); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -