标题:
求助89C2051驱动不了1602液晶
[打印本页]
作者:
tom103870
时间:
2017-7-15 17:47
标题:
求助89C2051驱动不了1602液晶
网上下载的用2051制作电容表,线路连接反复过了,1602始终都是全部显示黑色方块。不知程序有无问题,有俩个程序,一个是ASM文件,另一个是HEX,现在想把求助各位大神:怎么把ASM文件转换成HEX写入单片机?
作者:
1311638554
时间:
2017-7-15 18:26
RS,RW,E这三个接对了吗?
作者:
wulin
时间:
2017-7-15 18:35
液晶屏能显示一排黑块基本证明没有问题,给你一个经过验证的测试程序,根据实际电路重新定义单片机驱动液晶屏I/O口
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P3^5; //液晶屏RS口 写指令低,写数据高
sbit LCD_EN=P3^4; //液晶屏EN口 高脉冲使能写指令/数据,低跳变执行
//sbit LCD_W=P3^3; //液晶屏RW口 固定接地,只写不读。
uchar table[] ="0123456789ABCDEF"; //第一行
uchar table1[]="GIJKLMNOPQRSTUVW"; //第二行
/*******100us延时程序********/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
/*******1602液晶屏写指令程序********/
void write_com(uchar com)
{
// LCD_W=0; //读/写选择写入
LCD_EN=0; //初始设置LCD_EN低电平
LCD_RS=0; //允许写指令
P0=com; //传递指令
delay(10); //延时1ms
LCD_EN=1; //使能写入
delay(10); //延时1ms
LCD_EN=0; //低跳变执行
}
/*******1602液晶屏写数据程序********/
void write_date(uchar date)
{
// LCD_W=0; //读/写选择写入
LCD_EN=0; //初始设置LCD_EN低电平
LCD_RS=1; //允许写数据
P0 =date; //传递数据
delay(10); //延时1ms
LCD_EN=1; //使能写入
delay(10); //延时1ms
LCD_EN=0; //低跳变执行
}
/*******1602液晶屏初始化程序********/
void init() //设置显示模式、
{
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x01);//显示清零,数据指针清零
// write_com(0x0f);//设置开显示,显示光标,光标闪烁
// write_com(0x0e);//设置开显示,显示光标,光标不闪
write_com(0x0c);//设置开显示,不显光标
write_com(0x06);//设置写一个字符后地址指针加1
// write_com(0x07);//设置写一个字符后整屏左移
write_com(0x80);//数据指针初始化,设置显示初始位置
}
/**********************主程序*************************/
void main()
{
uchar a; //定义循环变量
init(); //初始化程序
/******用for循环按字节逐个写入********/
write_com(0x80); //数据指针第一行起始0x80位置
for(a=0;a<16;a++) //每循环一次写一个字节数据
{
write_date(table[a]); //写一个字节数据
}
write_com(0xc0); //数据指针第二行起始位置0x80+0x40=0xc0
for(a=0;a<16;a++) //每循环一次写一个字节数据
{
write_date(table1[a]); //写一个字节数据
}
while(1);
}
作者:
cjjcjj1
时间:
2017-7-15 19:03
提示:
作者被禁止或删除 内容自动屏蔽
作者:
51mcu
时间:
2017-7-15 20:39
要把把ASM文件转换成HEX文件,你需要下载一个KEIL软件安装有你的电脑中,打开后对ASM程序进行编译,就可以生成HEX文件了。
作者:
imxuheng
时间:
2017-7-15 20:42
上图、上程序
作者:
zqy181818
时间:
2017-7-15 22:03
复制ASM文本进编译器就可。编译一下看一看有没有错,再编译成HEX,过程不是很难。不过你上面不是说有HEX文件了吗
作者:
tianguang001
时间:
2017-7-16 09:48
时序有没有问题?
作者:
kuikui
时间:
2017-7-16 12:44
调试时多数情况是程序问题
作者:
不会哭的毛毛虫
时间:
2017-7-17 09:23
//简单的1602测试程序
//rs,rw,en根据自己的实际情况进行修改
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RS = P3^5;//数据/命令选择端
sbit RW = P3^6;//读/写数据端
sbit EN = P3^4;//使能端
//检测液晶是否繁忙
void Read_Busy()
{
uchar busy;
P0 = 0XFF;
RS = 0;
RW = 1;
do
{
EN = 1;
busy = P0;
EN=0;
}while(busy & 0X80);
}
//写指令
void Write_Cmd(uchar cmd)
{
Read_Busy();
RS = 0;
RW = 0;
P0 = cmd;
EN = 1;
EN = 0;
}
//写入数据
void Write_Dat(uchar dat)
{
Read_Busy();
RS = 1;
RW = 0;
P0=dat;
EN=1;
EN=0;
}
//主函数
void main()
{
uchar *p;
uchar a[] = {"Hello Worldi"};
Write_Cmd(0X38);//显示设置
Write_Cmd(0x0f);//开显示
Write_Cmd(0X01);//清屏
Write_Cmd(0x06);
Write_Cmd(0x80 | 0x00);
p=a;
while(*p != '\0')
{
Write_Dat( *p++);
}
while(1);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1