?? lcd.h
字號(hào):
#include <absacc.h>
#include <intrins.h>
#include <reg51.h>
#include "HZcode.h"
//#include "1302.h"
// LCD128*64 數(shù)據(jù)線
#define LCD12864DataPort P1
// LCD128*64 I/O 信號(hào)管腳
sbit di = P2^0; // 數(shù)據(jù)\指令 選擇
sbit rw = P2^2; // 讀\寫 選擇
sbit en = P2^1; // 讀\寫使能
sbit cs1= P2^3; // 片選1,低有效(前64列)
sbit cs2= P2^4; // 片選2,低有效(后64列)
#define uchar unsigned char
#define uint unsigned int
void nop(void)
{
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
//狀態(tài)檢查
void CheckState(void)
{
unsigned char dat;
dat = 0x00;
rw=1;di=0;
do
{
en=1;_nop_();
dat=P1;en=0;
}
while((dat&0x10)!=0);
rw=0;di=0;
}
void WriteByte(uchar dat)
{
CheckState();
di=1;
rw=0;
LCD12864DataPort=dat;
en=1;
en=0;
}
/*-----------------------------------------------------------------------------------------------------*/
//向LCD發(fā)送命令
//command :命令
SendCommandToLCD(uchar command)
{
CheckState();
rw=0;
di=0;
LCD12864DataPort=command;
en=1;
en=0;
}
/*----------------------------------------------------------------------------------------------------*/
//設(shè)定行地址(頁(yè))--X 0-7
void SetLine(uchar line)
{
line &= 0x07; // 0<=line<=7
line |= 0xb8; //1011 1xxx
SendCommandToLCD(line);
}
//設(shè)定列地址--Y 0-63
void SetColumn(uchar column)
{
column &= 0x3f; // 0=<column<=63
column |= 0x40; //01xx xxxx
SendCommandToLCD(column);
}
//設(shè)定顯示開(kāi)始行--XX
void SetStartLine(uchar startline) //0--63
{
//startline &= 0x07;
startline |= 0xc0; //1100 0000
SendCommandToLCD(startline);
}
//開(kāi)關(guān)顯示
void SetOnOff(uchar onoff)
{
onoff|=0x3e; //0011 111x
SendCommandToLCD(onoff);
}
/*---------------------------------------------------------------------------------------------------*/
//選擇屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(uchar screen)
{ //北京顯示器:負(fù)有效 cs1: 0--右; cs2: 0--左
switch(screen)
{
case 0:
cs1=0;//全屏
nop();
cs2=0;
nop();
break;
case 1:
cs1=1;//左屏
nop();
cs2=0;
nop();
break;
case 2:
cs1=0;//右屏
nop();
cs2=1;
nop();
break;
default:
break;
}
}
/*---------------------------------------------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
SetLine(i);
for(j=0;j<64;j++)
{
WriteByte(0x00);
}
}
}
/*--------------------------------------------------------------------------------------------------*/
//顯示8*8點(diǎn)陣
//lin:行(0-7), column: 列(0-127)
//address : 字模區(qū)首地址
void Show8x8(uchar lin,uchar column,uchar *address)
{
uchar i;
// if(column>128) {return;}
if(column<64)
{
SelectScreen(1); //如果列數(shù)<64則從第一屏上開(kāi)始寫
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++)
{
if(column+i<64)
{
WriteByte(*(address+i));
}
else
{
SelectScreen(2);
SetLine(lin);
SetColumn(column-64+i);
WriteByte(*(address+i));
}
}
}
else
{
SelectScreen(2); //否則從第二屏上開(kāi)始寫
column-=64; //防止越界
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++)
{
if(column+i<64)
{
WriteByte(*(address+i));
}
else
{
SelectScreen(1);
SetLine(lin);
SetColumn(column-64+i);
WriteByte(*(address+i));
}
}
}
}
//顯示數(shù)字8*16
void ShowNumber(uchar lin,uchar column,uchar num)
{
uchar *address;
address=&Numcode[num][0];
Show8x8(lin,column,address);
Show8x8(lin+1,column,address+8);
}
//顯示漢字16*16
void ShowChina(uchar lin,uchar column,uchar num)
{
uchar *address;
// if(lin>7 || column>127){return;}
address = &HZcode[num][0];
Show8x8(lin,column,address);
Show8x8(lin,column+8,address+8);
Show8x8(lin+1,column,address+16);
Show8x8(lin+1,column+8,address+24);
}
void InitLCD(void) //初始化LCD
{
uchar i=2000; //延時(shí)
while(i--);
SetOnOff(1); //開(kāi)顯示
ClearScreen(1);//清屏
ClearScreen(2);
SetStartLine(0); //開(kāi)始行:0
}
void r_show8x8(uchar lin,uchar column,uchar *address)
{
uchar i,r_data;
if(column<64)
{
SelectScreen(1); //如果列數(shù)<64則從第一屏上開(kāi)始寫
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++)
{
if(column+i<64)
{
r_data = ~(*(address+i));
WriteByte(r_data);
}
else
{
SelectScreen(2);
SetLine(lin);
SetColumn(column-64+i);
r_data = ~(*(address+i));
WriteByte(r_data);
}
}
}
else
{
SelectScreen(2); //否則從第二屏上開(kāi)始寫
column-=64; //防止越界
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++)
{
if(column+i<64)
{
r_data = ~(*(address+i));
WriteByte(r_data);
}
else
{
SelectScreen(1);
SetLine(lin);
SetColumn(column-64+i);
r_data = ~(*(address+i));
WriteByte(r_data);
}
}
}
}
void r_ShowNumber(uchar lin,uchar column,uchar num)
{
uchar *address;
address=&Numcode[num][0];
r_show8x8(lin,column,address);
r_show8x8(lin+1,column,address+8);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -