液晶带字库12864显示
时间:10-02
整理:3721RD
点击:
小弟用stc12c5a62s2调试一个带字库的12864显示屏,结果调了一天了,老师过来帮忙了也还是显示不了(蓝屏),肯定大家帮助!在线等!
#include <stdio.h>
#include <math.h>
#include<STC12C5A.H>
#include <string.h>
sbit RS=P1^2; //注意:一定要看12864液晶模块的资料,来确定怎样操作
sbit WRD=P1^3;
sbit E=P1^4;
sbit PSB=P1^5;
sbit RES=P1^6;
void TransferData(char data1,bit DI);
void delayms(unsigned int n);
void delay(unsigned int m);
void lcd_mesg(unsigned char code *addr1);
//下面来定义要显示的汉字,8*4
unsigned char code IC_DAT[]={
"陈 "
" "
" "
" "
};
unsigned char code IC_DAT2[]={
"爱一个人难却还爱"
"交结朋友可路更宽"
"诚实守信加油努力"
"成功做人成功做事"
};
void initinal(void) //初始化,12864有要求的要写上
{
delay(40);
PSB=1; //并口工作模式
delay(1);
RES=0; //复位
delay(1);
RES=1; //复位置高
delay(10);
TransferData(0x30,0); //
delay(100);
TransferData(0x30,0); //
delay(37);
TransferData(0x08,0); //
delay(100);
TransferData(0x10,0); //
delay(100);
TransferData(0x0C,0); //开启显示
delay(100);
TransferData(0x01,0); //
delay(100);
TransferData(0x06,0); //
delay(100);
}
void main(void) //分两屏来不断显示上面定义的IC_DAT和IC_DAT2汉字
{
P0M1=0x00;
P0M0=0xff;
P1M1=0x00;
P1M0=0xff;
P2M1=0x00;
P2M0=0xff;
while(1)
{
nitinal();//调用LCD字库初始化程序
delay(100);
lcd_mesg(IC_DAT);
delayms(240); //延时程序必要的,长与短,自己调节
delayms(240);
initinal();
delay(100);
lcd_mesg(IC_DAT2);
delayms(240);
delayms(240);
}
}
void lcd_mesg(unsigned char code *addr1) //显示汉字函数,8*4=32
{
unsigned char i;
TransferData(0x80,0);
delay(100);
for(i=0;i<32;i++)
{
TransferData(*addr1,1);
addr1++;
}
TransferData(0x90,0);
delay(100);
for(i=32;i<64;i++)
{
TransferData(*addr1,1);
addr1++;
}
}
void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
{
WRD=0;
RS=DI;
delay(1);
P2=data1;
E=1;
delay(1);
E=0;
}
void delayms(unsigned int n) //延时子程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
void delay(unsigned int m)
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
#include <stdio.h>
#include <math.h>
#include<STC12C5A.H>
#include <string.h>
sbit RS=P1^2; //注意:一定要看12864液晶模块的资料,来确定怎样操作
sbit WRD=P1^3;
sbit E=P1^4;
sbit PSB=P1^5;
sbit RES=P1^6;
void TransferData(char data1,bit DI);
void delayms(unsigned int n);
void delay(unsigned int m);
void lcd_mesg(unsigned char code *addr1);
//下面来定义要显示的汉字,8*4
unsigned char code IC_DAT[]={
"陈 "
" "
" "
" "
};
unsigned char code IC_DAT2[]={
"爱一个人难却还爱"
"交结朋友可路更宽"
"诚实守信加油努力"
"成功做人成功做事"
};
void initinal(void) //初始化,12864有要求的要写上
{
delay(40);
PSB=1; //并口工作模式
delay(1);
RES=0; //复位
delay(1);
RES=1; //复位置高
delay(10);
TransferData(0x30,0); //
delay(100);
TransferData(0x30,0); //
delay(37);
TransferData(0x08,0); //
delay(100);
TransferData(0x10,0); //
delay(100);
TransferData(0x0C,0); //开启显示
delay(100);
TransferData(0x01,0); //
delay(100);
TransferData(0x06,0); //
delay(100);
}
void main(void) //分两屏来不断显示上面定义的IC_DAT和IC_DAT2汉字
{
P0M1=0x00;
P0M0=0xff;
P1M1=0x00;
P1M0=0xff;
P2M1=0x00;
P2M0=0xff;
while(1)
{
nitinal();//调用LCD字库初始化程序
delay(100);
lcd_mesg(IC_DAT);
delayms(240); //延时程序必要的,长与短,自己调节
delayms(240);
initinal();
delay(100);
lcd_mesg(IC_DAT2);
delayms(240);
delayms(240);
}
}
void lcd_mesg(unsigned char code *addr1) //显示汉字函数,8*4=32
{
unsigned char i;
TransferData(0x80,0);
delay(100);
for(i=0;i<32;i++)
{
TransferData(*addr1,1);
addr1++;
}
TransferData(0x90,0);
delay(100);
for(i=32;i<64;i++)
{
TransferData(*addr1,1);
addr1++;
}
}
void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
{
WRD=0;
RS=DI;
delay(1);
P2=data1;
E=1;
delay(1);
E=0;
}
void delayms(unsigned int n) //延时子程序
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<2000;j++);
}
void delay(unsigned int m)
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<10;j++);
}
把图贴上来,你把LCD的背光调一下呢
到底是你的硬件问题还是软件问题,需要逐个排查
谢谢分享
打酱油
到底是你的硬件问题还是软件问题,需要逐个排查
是单片机的啊,好东西~~~
是否在接口断接了上拉电阻?
