📄 glcd.h
字号:
/*GRAPHIC LCD 128*64 Controller with MCS-51 microcontroller ( AT89C52 ) */
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// do not change these value //
#define DATAPORT PORTB
#define CTRLPORT PORTD
#define DISPLAY_ON 0x3f
#define DISPLAY_OFF 0x3e
#define DISPLAY_STARTLINE 0xc0
#define DISPLAY_PAGE_SET 0xb8
#define DISPLAY_COLUMN_SET 0x40
#define DATAREG 1
#define CONTROL 0
#define LCD_ENABLE 1
// Zero Bit
#define LCD_CS1 0
// 1'st Bit
#define LCD_CS2 6
// 2'nd Bit
#define LCD_inst 8
#define LCD_R PORTC.0
#include "font\font2.h"
#include "include\string.h"
#pragma used+
typedef unsigned char byte;
void delay(unsigned char);
void OmaDelay(void);
void LCD_RST(void);
void output(unsigned char,unsigned char);
void SendLCDCommand(byte,byte);
void SendLCDData(unsigned char flash *,unsigned char);
void SendLCDData2(unsigned char);
void SetColumn(unsigned char);
void SetPage(unsigned char);
void SetStartLine(unsigned char);
void show(unsigned char flash *,unsigned char);
void LCDprintf2(unsigned char,unsigned char,unsigned char flash *);
void LCDprintf3(unsigned char,unsigned char,unsigned char *);
void sendlcddataram(unsigned char);
void putpixel(unsigned char, unsigned char);
void clrpixel(unsigned char, unsigned char);
void LCDprintf2Ram(unsigned char, unsigned char ,unsigned char *,...);
void line(unsigned char,unsigned char,unsigned char,unsigned char);
void Vline(unsigned char,unsigned char,unsigned char);
void Hline(unsigned char,unsigned char,unsigned char);
void circle(unsigned char,unsigned char,unsigned char);
void clear(void);
void on(void);
void off(void);
unsigned char CurrentColumn,DisplayData[8][128];
void delay(unsigned char j){
unsigned char i;
for(i=0;i<j;i++);
}
void OmaDelay(void){
delay(100);
}
void LCD_RST(void)
{
LCD_R=0;
delay_ms(1);
LCD_R=1;
}
unsigned char pow2(unsigned char a,unsigned char b){
unsigned char i=0,ret=1;
for(;i<b;i++) ret*=a;
return ret;
}
void sendlcddataram(unsigned char values){
byte c_s;
c_s = CurrentColumn>63?LCD_CS2:LCD_CS1;
output(CONTROL, c_s );
OmaDelay();
output(DATAREG,values);
OmaDelay();
output(CONTROL, LCD_ENABLE | c_s );
OmaDelay();
}
void putpixel(unsigned char x, unsigned char y){
SetPage((y/8));
SetColumn(x);
DisplayData[y/8][x]|=pow2(2,y%8);
sendlcddataram(DisplayData[y/8][x]);
}
void clrpixel(unsigned char x, unsigned char y){
SetPage((y/8));
SetColumn(x);
DisplayData[y/8][x]&=~pow2(2,y%8);
sendlcddataram(DisplayData[y/8][x]);
}
void output(unsigned char port, unsigned char value){
unsigned char st1=0;
unsigned char val1=0x80;
if(port) DATAPORT=value;
else{
if(value&1) value&=0XFE; else value|=1;
if(value&2) value&=0XFD; else value|=2;
if(value&8) value&=0XF7; else value|=8;
st1=value;
if(st1&1) val1|=0x08;else val1&=0xF7;
st1=value;
if(st1&2) val1|=0x40;else val1&=0xBF;
st1=value;
if(st1&4) val1|=0x04;else val1&=0xFB;
st1=value;
if(st1&8) val1|=0x20;else val1&=0xDF;
CTRLPORT=val1;
}
}
void SendLCDCommand(byte value, byte CS)
{
output(CONTROL, CS | LCD_inst);
OmaDelay();
output(DATAREG, value);
OmaDelay();
output(CONTROL, LCD_ENABLE | CS | LCD_inst);
OmaDelay();
OmaDelay();
}
void SendLCDData(unsigned char flash *values,unsigned char amount){
byte c_s;
unsigned char counter;
for (counter=0; counter < amount;counter++){
c_s = CurrentColumn>63?LCD_CS2:LCD_CS1;
output(CONTROL, c_s );
OmaDelay();
output(DATAREG, values[counter]);
OmaDelay();
output(CONTROL, LCD_ENABLE | c_s );
OmaDelay();
CurrentColumn++;
if (CurrentColumn > 127) return;
}
}
void SendLCDData2(unsigned char values){
byte c_s;
c_s = CurrentColumn>63?LCD_CS2:LCD_CS1;
output(CONTROL, c_s );
OmaDelay();
output(DATAREG, values);
OmaDelay();
output(CONTROL, LCD_ENABLE | c_s );
OmaDelay();
}
void SendLCDData3(unsigned char *values, unsigned char amount){
byte c_s;
unsigned char counter;
for (counter=0; counter < amount;counter++){
c_s = CurrentColumn>63?LCD_CS2:LCD_CS1;
output(CONTROL, c_s );
OmaDelay();
output(DATAREG, values[counter]);
OmaDelay();
output(CONTROL, LCD_ENABLE | c_s );
OmaDelay();
CurrentColumn++;
if (CurrentColumn > 127) return;
}
}
void SetColumn(unsigned char y){
CurrentColumn = y;
if (y < 64){
SendLCDCommand(DISPLAY_COLUMN_SET | (y&63), LCD_CS1);
SendLCDCommand(DISPLAY_COLUMN_SET | 0, LCD_CS2);
}
else{
SendLCDCommand(DISPLAY_COLUMN_SET | 63, LCD_CS1);
SendLCDCommand(DISPLAY_COLUMN_SET | ((y-64)&63), LCD_CS2);
}
}
void SetPage(unsigned char x){
SendLCDCommand(DISPLAY_PAGE_SET | x, LCD_CS1);
SendLCDCommand(DISPLAY_PAGE_SET | x, LCD_CS2);
}
void SetStartLine(unsigned char line){
SendLCDCommand(DISPLAY_STARTLINE | (line & 63), LCD_CS1);
SendLCDCommand(DISPLAY_STARTLINE | (line & 63), LCD_CS2);
}
void show(unsigned char flash *a,unsigned char delay1){
unsigned char i,j;
unsigned int temp;
SetColumn(0);
SetPage(0);
for (j=0;j<8;j++){
SetPage(j);
SetColumn(0);
for (i=0;i<128;i++){
temp=(unsigned int)128*j;
temp+=i;
SendLCDData(&a[temp],1);
delay(delay1);
}
}
}
void LCDprintf2(unsigned char y, unsigned char page, unsigned char flash *Str){
unsigned char n;
unsigned int yy;
SetColumn(y);
SetPage(page);
//SetColumn(y);
for (n = 0;Str[n]!=0;n++){
yy=(*(Str+n)-32);
yy*=5;
SendLCDData(&font5x7[yy],5);
SendLCDData(&value,1);
}
}
void LCDprintf3(unsigned char y, unsigned char page, unsigned char *Str){
unsigned char n;
unsigned int yy;
SetColumn(y);
SetPage(page);
SetColumn(y);
for (n = 0;Str[n]!=0;n++){
yy=(*(Str+n)-32);
yy*=5;
SendLCDData(&font5x7[yy],5);
SendLCDData(&value,1);
}
}
void LCDprintf4(unsigned char y, unsigned char page, unsigned int Str){
unsigned int yy;
SetColumn(y);
SetPage(page);
SetColumn(y);
yy=Str;
yy*=5;
SendLCDData(&font5x7[yy],5);
SendLCDData(&value,1);
}
void LCDprintf2Ram(unsigned char y, unsigned char page,unsigned char *Str,...){
unsigned char n;
unsigned int yy;
SetColumn(y);
SetPage(page);
SetColumn(y);
for (n = 0;Str[n]!=0;n++){
yy=(*(Str+n)-32);
yy*=5;
SendLCDData(&font5x7[yy],5);
SendLCDData(&value,1);
}
}
void clear(void){
unsigned char x,a;
//PAGE=0;
//COLUMN=0;
for (x=0;x < 8;x++){
SetPage(x);SetColumn(0);
for (a = 0 ;a < 128; a++)
SendLCDData(&value,1);
}
}
void clearLine(unsigned char l){
unsigned char a;
SetPage(l);
SetColumn(0);
for (a=0;a<128;a++)
SendLCDData(&value,1);
}
void clearfromLine(unsigned char L)
{
unsigned char i;
for(i=L;i<7;i++) clearLine(i);
}
void clearLCD(void)
{
unsigned char i;
for(i=0;i<8;i++) clearLine(i);
}
void on(void){
SendLCDCommand(DISPLAY_ON, LCD_CS1);
SendLCDCommand(DISPLAY_ON, LCD_CS2);
}
void off(void){
SendLCDCommand(DISPLAY_OFF, LCD_CS1);
SendLCDCommand(DISPLAY_OFF, LCD_CS2);
}
void line(unsigned char Xa,unsigned char Ya,unsigned char Xb,unsigned char Yb){
float X,Y,Xinc,Yinc,m;
unsigned char i,step;
if(Ya<Yb){
Y=(float)Ya;
X=(float)Xa;
}
else{
Y=(float)Yb;
X=(float)Xb;
}
m=(float)fabs((float)Xb-(float)Xa)/fabs((float)Yb-(float)Ya);
if(m<=1){
Yinc=1.0;
step=abs(Yb-Ya);
Xinc=m;
}
else{
Yinc=1.0/m;
step=abs(Xb-Xa);
Xinc=1.0;
}
if ((X<128)&&(Y<64)) putpixel((unsigned char)X,(unsigned char)Y);
for(i=0;i<step;i++){
Y+=Yinc;
if(((Yb>Ya)&&(Xb>Xa))||((Yb<Ya)&&(Xb<Xa)))
X+=Xinc;
else
X-=Xinc;
if ((X<128)&&(Y<64)) putpixel((unsigned char)X,(unsigned char)Y);
}
}
void Vline(unsigned char X,unsigned char Ya,unsigned char Yb)
{
unsigned char i;
if(Ya==Yb) putpixel(X,Ya);
else if(Ya<Yb) for(i=Ya;i<=Yb;i++) putpixel(X,i);
else if(Ya>Yb) for(i=Yb;i<=Ya;i++) putpixel(X,i);
}
void Hline(unsigned char Xa,unsigned char Xb,unsigned char Y)
{
unsigned char i;
if(Xa==Xb) putpixel(Xa,Y);
else if(Xa<Xb) for(i=Xa;i<=Xb;i++) putpixel(i,Y);
else if(Xa>Xb) for(i=Xb;i<=Xa;i++) putpixel(i,Y);
}
void circle(unsigned char Xo,unsigned char Yo,unsigned char r)
{
float Xi,Yi,X,Y;
unsigned int teta;
for(teta=0;teta<360;teta++)
{
Xi=(float)r*(float)cos(teta);
Yi=(float)r*(float)sin(teta);
X=(float)Xo+Xi;
Y=(float)Yo+Yi;
if((X>-1)&&(X<128)&&(Y>-1)&&(Y<64))
{
putpixel((unsigned char)X,(unsigned char)Y);
}
}
}
#pragma used-
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -