新手求救 盛群单片机驱动1602LCD
1602检查过时没问题的,用51试过时可以的,将程序改过加到ht66f50再驱动1602就驱动不起来了
编译是通过的,代码如下:
#include<ht66f50.h> //包含头文件,这个嘛,就不用多说了~~
#define rs _pd0 //1602的数据/指令选择控制线
#define rw _pd1 //1602的读写控制线
#define en _pd2 //1602的使能控制线
const unsigned char table[]={"LCD1602 check ok"}; //要显示的内容1放入数组tablel
const unsigned char table1[]={"study up"}; //要显示的内容2放入数组table1
void delay(unsigned int n) //延时函数
{
unsigned int x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(unsigned char com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
_pa=com; //把命令字送入P2
delay(5);
//延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(unsigned char dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
_pa=dat; //把要显示的数据送入pa
delay(5);
//延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函数
{ unsigned char n,m=0;
unsigned char i,j;
_acerl = 0;//去除PA0管脚的AN0(A/D)功能
_tmpc0 = 0;//去除PA0管脚的TP0_0(TM0输入/输出)功能
_tmpc1 = 0;
_cp0c = 0;//去除PA0管脚的COX(比较器)功能
_cp1c = 0;
_pac = 0;//PA0设置为输出
_pdc = 0;
_papu = 0xff;//PA0设置为上拉
_pdpu = 0xff;
_pa = 0x00;
_pd = 0;
while(1)
{lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位
for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位
for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示
{
lcd_wdat(table1[n]);
delay(200);
}
}
}
[解决办法]
示波器,逻辑分析仪检查波形
[解决办法]
你这是在做仿真吗?如果是仿真就不多说了
如果是硬件 其他问题很多的 比如对比度没有调节好,
程序大致看了一遍也没有看出有啥不对的
不过你的那个液晶初始化应该放到while(1)以前;
初始化以后就不用再反复初始化化了