?? lcd_6963.asm
字號(hào):
#include<stdio.h>
#include<intrins.h>
#include <reg51.h>
#include <math.h>
#include <absacc.h>
#include <string.h>
/* 地址定義 */
#define d_add XBYTE[0xDE00]
#define c_add XBYTE[0xDF00]
/* 常數(shù)定義 */
#define para1 0x20;
#define uchar unsigned char
#define uint unsigned int
#define dat1 DBYTE[0x30]
#define dat2 DBYTE[0x31]
#define com DBYTE[0x32]
#define code_1 DBYTE[0x33]
#define attr DBYTE[0x34]
#define O_Y DBYTE[0x35]
#define O_X DBYTE[0x36]
/* 定義標(biāo)志位 */
sbit Acc_0=ACC^0;
sbit Acc_1=ACC^1;
sbit Acc_2=ACC^2;
sbit Acc_3=ACC^3;
uchar num=0;
bit s=0;
uchar x=0;
uchar y=0;
/******************************/
code uchar linehead[]={0x00,0x01,0x03,0x04,0x05,0x06,0x07};
code unsigned char CGTAB[320]={
/*80=0 */
0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x63,
0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,
/*82=1 */
0x00,0x00,0x00,0x18,0x78,0x18,0x18,0x18,
0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,
/*84=2 */
0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x06,
0x06,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,
/*86=3 */
0x00,0x00,0x00,0x3E,0x63,0x63,0x06,0x1C,
0x06,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,
/*88=4 */
0x00,0x00,0x00,0x06,0x0E,0x1E,0x36,0x36,
0x66,0x66,0x7F,0x06,0x06,0x1F,0x00,0x00,
/*8a=5 */
0x00,0x00,0x00,0x7F,0x60,0x60,0x60,0x7C,
0x76,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,
/*8c=6 */
0x00,0x00,0x00,0x1E,0x36,0x60,0x60,0x7C,
0x76,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,
/*8e=7 */
0x00,0x00,0x00,0x7F,0x66,0x66,0x0C,0x0C,
0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
/*90=8 */
0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x36,
0x1C,0x36,0x63,0x63,0x63,0x3E,0x00,0x00,
/*92=9 */
0x00,0x00,0x00,0x1C,0x36,0x63,0x63,0x63,
0x37,0x1F,0x03,0x03,0x36,0x3C,0x00,0x00,
/*94=:*/
0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,
0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x00,0x00,
/*96=o */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,
0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,
/*98=k */
0x00,0x00,0x00,0xE0,0x60,0x60,0x60,0x6F,
0x6C,0x78,0x7C,0x6C,0x66,0xFF,0x00,0x00,
/*9a=z */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,
0x66,0x0C,0x18,0x18,0x33,0x7F,0x00,0x00,
/*9c=- */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*9e=" */
0x00,0x1B,0x3F,0x36,0x6C,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*A0=G */
0x00,0x00,0x00,0x3E,0x66,0x66,0xC0,0xC0,
0xC0,0xCF,0xC6,0x66,0x66,0x3C,0x00,0x00,
/*A2=P */
0x00,0x00,0x00,0xFE,0x63,0x63,0x63,0x63,
0x7E,0x60,0x60,0x60,0x60,0xF0,0x00,0x00,
/*A4=Y */
0x00,0x00,0x00,0xFF,0x66,0x66,0x3C,0x3C,
0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,
/*A6=R */
0x00,0x00,0x00,0xFE,0x63,0x63,0x63,0x7E,
0x6C,0x6C,0x66,0x66,0x63,0xF3,0x00,0x00
};
code unsigned char CCTAB[49][32]={
/* 0=紅*/
0x10,0x10,0x23,0x20,0x44,0xF8,0x10,0x20,
0x40,0xFC,0x40,0x00,0x1C,0xE0,0x47,0x00,
0x00,0x08,0xFC,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x24,0xFE,0x00,
/*1=綠*/
0x10,0x13,0x20,0x21,0x44,0xFF,0x10,0x22,
0x41,0xF9,0x00,0x01,0x1A,0xE4,0x41,0x00,
0x08,0xFC,0x08,0xF8,0x08,0xFE,0x40,0x44,
0x4C,0x50,0xE0,0x50,0x48,0x4E,0x44,0x80,
/*2=黃*/
};
unsigned char code DTAB[11]={ 0x37,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x00,0x39,0x4f,0x55};
unsigned char code ASC[10]={ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
INIT_1();
CLEAR();
CGRAM();
CCWR1_PR();
CCW2_PR();
CW2_PR();
W_DOT();
PR1();
PR11();
PR12();
ST01();
ST2();
ST3();
DISHAZIT(uchar x,uchar y,uchar d);
DISHAZIW(uchar x,uchar y,uchar d);
DISDASC(uchar x,uchar y,uchar d);
DISASC(uchar x,uchar y,uchar d);
FCCW2_PR();
ShowLine(uchar x,uchar y,uchar *puts,uchar le,uchar kk);
FDISHAZIT(uchar x,uchar y,uchar d);
GUANGBIAO(uchar x,uchar y);
void delay(int t);
uchar keyscan();
/**************************/
/* 初始化函數(shù) */
/**************************/
INT_1()
{
dat1=0x00; /*設(shè)文本顯示區(qū)域首地址*/
dat2=0x00;
com=0x40;
PR1();
dat1=para1; /*設(shè)文本顯示區(qū)域?qū)挾?/
dat2=0x00;
com=0x41;
PR1();
dat1=0x00; /*設(shè)圖形顯示區(qū)域首地址*/
dat2=0x08;
com=0x42;
PR1();
dat1=para1; /*設(shè)圖形顯示區(qū)域?qū)挾?/
dat2=0x00;
com=0x43;
PR1();
com=0xa0; /*光標(biāo)形狀設(shè)置*/
PR12();
com=0x80; /*顯示方式設(shè)置邏輯"或"合成*/
PR12();
com=0x9c; /*顯示開關(guān)設(shè)置 開文本和圖形顯示*/
PR12();
}
/***************************/
/* 清顯示子程序 */
/***************************/
CLEAR()
{
unsigned char i,j;
dat1=0x00;
dat2=0x00;
com=0x24;
PR1();
com=0xb0;
PR12();
for(i=0;i<205;i++)
{
for(j=0;j<=40;j++)
{
ST3();
d_add=0x00;
}
}
com=0xb2;
PR12();
}/**************************/
/* CGRAM函數(shù) */
/**************************/
CGRAM()
{
unsigned int i;
dat1=0x03;
dat2=0x00;
com=0x22; /* 設(shè)置CGRAM偏置地址 */
PR1();
dat1=0x00;
dat2=0x1c;
com=0x24; /* 設(shè)置存儲(chǔ)器地址指針 */
PR1();
com=0xb0; /* 設(shè)置自動(dòng)寫方式 */
PR12();
for(i=0;i<320;i++)
{
ST3();
d_add=CGTAB[i];
}
com=0xb2; /* 設(shè)置自動(dòng)寫結(jié)束方式 */
PR12();
}
/********************************/
/* 漢字寫入(文本方式)函數(shù) */
/********************************/
CCW1_PR()
{
unsigned int i,j;
i=para1;
j=i*O_Y+O_X;
dat1=j%256;
dat2=j/256;
com=0x24; /* 設(shè)置顯示地址 */
PR1();
dat2=code_1; /* 寫入左上半部漢字代碼 */
com=0xc0;
PR11();
dat2=code_1+0x02; /* 寫入右上半部漢字代碼 */
PR11();
j=j+i;
dat1=j%256; /* 顯示RAM地址修正 */
dat2=j/256;
com=0x24;
PR1();
dat2=code_1+0x01; /* 寫入左下半部漢字代碼 */
com=0xc0;
PR11();
dat2=code_1+0x03; /* 寫入右下半部漢字代碼 */
PR11();
}
CCWD_PR() /* */
{
unsigned int i,j;
i=para1;
j=i*O_Y+O_X;
dat1=j%256;
dat2=j/256;
com=0x24; /* 設(shè)置顯示地址 */
PR1();
dat2=code_1; /* 寫入左上半部漢字代碼 */
com=0xc0;
PR11();
j=j+i;
dat1=j%256; /* 顯示RAM地址修正 */
dat2=j/256;
com=0x24;
PR1();
dat2=code_1+0x01; /* 寫入左下半部漢字代碼 */
com=0xc0;
PR11();
}
CCW2_PR()
{
unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+0x0800;
for(count1=0;count1<16;count1++)
{
dat1=j%256;
dat2=j/256;
com=0x24;
PR1();
dat2=CCTAB[code_1][count1]; /* 寫入漢字左側(cè)代碼 */
com=0xc0;
PR11();
dat2=CCTAB[code_1][count1+16]; /* 寫入漢字右側(cè)代碼 */
PR11();
j=j+i;
}
}
/********************************/
/* 西文字符寫入(文本屬性)函數(shù) */
/********************************/
CW2_PR()
{
unsigned int i,j;
i=para1;
j=i*O_Y+O_X;
dat1=j%256;
dat2=j/256;
com=0x24; /* 顯示地址設(shè)置 */
PR1();
dat2=code_1;
com=0xC0; /* 數(shù)據(jù)寫 */
PR11();
dat2=0x08;
com=0x24;
PR1();
}
/****************************/
/* 繪點(diǎn)函數(shù) */
/****************************/
W_DOT()
{
unsigned char i;
unsigned int k;
i=O_X%8;
O_X=O_X/8;
k=0x20*O_Y+O_X+0x0800;
dat1=k%256;
dat2=k/256;
com=0x24;
PR1();
i=0x07-i;
com=i|0xf8; /* 位操作 */
PR12();
}
/****************************/
/* 寫指令和寫數(shù)據(jù)函數(shù) */
/****************************/
PR1() /* 雙字節(jié)參數(shù)指令寫入入口 */
{
ST01();
d_add=dat1; /* 取第一參數(shù)單元數(shù)據(jù) */
PR11();
}
PR11() /* 單字節(jié)參數(shù)指令寫入入口 */
{
ST01();
d_add=dat2; /* 取第二參數(shù)單元數(shù)據(jù) */
PR12();
}
PR12() /* 無參數(shù)指令寫入入口 */
{
ST01();
c_add=com; /* 寫入指令代碼 */
}
/************************************************/
/* 判狀態(tài)位S1,S0 函數(shù)(讀寫指令和讀寫數(shù)據(jù)狀態(tài)) */
/************************************************/
ST01()
{
do
{
ACC=c_add;
}
while(Acc_0==0,Acc_1==0);
}
/************************************/
/* 判狀態(tài)位S2函數(shù)(數(shù)據(jù)自動(dòng)讀狀態(tài)) */
/************************************/
ST2()
{
do
{
ACC=c_add;
}
while(Acc_2==0);
}
/************************************/
/* 判狀態(tài)位S3函數(shù)(數(shù)據(jù)自動(dòng)寫狀態(tài)) */
/************************************/
ST3()
{
do
{
ACC=c_add;
}
while(Acc_3==0);
}
DISHAZIT(uchar x,uchar y,uchar d) /*漢字寫入(圖文方式)*/
{
code_1=d;
O_X=x;
O_Y=y;
CCW2_PR();
}
DISDASC(uchar x,uchar y,uchar d) /*漢字寫入(文本方式)*/
{
code_1=d;
O_X=x;
O_Y=y;
CCWD_PR();
}
DISASC(uchar x,uchar y,uchar d)
{
O_X=x;
O_Y=y;
code_1=d; /*西文寫WELCOME YOU */
CW2_PR();
}
ShowLine(uchar x,uchar y,uchar *puts,uchar le,uchar kk)
{
uchar uk,jk,byte;
for(uk=x,jk=0;jk<le;jk++)
{
byte=puts[jk];
if(kk==0){ DISHAZIT(uk,y,byte);}
else {FDISHAZIT(uk,y,byte);}
uk=uk+2; /*漢字從0x80開始,包括0x80*/
/* else {DISASC(x,k,byte);k=k+1;} 字母 ASCII碼從0X20 開始*/
}
}
FDISHAZIT(uchar x,uchar y,uchar d) /*漢字寫入(反圖文方式)*/
{
code_1=d;
O_X=x;
O_Y=y;
FCCW2_PR();
}
FCCW2_PR()
{
unsigned int i,j,count1;
i=para1;
j=i*O_Y+O_X+0x0800;
for(count1=0;count1<16;count1++)
{
dat1=j%256;
dat2=j/256;
com=0x24;
PR1();
dat2=0xff-CCTAB[code_1][count1]; /* 寫入漢字左側(cè)代碼 */
com=0xc0;
PR11();
dat2=0xff-CCTAB[code_1][count1+16]; /* 寫入漢字右側(cè)代碼 */
PR11();
j=j+i;
}
}
GUANGBIAO(uchar x,uchar y)
{
dat1=x; /*光標(biāo)定位*/
dat2=y;
com=0x21;
PR1();
}
/* 演示主程序 */
/***************************/
void main()
{
uchar code STR1[5]={0x00,0x01,0x02,0x03,0x04};
INT_1(); /* 初始化函數(shù) */
CLEAR(); /* 清屏函數(shù) */
CGRAM(); /* 建立CGRAM內(nèi)字庫(kù)函數(shù) */
/* 漢字寫入(文本方式)方*/
FDISHAZIT(0x16,0x00,0X00);
/* 漢字寫入(圖文方式)紅*/
DISHAZIT(0x18,0x10,0X01);
/* 漢字寫入(圖文方式)綠*/
DISDASC(0x01,0x08,0X82);
/* 漢字寫入(文本方式)(*/
DISDASC(0x01,0x0a,0X84); /* 漢字寫入(文本方式)*/
ShowLine(0x0a,0x70,STR1,5,1);
ShowLine(0x0a,0x50,STR1,5,0);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -