单片机LCD显示问题
答案:2 悬赏:20 手机版
解决时间 2021-11-23 01:15
- 提问者网友:姑娘长的好罪过
- 2021-11-22 01:56
单片机LCD显示问题
最佳答案
- 五星知识达人网友:不甚了了
- 2021-11-22 03:11
#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);
}
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出来调用就好。网上可以百度。追问请问你用的是什么头文件啊~为什么我自己编译不能通过~
#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);
}
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出来调用就好。网上可以百度。追问请问你用的是什么头文件啊~为什么我自己编译不能通过~
全部回答
- 1楼网友:封刀令
- 2021-11-22 03:49
什么样的LCD ? 1602?12864?如果12864又是哪个芯片的追问1602~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯