本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 何必执着 于 2015-3-5 16:43 编辑
各位大侠帮忙看看,为什么LCD无法显示,谢谢!
程序如下:
#include<AVR/io.h>
#define uchar unsigned char
#define LCMdata PORTC
lcd接线图
#define Data_DDR DDRC //数据口方向寄存器
#define Busy 0x80
#define E_set PORTG|=_BV(PG1) //液晶使能
#define E_clear PORTG&=~_BV(PG1)
#define RW_set PORTG|=_BV(PG0) //液晶读写
#define RW_clear PORTG&=~_BV(PG0)
#define RS_set PORTD|=_BV(PD7) //液晶数据
#define RS_clear PORTD&=~_BV(PD7) //液晶指令
#define RST_clear PORTF &= ~(1 << PF3) //RST置低
#define RST_set PORTF |= (1 << PF3) //RST置高
#define PSB_clear PORTE &= ~(1 << PE2) //PSB置低,串口方式
#define PSB_set PORTE |= (1 << PE2) //PSB置高,并口方式
void Display_String(uchar line,uchar *string);
void Wr_Data(uchar wrdata); //写数据
void Wr_Command(uchar wrcommand,uchar busyc); //写指令
void RDbf(void);//读忙状态
void Lcm_Init(void);//液晶初始化
void Delay5Ms(void);//延时5ms
void system_init(void);
uchar string_1[] = {"欢迎"};
uchar string_2[] = {"进入!"};
uchar string_3[] = {"12345678"};
void main(void)
{
system_init();
Lcm_Init();
Display_String(1,string_1);
Display_String(2,string_3);
Display_String(3,string_2);
Display_String(4,string_3);
while(1);
}
void Display_String(uchar line,uchar *string)//显示字符串
{
uchar addr,i;
if(line==1)
addr=0x80;
else if(line==2)
addr=0x90;
else if(line==3)
addr=0x88;
else if(line==4)
addr=0x98;
Wr_Command(addr,1);
for(i=0;i<16;i++)
{
Wr_Data(*string++);
}
}
void Wr_Data(uchar wrdata) //写数据
{
RDbf();
RS_set;
RW_clear;
E_set;
LCMdata=wrdata;
E_clear;
}
void Wr_Command(uchar wrcommand,uchar busyc) //写指令
{
if(busyc)
RDbf();
RS_clear;
RW_clear;
E_set;
LCMdata=wrcommand;
E_set;
}
void RDbf(void) //读忙状态
{
while(1)
{
RS_clear;
RW_set;
E_clear;
LCMdata=0xFF;
E_set;
if((LCMdata&Busy)==0)
break;
}
}
void Lcm_Init(void)
{
Delay5Ms();
RST_set;
RST_clear;
RST_set;
Wr_Command(0x30,0);
Delay5Ms();
Wr_Command(0x30,0); //2次显示模式设置,不用判忙
Delay5Ms();
Wr_Command(0x0C,1); //开显示及光标设置
Delay5Ms();
Wr_Command(0x01,1); //显示清屏
Delay5Ms();
Delay5Ms();
Wr_Command(0x06,1); //显示光标移动设置
Delay5Ms();
}
void Delay5Ms(void) //延时5ms
{
unsigned int TempCyc=5552;
while(TempCyc--);
}
//*************************************************************************
// 初始化子程序
//*************************************************************************
void system_init()
{
LCMdata = 0xFF; //电平设置
Data_DDR = 0xFF; //方向输出
PORTF = 0xFF; //电平设置
DDRF = 0xFF; //方向输出
PORTE=0xFF; //PSB对应于PE2
DDRE=0xFF;
PSB_set; //液晶并口方式
RST_set; //复位脚RST置高
}
|