?? 1335控制器c51源程序.txt
字號:
/*LCD驅動芯片1335控制器C51源程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*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))<<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坐標寄存器(字節),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(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<0x20;c+=2)
{
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<0x20;c+=2)
{
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<8;b++)
{
WLCDDATA(SYSTAB[b]);
}
WLCDCOM(SCROLL);
for(b=0;b<10;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<120;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 + -