什么样的LCD ? 1602?12864?如果12864又是哪个芯片的
#include"STC12C5A60S2.H"
#include"DISP12864.H"
#include
void Delayms(unsigned char ms) //@11.0592MHz
{
unsigned char i,j;
while(ms--)
{
i = 11;
j = 190;
do
{
while (--j);
}
while (--i);
}
}
void Delayus(unsigned char us) //@11.0592MHz
{
unsigned char i;
while(us--)
{
_nop_();
_nop_();
i = 24;
while(--i);
}
}
bit busy()
{
bit mang;
RS=0;
RW=1;
EN=1;
Delayus(2);
mang=(bit)(P0&0x80);//读取P0最高位的值
EN=0;
return mang;//返回读到的忙状态
}
void Write_LcdCom(unsigned char com) //写命令
{
while(busy());//查忙
RS=0;
RW=0;
EN=0;
P0=com;//将指令赋给P0
Delayus(1);//摸拟产生一个脉冲
EN=1;
Delayus(1);
EN=0;
}
void Write_LcdData(unsigned char dat)
{
while(busy());//查忙
RS=1;
RW=0;
EN=0;
P0=dat;//将数据赋给P0
Delayus(1);//摸拟产生一个脉冲
EN=1;
Delayus(1);
EN=0;
}
void Init_Lcd()
{
PSB=1;//并行方式
RST=0;//复位
Delayms(1);
RST=1;
Write_LcdCom(0X34);//扩充指令操作
Delayms(1);
Write_LcdCom(0X30);//基本指令操作
Delayms(1);
Write_LcdCom(0x0C);//开显示,关光标
Delayms(1);
Write_LcdCom(0X01);//清屏
Delayms(10);
}
/****************************************************
函数功能:清除GCROM的内容,如果不清除会出现花屏现象
清除方法:向GCROM中写入0x00来清除内
*****************************************************/
void Clear_LcdDisp()
{
Write_LcdCom(0x01);//清屏
}
void Clear_Gcrom()
{
unsigned char i,j,k;
lcd_x=0x80;
lcd_y=0x80;
Write_LcdCom(0x34);
for(i=0;i<2;i++)
{
for(j=0;j<32;j++)
{
Write_LcdCom(lcd_y+j);
Write_LcdCom(lcd_x);
for(k=0;k<16;k++)
{
Write_LcdData(0x00);
}
}
lcd_x=0x88;
}
Write_LcdCom(0x36);
Write_LcdCom(0x30);
}
void Write_LcdImage(unsigned char *p)//显示一张图片
{
unsigned char i,j,k;
lcd_x=0x80;
lcd_y=0x80;
Write_LcdCom(0x34);
for(i=0;i<2;i++) //分为上下两屏
{
for(j=0;j<32;j++)
{
Write_LcdCom(lcd_y+j);
Write_LcdCom(lcd_x);
for(k=0;k<16;k++) //写入显示数据
{
Write_LcdData(*p++);
}
}
lcd_x=0x88;
}
Write_LcdCom(0x36);
Write_LcdCom(0x30);
}
void Write_LcdRowString(unsigned char row,unsigned char *p)//显示一行字符 入口参数:行数,字符串数组
{
unsigned char i;
switch (row)
{
case 1:Write_LcdCom(0x80);break; //设置第一行地址
case 2:Write_LcdCom(0x90);break; //设置第二行地址
case 3:Write_LcdCom(0x88);break; //设置第三行地址
case 4:Write_LcdCom(0x98);break; //设置第四行地址
//default: break;
}
for(i=0;i<16;i++)//显示一行内容
{
Write_LcdData(*p++);
Delayms(10);
}
}
如果你的lcd是12864的话,可以调用显示图片的那个函数。然后用一个画图软件在128x64像素内画一个圆圈,再用取模软件取数组,copy出来调用就好。网上可以百度。