📄 12864.c
字号:
#include<head.h>
//======================
sbit RS =P1^0;
sbit RW =P1^1;
sbit E =P1^2;
sbit PSB=P1^3;
//======================
#define CS RS //片选信号
#define SID RW //串行数据口
#define CLK E //串行同步时钟
//================================================
//串行数据传送第一字节--串口控制
//================================================
#define busy 0x80
#define _rdata_ 0xfe
#define _rcomm_ 0xfc
#define _wdata_ 0xfa
#define _wcomm_ 0xf8
void delay(uint a)//不能忘了这些延时啊
{uint i,j;
for(i=0;i<a;i++)
for(j=0;j<3500;j++);
}
void delay400ms(void)
{
uint u=555;
while(u--);
}
//=========================
void udelay(uint i)
{
while(i--);
}
//================================================
//函数:void sendbyte(uchar senddata);
//功能描述:发送一字节
//================================================
void sendbyte(uchar senddata)
{uint i;
CLK=0;
for(i=0;i<8;i++)
{
if(senddata&0x80)SID=1;
else SID=0;
CLK=1;
senddata<<=1;
CLK=0;
}
}
//================================================
//函数:uchar readbyte(uchar readtype);
//功能描述:读取一字节
//================================================
uchar readbyte(uchar readtype)
{
uchar temph=0,templ=0,temp=0;
uint i;
sendbyte(readtype);
CLK=0;
//SID=1;
for(i=0;i<8;i++)
{//udelay(144);
CLK=1;
//udelay(144);
if(SID)temph=temph|1;
temph<<=1;
CLK=0;
}
for(i=0;i<8;i++)
{//udelay(144);
CLK=1;
//udelay(144);
if(SID)templ=templ|1;
templ<<=1;
CLK=0;
}
temp=(temph&0xf0)|((temph&0xf0)>>4);
return(temp);
}
//================================================
//函数:busywait();
//功能描述:判断忙,直到不忙才往下运行
//================================================
void busywait(void)
{uchar bf;
loop:
//udelay(100);
bf=readbyte(_rcomm_);
if(bf&busy)goto loop;
}
//================================================
//函数:wr_comm_lcd(uchar command);
//功能描述:写入一个命令
//注意:命令只占一个字节
//================================================
void wr_comm_lcd(uchar command)
{CS=1;
busywait();
sendbyte(_wcomm_);
sendbyte(command&0xf0);
sendbyte((command&0x0f)<<4);
//CS=0;
}
//================================================
//函数:wr_data_lcd(uchar wdata);
//功能描述:写入一个字节的数据
//注意:显示一个中文字符需要16位
//================================================
void wr_data_lcd(uchar wrdata)
{CS=1;
busywait();
sendbyte(_wdata_);
sendbyte(wrdata&0xf0);
sendbyte((wrdata&0x0f)<<4);
//CS=0;
}
//================================================
//函数:reset_lcd();
//功能描述:液晶屏幕初始化
//================================================
void reset_lcd(void)
{
PSB=0;//使用串行口
CLK=0;
wr_comm_lcd(0x30);//功能设置 8位数据,基本指令
delay400ms();
wr_comm_lcd(0x0c);//显示状态 ON,游标OFF,反白OFF
delay400ms();
wr_comm_lcd(0x01);//清除显示
delay400ms();
wr_comm_lcd(0x02);//地址归位
}
//================================================
//函数:clear_disppanel();
//功能描述:清液晶屏幕
//================================================
void clear_disppanel(void)
{
wr_comm_lcd(0x01);//清除显示
}
//================================================
//函数:locate_xy(uint x,uint y);
//功能描述:定光标位置
//================================================
void locate_xy(uint x,uint y)
{
uchar addr;
switch(y)
{
case 0:addr=0x80+x;break;
case 1:addr=0x90+x;break;
case 2:addr=0x88+x;break;
case 3:addr=0x98+x;break;
default:break;
}
wr_comm_lcd(addr);
}
//=============================================================
//函数:display_oneword(uint x,uint y,uchar word1,uchar word2);
//功能描述:显示一个中文字,进行两次写一字节的操作
//=============================================================
void display_oneword(uint x,uint y,uchar word1,uchar word2)
{
locate_xy(x,y);
wr_data_lcd(word1);
wr_data_lcd(word2);
}
//=============================================================
//函数:display_strword(uint x,uint y,uchar *pstr);
//功能描述:显示整个中文字符数组里的文字
//=============================================================
void display_strword(uint x,uint y,uchar *pstr)
{uint i,t=0;
busywait();
while(pstr[t]!='\0')t++;
for(i=0;i<(t-1);i++)
{display_oneword(x++,y,pstr[i++],pstr[i]);
delay(10);//显示一个字停0.5s
if(x==8)
{
y+=1;
x=0;
if(y==4)y=0;
}
}
}
//=============================================================
//函数:disponechar(uint x,uint y,uchar *pstr,uint i);
//功能描述:在指定的位置显示数组里指定的字
//参数接口:x,y为定位坐标,pstr为操作数组,i为数组的第i个文字
//=============================================================
void disponechar(uint x,uint y,uchar *pstr,uint i)
{
uint k;
k=2*i;
display_oneword(x,y,pstr[k],pstr[k+1]);
}
//=============================================================
//函数:drawpic(uint *pdraw);
//功能描述:画图形
//参数接口:pdraw,是存放图形数据的表
//=============================================================
void drawpic(uint *pdraw)
{uint idata x,y,k=0;
uchar yaddr=0x80;
wr_comm_lcd(0x30);//功能设置---8BIT控制界面,绘图显示OFF
wr_comm_lcd(0x34);//功能设置---8BIT控制界面,扩充指令集
for(y=0;y<32;y++)
{
wr_comm_lcd(yaddr++);//设置绘图区的Y地址坐标
wr_comm_lcd(0x80);//设置绘图区的X地址坐标
for(x=0;x<8;x++)
{
wr_data_lcd(((pdraw[k])&0xff00)>>8);
wr_data_lcd((pdraw[k++])&0xff);
}
}
yaddr=0x80;
for(y=0;y<32;y++)
{
wr_comm_lcd(yaddr++);//设置绘图区的Y地址坐标
wr_comm_lcd(0x88);//设置绘图区的X地址坐标
for(x=0;x<8;x++)
{
wr_data_lcd(((pdraw[k])&0xff00)>>8);
wr_data_lcd((pdraw[k++])&0xff);
}
}
wr_comm_lcd(0x32);//功能设置---8BIT控制界面,绘图显示ON
wr_comm_lcd(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}
//=============================================================
//函数:draw_byte(int x,int y);
//功能描述:画一条一双字节的线
//=============================================================
void draw_word(int x,int y,int draw_data)
{
wr_comm_lcd(0x30);//功能设置---8BIT控制界面,绘图显示OFF
wr_comm_lcd(0x34);//功能设置---8BIT控制界面,扩充指令集
wr_comm_lcd(y);//设置绘图区的Y地址坐标
wr_comm_lcd(x);//设置绘图区的X地址坐标
wr_data_lcd((draw_data&0xff00)>>8);//线条数据
wr_data_lcd(draw_data&0xff);//线条数据
wr_comm_lcd(0x32);//功能设置---8BIT控制界面,绘图显示ON
wr_comm_lcd(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}
//=============================================================
//函数:clear_drawpanel()
//功能描述:清整个画屏
//=============================================================
void clear_drawpanel()
{int idata x,y;
uchar yadrr=0x80;
wr_comm_lcd(0x30);//功能设置---8BIT控制界面,绘图显示OFF
wr_comm_lcd(0x34);//功能设置---8BIT控制界面,扩充指令集
for(y=0;y<32;y++)
{
wr_comm_lcd(yadrr++);//设置绘图区的Y地址坐标
wr_comm_lcd(0x80);//设置绘图区的Y地址坐标
for(x=0;x<16;x++)
{
wr_data_lcd(0x00);//线条数据
}
}
yadrr=0x80;
for(y=0;y<32;y++)
{
wr_comm_lcd(yadrr++);//设置绘图区的Y地址坐标
wr_comm_lcd(0x88);//设置绘图区的x地址坐标
for(x=0;x<16;x++)
{
wr_data_lcd(0x00);//线条数据
}
}
wr_comm_lcd(0x32);//功能设置---8BIT控制界面,绘图显示ON
wr_comm_lcd(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}
//=============================================================
//函数:int readback_word(int x,int y)
//功能描述:readback a word draw data
//=============================================================
int readback_word(uchar x,uchar y)
{int readdata;
uchar H,L;
wr_comm_lcd(0x32);//功能设置---8BIT控制界面,绘图显示ON
wr_comm_lcd(0x36);//功能设置---8BIT控制界面,扩充指令集
wr_comm_lcd(y);//设置绘图区的Y地址坐标
wr_comm_lcd(x);//设置绘图区的x地址坐标
H=readbyte(_rdata_);
L=readbyte(_rdata_);
readdata=H;
readdata<<=8;
readdata|=L;
return(readdata);
}
//=============================================================
//函数:the end;
//功能描述:ok
//=============================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -