📄 ms12864.h
字号:
//#include <at89x52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define nop() _nop_()
#define DATA_PORT P1
#define DATA_INPUT P0
void WriteCom(uchar CMD);
void WriteDat(uchar DAT);
void Delay(uint ms);
uchar CheckBusy(void);
void Draw_Pic(uchar y);
void Pic_Off(uchar y);
void Clear_Pic();
void Picture_Set_XY(uchar x, uchar y);
void Int_Set_XY(uchar x, uchar y, uint dat);
void Char_Set_XY(uchar x, uchar y, uchar *p);
void Lcd_Init(void);
void Set_White(uchar x,uchar y,uchar end_x,uchar clear);
uint Set_Parameter();
sbit RS = P3^2;
sbit RW = P3^3;
sbit EN = P3^4;
sbit Up = P3^5;
sbit Enter = P3^6;
sbit Down = P3^7;
/*************************************************/
void Lcd_Init(void)
{
uchar cmd;
cmd=0x30; //功能设置 8位数据,基本指令
WriteCom(cmd); //写指令
cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
WriteCom(cmd); //写指令
cmd=0x01; //清除显示
WriteCom(cmd); //写指令
cmd=0x02; //地址归位
WriteCom(cmd); //写指令
cmd=0x80; //设置DDRAM地址
WriteCom(cmd); //写指令
Delay(100); //延时
}
/*************************************************/
void Delay(uint ms)
{
uchar j;
for(; ms>0; ms--)
for(j=100; j>0; j--)
{
nop();
nop();
}
}
/*************************************************/
void WriteCom(uchar CMD)
{
while(CheckBusy());
RS = 0;
RW = 0;
DATA_PORT = CMD;
EN = 1;
nop();
nop();
EN = 0;
}
/*************************************************/
void WriteDat(uchar DAT)
{
while(CheckBusy());
RS = 1;
RW = 0;
DATA_PORT = DAT;
EN = 1;
nop();
nop();
EN = 0;
}
/*************************************************/
uchar CheckBusy(void)
{
uchar temp;
DATA_PORT = 0XFF;
RS = 0;
RW = 1;
EN = 1;
nop();
nop();
temp = DATA_PORT;
nop();
nop();
EN = 0;
temp &= 0x80;
return(temp);
}
/*************************************************/
void Char_Set_XY(uchar x, uchar y, uchar *p)
{
if(y == 0)
{
WriteCom((0x80+x));
}
if(y == 1)
{
WriteCom((0x90+x));
}
if(y == 2)
{
WriteCom((0x88+x));
}
if(y == 3)
{
WriteCom((0x98+x));
}
while(*p != 0)
{
WriteDat(*p++);
}
}
/************************************************/
void Draw_Pic(uchar y)
{
uchar i, j, x;
if(y >=2)
{
x = 8;
y = (y-2)*16;
}
else
{
x = 0;
y = y*16;
}
for(i=0; i<16; i++)
{
lcd_cmd_w(0x34);
lcd_cmd_w(0x36);
lcd_cmd_w(0x80+y);
lcd_cmd_w(0x80+x);
y++;
for(j=0; j<16; j++)
{
lcd_dat_w(0xff);
}
}
lcd_cmd_w(0x30);
delay(10);
}
/***********************************************/
void Pic_Off(uchar y)
{
uchar i, j, x;
if(y >=2)
{
x = 8;
y = (y-2)*16;
}
else
{
x = 0;
y = y*16;
}
for(i=0; i<16; i++)
{
lcd_cmd_w(0x36);
lcd_cmd_w(0x80+y);
lcd_cmd_w(0x80+x);
y++;
for(j=0; j<16; j++)
{
lcd_cmd_w(0x00);
}
}
lcd_cmd_w(0x30);
Delay(10);
}
/***********************************************/
void Clear_Pic()
{
uchar i, j;
for(i=0; i<32; i++)
{
lcd_cmd_w(0x36);
lcd_cmd_w(0x80+i);
lcd_cmd_w(0x80);
for(j=0; j<32; j++)
{
lcd_dat_w(0x00);
}
}
lcd_cmd_w(0x30);
delay(10);
}
/**************************************************/
void Int_Set_XY(uchar x, uchar y, uint dat)
{
uchar seq[10];
uchar i;
uint flag = 0;
if(y == 0)
{
WriteCom((0x80+x));
}
if(y == 1)
{
WriteCom((0x90+x));
}
if(y == 2)
{
WriteCom((0x88+x));
}
if(y == 3)
{
WriteCom((0x98+x));
}
for(i=10; i>=1; i--)
{
seq[i-1]=(uchar)(dat-10*(dat/10));
dat=dat/10;
}
for(i=0; i<10; i++)
{
if((seq[i] != 0)||(flag != 0))
flag++;
if(flag)
WriteDat(seq[i]+0x30);
}
}
/*******************************************************/
void LCDshow(uchar x, uchar y, float f, int num)
{
uchar seq[10], i, j;
uint flag = 0;
ulong dat;
if(y == 0)
{
WriteCom((0x80+x));
}
if(y == 1)
{
WriteCom((0x90+x));
}
if(y == 2)
{
WriteCom((0x88+x));
}
if(y == 3)
{
WriteCom((0x98+x));
}
for(i = num; i>0; i--)
f = f * 10;
dat = (ulong)f;
WriteCom(0x91);
for(i=10; i>=1; i--)
{
seq[i-1]=(uchar)(dat-10*(dat/10));
dat=dat/10;
}
j = 10 - num;
for(i=0; i<10; i++)
{
if(i == j)
WriteDat(0x2e);
if((seq[i] != 0)||(flag != 0))
flag++;
if(flag)
WriteDat(seq[i]+0x30);
}
}
/*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -