单片机采用串行方式对LCD12864的驱动

file&: lcd.h
description: lcd12864 驱动 ,采用串行方式,
author:kassey@126.comjuly,22th,2005
********************************************/
#i nclude
#i nclude
sbit sclk =p1^3 //e
sbit sid =p1^4; //rw
sbit rst =p1^2; // low active 可以不用,也就是说,只用两条线和lcd通信
#define row1 0x80
#define row2 0x90
#define row3 0x88
#define row4 0x98
unsigned char code ac_table[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置
};
/*****************************************
fucntion: delay10us(char x)
description: delay for 10 us
parameter: x
author:kassey@126.com
date: july,7th,2005
*****************************************/
void delay10us(uchar x)
{
uchar k;
for(k=0;k
}
/*****************************************
fucntion: delay1ms(char x)
description: delay for 10 us
parameter: x delay for 1ms
author:kassey@126.com
date: july,7th,2005
*****************************************/
void delay1ms(uchar x)
{
uchar k,j;
x=x《《1;
for(k=0;k for(j=0;j《255;j++)_nop_();
}
void sendbytelcd(uchar wlcddata)
{
uchar i;
for(i=0;i《8;i++)
{
if((wlcddata《else sid=0;
sclk=0;
sclk=1
}
}
spiwr(uchar wdata,uchar rs)
{
sendbytelcd(0xf8+(rs《《1));
sendbytelcd(wdata&0xf0);
sendbytelcd((wdata《《4)&0xf0);
}
void sendcmd(uchar cmd)
{
spiwr(cmd,0);
delay10us(90);//8155来模拟串行通信,所以,加上8155的延时,
}
void senddata(uchar data)
{
spiwr(data,1);
}
void lcdinit()
{
rst=0;
delay1ms(50);
rst=1;
sendcmd(0x30);//功能设置,一次送8位数据,基本指令集
sendcmd(0x0c);//0000,1100 整体显示,游标off,游标位置off
sendcmd(0x01);//0000,0001 清ddram
sendcmd(0x02);//0000,0010 ddram地址归位
sendcmd(0x80);//1000,0000 设定ddram 7位地址000,0000到地址计数器ac//
sendcmd(0x04);//点设定,显示字符/光标从左到右移位,ddram地址加 一//
sendcmd(0x0c);//显示设定,开显示,显示光标,当前显示位反白闪动
}
/*****************************
清文本区
*****************************/
void lcmcleartxt( void )
{
unsigned char i;
sendcmd(0x30); //8bitmcu,基本指令集合
sendcmd(0x80); //ac归起始位
for(i=0;i《64;i++)
senddata(0x20);
}
/*****************************
发送字符串
*****************************/
void putstr(unsigned char row,unsigned char col,unsigned char *puts)
{
sendcmd(0x30); //8bitmcu,基本指令集合
sendcmd(ac_table[8*row+col]); //起始位置
while(*puts != ‘\0’) //判断字符串是否显示完毕
{
if(col==8) //判断换行
{ //若不判断,则自动从第一行到第三行
col=0;
row++;
}
if(row==4) row=0; //一屏显示完,回到屏左上角
sendcmd(ac_table[8*row+col]);
senddata(*puts); //一个汉字要写两次
puts++;
senddata(*puts);
puts++;
col++;
}
}
/*****************************
绘图
*****************************/
void putbmp(unsigned char *puts)
{
unsigned int x=0;
unsigned char i,j;
sendcmd(0x34); //8bit扩充指令集,即使是36h也要写两次
sendcmd(0x36); //绘图on,基本指令集里面36h不能开绘图
for(i=0;i《32;i++) //12864实际为256x32
{
sendcmd(0x80|i); //行位置
sendcmd(0x80); //列位置
for(j=0;j《32;j++) //256/8=32 byte
{ //列位置每行自动增加
senddata(puts[x]);
x++;
}
}
}
void clearscreen()
{ uchar i,j,x,y;
lcdinit();
sendcmd(0x3e);// re=1 扩展指令选择 g=1 开图形显示
x=0x80;
y=0x80;
for(j=0;j《64;j++)
{
y=0x80;
sendcmd(x);
sendcmd(y);
for(i=0;i《32;i++)
{
senddata(0x00);
}
x=x+1;
}
}
void sendint(uint dd)
{
senddata(dd》》8);
senddata(dd);
}
/*****************************
打点 x=0:128; y=0:64;
*****************************/
void gra(uchar x,uchar y)
{
uchar xx,yy;
sendcmd(0x34);
sendcmd(0x36);
xx=x/16;
yy=63-y;
if(yy》=32){xx=xx+8;yy-=32;}
sendcmd(0x80+yy);
sendcmd(0x80+xx);
sendint(0x8000》》(x%16));
}
uchar code ibm[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xe0,0x00,0x07,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xf0,0x00,0xff,0xff,0xe0,0x00,0x0f,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xe0,0x00,0x0f,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xfc,0x00,0xff,0xff,0xf0,0x00,0x1f,0xff,0xfe,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xf8,0x00,0x3f,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xfc,0x00,0x7f,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xfc,0x00,0x7f,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xfc,0x00,0x7f,0xff,0xfe,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x03,0xff,0xfe,0x01,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x03,0xff,0xff,0x01,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x03,0xff,0xff,0x03,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0x80,0x03,0xff,0xff,0x83,0xff,0xff,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xff,0x00,0x03,0xff,0xff,0xcf,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfe,0x00,0x03,0xff,0xff,0xef,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfe,0x00,0x03,0xff,0xff,0xef,0xff,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfc,0x00,0x03,0xff,0xbf,0xff,0xfb,0xff,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfc,0x00,0x03,0xff,0x8f,0xff,0xf3,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfe,0x00,0x03,0xff,0x87,0xff,0xe3,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xfe,0x00,0x03,0xff,0x87,0xff,0xe3,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xff,0xff,0xff,0x00,0x03,0xff,0x87,0xff,0xc3,0xff,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0x80,0x01,0xff,0x83,0xff,0x83,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x01,0xff,0x81,0xff,0x03,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x01,0xff,0x81,0xff,0x03,0xff,0x00,
0x00,0xff,0xc0,0x00,0x0f,0xf8,0x00,0xff,0xc0,0x01,0xff,0x80,0xff,0x03,0xff,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xc0,0xff,0xff,0xc0,0x7e,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xc0,0xff,0xff,0xc0,0x7c,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0xc0,0xff,0xff,0xc0,0x3c,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xff,0x80,0xff,0xff,0xc0,0x3c,0x03,0xff,0xfe,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xc0,0x18,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xfe,0x00,0xff,0xff,0xc0,0x18,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xfc,0x00,0xff,0xff,0xc0,0x08,0x03,0xff,0xfe,
0x7f,0xff,0xff,0x87,0xff,0xff,0xff,0xf8,0x00,0xff,0xff,0xc0,0x00,0x03,0xff,0xfe,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void put(uchar *p)
{
uchar xx,yy
for(yy=0;yy《32;yy++)
for(xx=0;xx《8;xx++)
{
sendcmd(0x80+yy); //y 按位
sendcmd(0x80+xx);//x 按16位
senddata(*p);
p++;
senddata(*p);
p++;
}
for(yy=0;yy《32;yy++)
for(xx=8;xx《16;xx++)
{
sendcmd(0x80+yy); //y 按位
sendcmd(0x80+xx);//x 按16位
senddata(*p);
p++;
senddata(*p);
p++;
}
}
void clear()
{ uchar i,j;
lcdinittest();
sendcmd(0x34);
sendcmd(0x3e);// re=1 扩展指令选择 g=1 开图形显示
for(j=0;j《16;j++)
for(i=0;i《32;i++)
{
sendcmd(0x80+i);
sendcmd(0x80+j);
senddata(0x00);
senddata(0x00);
}
}
void main()
{
lcdinittest();
lcmclearbmp();
put(ibm);
while(1)
{
}
}

首款Android智能TD手机出炉
NVIDIA已确认RTX 3060没有公版卡
合资品牌电动汽车跟中国品牌电动汽车性能对比浅析
随着的消费升级 空调市场空间更加广阔
小米CC9 Pro撞色飘带保护壳首售,共有两款两种颜色设计
单片机采用串行方式对LCD12864的驱动
圣邦微电子双电池方案可以满足数码产品长待机要求
拍照式虫情测报有哪些作用
诺基亚将于2022年底在月球表面上部署首个LTE/4G网络
如何对车载电子产品进行电压瞬变测试
一文详解编码器格雷码
HarmonyOS2.0是全球第一个可实现大型软件全解耦的系统
labview如何让软件自动识别不同仪器所对应的串口号
安川变频器A1000故障OL1的处理办法 变频器常见故障汇总
容联.七陌助力酒连网 升级智能自助服务体验
三星电子速转向3D NAND 正在向半导体和系统公司靠拢
电容式触摸芯片在电容式触摸按键中的应用
亚马逊设计的智能背心加大智能仓储安全系数
Google表示将停止发布Chrome和Chrome OS操作系统的更新
长江连接器有限公司介绍