找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3277|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

求助89C2051驅(qū)動(dòng)不了1602液晶

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:219916 發(fā)表于 2017-7-15 17:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
網(wǎng)上下載的用2051制作電容表,線路連接反復(fù)過了,1602始終都是全部顯示黑色方塊。不知程序有無問題,有倆個(gè)程序,一個(gè)是ASM文件,另一個(gè)是HEX,現(xiàn)在想把求助各位大神:怎么把ASM文件轉(zhuǎn)換成HEX寫入單片機(jī)?

評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
cxzycmj + 5 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:196174 發(fā)表于 2017-7-15 18:26 | 只看該作者
RS,RW,E這三個(gè)接對(duì)了嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2017-7-15 18:35 | 只看該作者
液晶屏能顯示一排黑塊基本證明沒有問題,給你一個(gè)經(jīng)過驗(yàn)證的測(cè)試程序,根據(jù)實(shí)際電路重新定義單片機(jī)驅(qū)動(dòng)液晶屏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延時(shí)程序********/
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);        //延時(shí)1ms
        LCD_EN=1;        //使能寫入
        delay(10);        //延時(shí)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);        //延時(shí)1ms
        LCD_EN=1;        //使能寫入
        delay(10);        //延時(shí)1ms
        LCD_EN=0;        //低跳變執(zhí)行
       
}
/*******1602液晶屏初始化程序********/
void init()                //設(shè)置顯示模式、
{
        write_com(0x38);//設(shè)置16*2顯示,5*7點(diǎn)陣,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è)置寫一個(gè)字符后地址指針加1
//        write_com(0x07);//設(shè)置寫一個(gè)字符后整屏左移
        write_com(0x80);//數(shù)據(jù)指針初始化,設(shè)置顯示初始位置
}
/**********************主程序*************************/
void main()
{
        uchar a;                                        //定義循環(huán)變量
        init();                                                //初始化程序
/******用for循環(huán)按字節(jié)逐個(gè)寫入********/
        write_com(0x80);                        //數(shù)據(jù)指針第一行起始0x80位置
        for(a=0;a<16;a++)                        //每循環(huán)一次寫一個(gè)字節(jié)數(shù)據(jù)
        {
                write_date(table[a]);        //寫一個(gè)字節(jié)數(shù)據(jù)               
        }
        write_com(0xc0);                        //數(shù)據(jù)指針第二行起始位置0x80+0x40=0xc0
        for(a=0;a<16;a++)                        //每循環(huán)一次寫一個(gè)字節(jié)數(shù)據(jù)
        {
                write_date(table1[a]);        //寫一個(gè)字節(jié)數(shù)據(jù)               
        }
        while(1);
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:82765 發(fā)表于 2017-7-15 19:03 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

5#
ID:34643 發(fā)表于 2017-7-15 20:39 | 只看該作者
要把把ASM文件轉(zhuǎn)換成HEX文件,你需要下載一個(gè)KEIL軟件安裝有你的電腦中,打開后對(duì)ASM程序進(jìn)行編譯,就可以生成HEX文件了。

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:151348 發(fā)表于 2017-7-15 20:42 | 只看該作者
上圖、上程序
回復(fù)

使用道具 舉報(bào)

7#
ID:130231 發(fā)表于 2017-7-15 22:03 | 只看該作者
復(fù)制ASM文本進(jìn)編譯器就可。編譯一下看一看有沒有錯(cuò),再編譯成HEX,過程不是很難。不過你上面不是說有HEX文件了嗎

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:103441 發(fā)表于 2017-7-16 09:48 | 只看該作者
時(shí)序有沒有問題?
回復(fù)

使用道具 舉報(bào)

9#
ID:200650 發(fā)表于 2017-7-16 12:44 | 只看該作者
調(diào)試時(shí)多數(shù)情況是程序問題
回復(fù)

使用道具 舉報(bào)

10#
ID:199329 發(fā)表于 2017-7-17 09:23 | 只看該作者
  1. //簡(jiǎn)單的1602測(cè)試程序
  2. //rs,rw,en根據(jù)自己的實(shí)際情況進(jìn)行修改
  3. #include<reg52.h>
  4. typedef  unsigned char uchar;
  5. typedef        unsigned int uint;

  6. sbit         RS = P3^5;//數(shù)據(jù)/命令選擇端
  7. sbit        RW = P3^6;//讀/寫數(shù)據(jù)端
  8. sbit        EN = P3^4;//使能端

  9. //檢測(cè)液晶是否繁忙
  10. void Read_Busy()
  11. {
  12.         uchar busy;
  13.         P0 = 0XFF;
  14.         RS = 0;
  15.         RW = 1;
  16.         do
  17.         {
  18.                 EN = 1;
  19.                 busy = P0;
  20.                 EN=0;
  21.         }while(busy & 0X80);
  22. }

  23. //寫指令
  24. void Write_Cmd(uchar cmd)
  25. {
  26.         Read_Busy();
  27.         RS = 0;
  28.         RW = 0;
  29.         P0 = cmd;
  30.         EN = 1;
  31.         EN = 0;
  32. }

  33. //寫入數(shù)據(jù)
  34. void Write_Dat(uchar dat)
  35. {
  36.         Read_Busy();
  37.         RS = 1;
  38.         RW = 0;
  39.         P0=dat;
  40.         EN=1;
  41.         EN=0;
  42. }

  43. //主函數(shù)
  44. void main()
  45. {
  46.         uchar *p;
  47.         uchar a[] = {"Hello Worldi"};

  48.        
  49.         Write_Cmd(0X38);//顯示設(shè)置
  50.         Write_Cmd(0x0f);//開顯示
  51.         Write_Cmd(0X01);//清屏
  52.        
  53.         Write_Cmd(0x06);
  54.         Write_Cmd(0x80 | 0x00);
  55.         p=a;
  56.         while(*p != '\0')
  57.         {
  58.                 Write_Dat( *p++);
  59.         }       
  60.        
  61.         while(1);
  62. }
復(fù)制代碼










回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表