?? 12864.h
字號(hào):
#ifndef _12864_H__
#define _12864_H__
#include <at89x51.h>
#define uchar unsigned char
#define uint unsigned int
sbit E=P2^0;
sbit RW=P2^1;
sbit RS=P2^2;
sbit CS2=P2^3;
sbit CS1=P2^4;
void delay1ms(uint k)
{
k=k*125;
while(k--);
}
void chekbusy12864(void)
{
uchar dat;
EX0=0;
RS=0; //指令模式
RW=1; //讀數(shù)據(jù)
do{
P0=0x00;
E=1;
dat=P0&0x80;
E=0;
}while(dat!=0x00);
EX0=1;
}
/****選屏****/
void choose12864(uchar i)//i是要寫(xiě)的屏.0是左屏,1是右屏,2是雙屏
{
switch (i)
{
case 0: CS1=0;CS2=1;break;
case 1: CS1=1;CS2=0;break;
case 2: CS1=0;CS2=0;break;
default: break;
}
}
/******寫(xiě)命令*****/
void cmd_w12864(uchar cmd) //寫(xiě)命令
{
chekbusy12864();
EX0=0;
RS=0; //指令模式
RW=0; //寫(xiě)模式
E=1;
P0=cmd;
E=0;
EX0=1;
}
/****寫(xiě)數(shù)據(jù)******/
void dat_w12864(uchar dat)
{
chekbusy12864();
EX0=0;
RS=1;
RW=0;
E=1;
P0=dat;
E=0;
EX0=1;
}
/*****清屏*****/
void clear12864(void)
{
uchar page,row;
for(page=0xb8;page<0xc0;page++)
{
cmd_w12864(page);
cmd_w12864(0x40);
for(row=0;row<64;row++)
{
dat_w12864(0x00);
}
}
}
/***初始化****/
void init12864(void)
{
chekbusy12864();
cmd_w12864(0xc0);
cmd_w12864(0x3f);
}
/**8X16字符的顯示**/
void play8(uchar ch,uchar row,uchar page,uchar *adr)
{
uchar i;
choose12864(ch);
page=page<<1;
row=row<<3;
cmd_w12864(row+0x40);
cmd_w12864(page+0xb8);
for(i=0;i<8;i++)
{
dat_w12864(*(adr+i));
}
cmd_w12864(row+0x40);
cmd_w12864(page+0xb9);
for(i=8;i<16;i++)
{
dat_w12864(*(adr+i));
}
}
/**16X16顯示**/
void play16(uchar ch,uchar row,uchar page,uchar *adr)
{
uchar i;
choose12864(ch);
page=page<<1;
row=row<<3;
cmd_w12864(row+0x40);
cmd_w12864(page+0xb8);
for(i=0;i<16;i++)
{
dat_w12864(*(adr+i));
}
cmd_w12864(row+0x40);
cmd_w12864(page+0xb9);
for(i=16;i<32;i++)
{
dat_w12864(*(adr+i));
}
}
/*****讀數(shù)據(jù)*****/
uchar dat_r12864(uchar page,uchar arrange) //page頁(yè)地址.arrange列地址)
{
uchar dat;
chekbusy12864();
cmd_w12864(page+0xb8);
cmd_w12864(arrange+0x40);
EX0=0;
P0=0xff;
RW=1;
RS=1;
E=1;
E=0;
E=1;
dat=P0;
E=0;
return(dat);
EX0=1;
}
/**豎線**/
void vertical(uchar y1,uchar y2,uchar x)//y0表示起點(diǎn),y1表示終點(diǎn)
{
uchar i,sum=0;
if(x>63)
{
choose12864(1);
x=x-64;
}
else
{
choose12864(0);
}
if((y1/8)!=(y2/8))
{
for(i=0;i<(8-y1%8);i++)
{
sum=sum|((2<<((y1%8)+i)));
}
cmd_w12864(x+0x40);
cmd_w12864(y1/8+0xb8);
dat_w12864(sum);
sum=0;
for(i=0;i<(y2/8-y1/8-1);i++)
{
cmd_w12864(x+0x40);
cmd_w12864((y1/8)+0xb9+i);
dat_w12864(0xff);
}
for(i=0;i<=(y2%8);i++)
{
sum=sum|(2<<i);
}
cmd_w12864(x+0x40);
cmd_w12864(y2/8+0xb8);
dat_w12864(sum|1);
sum=0;
}
else
{
for(i=0;i<=y2-y1;i++)
{
sum=sum|(2<<(i+(y1%8)));
}
cmd_w12864(0x40|x);
cmd_w12864(0xb8|(y1/8));
dat_w12864(sum);
}
}
/**點(diǎn)的顯示**/
void dot(uchar x,uchar y)//所有的圖形都在右屏上。
{
uchar dat;
if(x>63)
{
choose12864(1);
x=x-64;
}
else
{
choose12864(0);
}
dat=dat_r12864(y/8,x);
cmd_w12864(0x40|x);
cmd_w12864(0xb8|y/8);
dat_w12864((1<<(y%8))|dat);
}
/**清除一個(gè)點(diǎn)**/
void cleardot(uchar x,uchar y)
{
uchar dat,j;
if(x>63)
{
choose12864(1);
x=x-64;
}
else
{
choose12864(0);
}
dat=dat_r12864(y/8,x);
cmd_w12864(0x40|x);
cmd_w12864(0xb8|y/8);
j=~(1<<y%8);
dat_w12864(dat&j);
}
/**4X4個(gè)點(diǎn)合為一個(gè)**/
void change(uchar *x,uchar *y) //x<24 y<15
{
uchar i,m,n;
if(*x<24&&*y<15)
{
m=(*x)<<2;
n=((*y)<<2)+2;
for(i=0;i<4;i++)
{
dot(31+m,n+i);
dot(34+m,n+i);
}
dot(32+m,n);
dot(32+m,n+1);
dot(32+m,n+3);
dot(33+m,n);
dot(33+m,n+2);
dot(33+m,n+3);
}
}
void clear(uchar *x,uchar *y)
{
uchar i,m,n;
m=((*x)<<2)+31;
n=((*y)<<2)+2;
for(i=0;i<4;i++)
{
cleardot(m,n+i);
cleardot(m+1,n+i);
cleardot(m+2,n+i);
cleardot(m+3,n+i);
}
}
#endif
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -