標(biāo)題:
求助89C2051驅(qū)動不了1602液晶
[打印本頁]
作者:
tom103870
時間:
2017-7-15 17:47
標(biāo)題:
求助89C2051驅(qū)動不了1602液晶
網(wǎng)上下載的用2051制作電容表,線路連接反復(fù)過了,1602始終都是全部顯示黑色方塊。不知程序有無問題,有倆個程序,一個是ASM文件,另一個是HEX,現(xiàn)在想把求助各位大神:怎么把ASM文件轉(zhuǎn)換成HEX寫入單片機?
作者:
1311638554
時間:
2017-7-15 18:26
RS,RW,E這三個接對了嗎?
作者:
wulin
時間:
2017-7-15 18:35
液晶屏能顯示一排黑塊基本證明沒有問題,給你一個經(jīng)過驗證的測試程序,根據(jù)實際電路重新定義單片機驅(qū)動液晶屏I/O口
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P3^5; //液晶屏RS口 寫指令低,寫數(shù)據(jù)高
sbit LCD_EN=P3^4; //液晶屏EN口 高脈沖使能寫指令/數(shù)據(jù),低跳變執(zhí)行
//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; //初始設(shè)置LCD_EN低電平
LCD_RS=0; //允許寫指令
P0=com; //傳遞指令
delay(10); //延時1ms
LCD_EN=1; //使能寫入
delay(10); //延時1ms
LCD_EN=0; //低跳變執(zhí)行
}
/*******1602液晶屏寫數(shù)據(jù)程序********/
void write_date(uchar date)
{
// LCD_W=0; //讀/寫選擇寫入
LCD_EN=0; //初始設(shè)置LCD_EN低電平
LCD_RS=1; //允許寫數(shù)據(jù)
P0 =date; //傳遞數(shù)據(jù)
delay(10); //延時1ms
LCD_EN=1; //使能寫入
delay(10); //延時1ms
LCD_EN=0; //低跳變執(zhí)行
}
/*******1602液晶屏初始化程序********/
void init() //設(shè)置顯示模式、
{
write_com(0x38);//設(shè)置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
// write_com(0x0f);//設(shè)置開顯示,顯示光標(biāo),光標(biāo)閃爍
// write_com(0x0e);//設(shè)置開顯示,顯示光標(biāo),光標(biāo)不閃
write_com(0x0c);//設(shè)置開顯示,不顯光標(biāo)
write_com(0x06);//設(shè)置寫一個字符后地址指針加1
// write_com(0x07);//設(shè)置寫一個字符后整屏左移
write_com(0x80);//數(shù)據(jù)指針初始化,設(shè)置顯示初始位置
}
/**********************主程序*************************/
void main()
{
uchar a; //定義循環(huán)變量
init(); //初始化程序
/******用for循環(huán)按字節(jié)逐個寫入********/
write_com(0x80); //數(shù)據(jù)指針第一行起始0x80位置
for(a=0;a<16;a++) //每循環(huán)一次寫一個字節(jié)數(shù)據(jù)
{
write_date(table[a]); //寫一個字節(jié)數(shù)據(jù)
}
write_com(0xc0); //數(shù)據(jù)指針第二行起始位置0x80+0x40=0xc0
for(a=0;a<16;a++) //每循環(huán)一次寫一個字節(jié)數(shù)據(jù)
{
write_date(table1[a]); //寫一個字節(jié)數(shù)據(jù)
}
while(1);
}
作者:
cjjcjj1
時間:
2017-7-15 19:03
提示:
作者被禁止或刪除 內(nèi)容自動屏蔽
作者:
51mcu
時間:
2017-7-15 20:39
要把把ASM文件轉(zhuǎn)換成HEX文件,你需要下載一個KEIL軟件安裝有你的電腦中,打開后對ASM程序進(jìn)行編譯,就可以生成HEX文件了。
作者:
imxuheng
時間:
2017-7-15 20:42
上圖、上程序
作者:
zqy181818
時間:
2017-7-15 22:03
復(fù)制ASM文本進(jìn)編譯器就可。編譯一下看一看有沒有錯,再編譯成HEX,過程不是很難。不過你上面不是說有HEX文件了嗎
作者:
tianguang001
時間:
2017-7-16 09:48
時序有沒有問題?
作者:
kuikui
時間:
2017-7-16 12:44
調(diào)試時多數(shù)情況是程序問題
作者:
不會哭的毛毛蟲
時間:
2017-7-17 09:23
//簡單的1602測試程序
//rs,rw,en根據(jù)自己的實際情況進(jìn)行修改
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit RS = P3^5;//數(shù)據(jù)/命令選擇端
sbit RW = P3^6;//讀/寫數(shù)據(jù)端
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;
}
//寫入數(shù)據(jù)
void Write_Dat(uchar dat)
{
Read_Busy();
RS = 1;
RW = 0;
P0=dat;
EN=1;
EN=0;
}
//主函數(shù)
void main()
{
uchar *p;
uchar a[] = {"Hello Worldi"};
Write_Cmd(0X38);//顯示設(shè)置
Write_Cmd(0x0f);//開顯示
Write_Cmd(0X01);//清屏
Write_Cmd(0x06);
Write_Cmd(0x80 | 0x00);
p=a;
while(*p != '\0')
{
Write_Dat( *p++);
}
while(1);
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1