下面是C语言写的一个LCD驱动芯片1335控制器源程序
/*include files */
#include "w78e58.h"
//#include "zimo.h" //这是自己做的一个汉字库,
可以在本站下载一个字模程序,添加汉字。
世纪开发网:21hf.com*/
#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))<<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;}
}
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<16;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坐标寄存器(字节
[1] [2] 下一页