?? b07.c
字號:
#define PD1 61 /* 122/2 分成左右兩半屏(122x32) */
unsigned char Column;
unsigned char Page_ ; /* 頁地址寄存器 D1,DO:頁地址 */
unsigned char Code_ ; /* 字符代碼寄存器 */
unsigned char Command; /* 指令寄存器 */
unsigned char LCDData; /* 數據寄存器 */
#define CWADD1 0xfa00 /* 寫指令代碼地址(E1) */
#define DWADD1 0xfa40 /* 寫顯示數據地址(E1) */
#define CRADD1 0xfa80 /* 讀狀態字地址(E1) */
#define DRADD1 0xfac0 /* 讀顯示數據地址(E1) */
#define CWADD2 0xf800 /* 寫指令代碼地址(E2) */
#define DWADD2 0xf840 /* 寫顯示數進地址(E2) */
#define CRADD2 0xf880 /* 讀狀態字地址(E2) */
#define DRADD2 0xf8c0 /* 讀顯示數據地址(E2) */
extern unsigned char IN(unsigned int port);
extern void OUT(unsigned int port, unsigned char v);
/* 英文字模庫 8x8 點陣 */
unsigned char const EETAB[][8]={
{0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00}, /* 0 */
{0x10,0x30,0x50,0x10,0x10,0x10,0x7c,0x00}, /* 1 */
{0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00}, /* 2 */
{0x78,0x84,0x04,0x38,0x04,0x84,0x78,0x00}}; /* 3 */
/* 中文字模庫 16x16點陣 */
unsigned char const CCTAB[][32] ={
{0x00,0x04,0xe4,0x24,0x24,0x64,0xb4,0x2f, /* 南 */
0x24,0xa4,0x64,0x24,0x24,0xe6,0x04,0x00,
0x00,0x00,0x7f,0x04,0x05,0x05,0x05,0x7f,
0x05,0x05,0x05,0x25,0x44,0x3f,0x00,0x00},
{0x00,0x04,0x04,0xe4,0x24,0x24,0x25,0x26, /* 京 */
0x24,0x24,0x24,0xe4,0x06,0x04,0x00,0x00,
0x00,0x20,0x10,0x19,0x0D,0x41,0x81,0x7f,
0x01,0x01,0x05,0x0d,0x38,0x10,0x00,0x00},
{0x00,0x80,0x60,0xf8,0x07,0x0a,0x28,0x28, /* 偉 */
0x28,0xff,0x28,0x28,0x28,0x28,0x00,0x00,
0x01,0x00,0x00,0xfF,0x00,0x01,0x01,0x01,
0x01,0xff,0x01,0x21,0x41,0x3f,0x00,0x00},
{0x08,0x08,0x89,0xce,0x28,0x18,0x02,0x7a, /* 福 */
0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x02,0x00,
0x02,0x01,0x00,0xff,0x01,0x02,0xff,0x49,
0x49,0x49,0x7f,0x49,0x49,0x49,0xff,0x00}};
/* 1.寫指令代碼子程序(E1) */
void WriteCommandE1()
{
while(IN(CRADD1) & 0x80);
OUT(CWADD1, Command);
}
/* 2.寫顯示數據子程序(E1) */
void WriteDataE1()
{
while(IN(CRADD1) & 0x80);
OUT(DWADD1, LCDData);
}
/* 3.讀顯示數據子程序(E1) */
void ReadDataE1()
{
while(IN(CRADD1) & 0x80);
LCDData = IN(DRADD1);
}
/* 4.寫指令代碼子程序(E2) */
void WriteCommandE2()
{
while(IN(CRADD2) & 0x80);
OUT(CWADD2, Command);
}
/* 5.寫顯示數據子程序(E2) */
void WriteDataE2()
{
while(IN(CRADD2) & 0x80);
OUT(DWADD2, LCDData);
}
/* 6.讀顯示數據子程序(E2) */
void ReadDataE2()
{
while(IN(CRADD2) & 0x80);
LCDData = IN(DRADD2);
}
/* 初始化程序 */
void Init()
{
Command = 0xe2;
WriteCommandE1();
WriteCommandE2();
Command = 0xa4;
WriteCommandE1();
WriteCommandE2();
Command = 0xa9;
WriteCommandE1();
WriteCommandE2();
Command = 0xa0;
WriteCommandE1();
WriteCommandE2();
Command = 0xc0;
WriteCommandE1();
WriteCommandE2();
Command = 0xaf;
WriteCommandE1();
WriteCommandE2();
}
/* 清屏 */
void Clear()
{
unsigned char i,j;
i = 0;
do {
Command = (i + 0xb8);/* 頁地址設置 */
WriteCommandE1();
WriteCommandE2();
Command = 0x00; /* 列地址設置為"0" */
WriteCommandE1();
WriteCommandE2();
j = 0x50; /* 一頁清 80個字節 */
do {
LCDData = 0x00; /* 顯示數據為"0" */
WriteDataE1();
WriteDataE2();
}while(--j !=0); /* 頁內字節清零循環 */
}while(++i !=4); /* 頁地址暫存器加一 */
/* 顯示區清零循環 */
}
/* 延時程序 */
void Delay()
{
unsigned char i,j;
i = 20;
j = 0;
do{
do{
}while(--j !=0);
}while( --i != 0 );
}
/* 中文顯示子程序 */
void WriteCHN16x16()
{
unsigned char i,j,k;
i = 0;
j = 0;
while(j<2) {
Command = ((Page_ + j) & 0x03) | 0xb8; /* 設置頁地址 */
WriteCommandE1();
WriteCommandE2();
k = Column; /* 列地址值 */
while(k < Column + 16){
if (k < PD1) { /* 為左半屏顯示區域(E1) */
Command = k;
WriteCommandE1(); /* 設置列地址值 */
LCDData = CCTAB[Code_][i]; /* 取漢字字模數據 */
WriteDataE1(); /* 寫字模數據 */
} else{ /* 為右半屏顯示區域(E2) */
Command = k-PD1;
WriteCommandE2(); /* 設置列地址值 */
LCDData = CCTAB[Code_][i]; /* 取漢字字模數據 */
WriteDataE2(); /* 寫字模數據 */
};
i++;
if( ++k >= PD1 * 2) break; /* 列地址是否超出顯示范圍 */
} ;
j++;
};
}
/* 中文顯示程序 */
void main()
{
Init();
Clear();
Page_ = 0x02;
Column = 0x00;
Code_ = 0x00;
WriteCHN16x16();
Page_ = 0x02;
Column = 0x10;
Code_ = 0x01;
WriteCHN16x16();
Page_ = 0x02;
Column = 0x20;
Code_ = 0x02;
WriteCHN16x16();
Page_ = 0x02;
Column = 0x30;
Code_ = 0x03;
WriteCHN16x16();
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -