找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3249|回復(fù): 12
收起左側(cè)

各位大神可以幫我看看嗎為什么1602顯示屏顯示不出數(shù)值呀

[復(fù)制鏈接]
ID:864507 發(fā)表于 2020-12-21 10:56 | 顯示全部樓層 |閱讀模式
程序在這里
#include<reg51.h>
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           */
typedef unsigned int   U16;


sbit  rs=P2^5;                                             
sbit  rw=P2^6 ;                                             
sbit  e=P2^7;
sbit ADCS =P3^5;  //ADC0832 chip seclect
sbit ADDI =P3^7;  //ADC0832 k in
sbit ADDO =P3^7;  //ADC0832 k out
sbit ADCLK =P3^6;  //ADC0832 clock signal

unsigned int temp;
unsigned char dispbuf[4];
uchar getdata;


void Delay(U16 j)
{      
U8 i;
for(;j>0;j--)
{         
for(i=0;i<27;i++);
}
}
//1602D′Ö¸áîoˉêy
void xiezhilin(uchar zhilin)
{      
         rs = 0 ;
          rw = 0 ;
          e = 0 ;
          P0 = zhilin ;
        Delay(100);
          e = 1 ;
        Delay(100);
          e = 0 ;
}
//1602D′êy¾Yoˉêy
void xiesu(uchar suzi)
{      
          rs = 1 ;
          rw = 0 ;
          e = 0 ;
          P0 = suzi ;
    Delay(100);
          e = 1 ;
          Delay(100);
          e = 0 ;
}
//1602¿ØÖÆÏÔê¾oˉêy
void xianshi(uchar dizhi, uchar suzi)
{
   xiezhilin(dizhi);
   xiesu(suzi);
}
//×a»»3é¿éòÔÔú1602ÏÔê¾μÄêyÖμ
void LCDdisplay(void)
{
          xianshi(0x80+0,'V');
          xianshi(0x80+1,'a');
                xianshi(0x80+2,'l');
                xianshi(0x80+3,'u');
          xianshi(0x80+4,'e');
          xianshi(0x80+5,':');
          xianshi(0x80+6,0x30+dispbuf[2]);
          xianshi(0x80+7,0x30+dispbuf[1]);
          xianshi(0x80+8,0x30+dispbuf[0]);
          xianshi(0x80+9,'G');
          xianshi(0x80+10,'E');
          xianshi(0x80+11,'\0');
}
//AD0832¶áè¡êy¾Yoˉêy
unsigned int Adc0832(unsigned char channel)
{
    uchar i=0;
    uchar j;
    uint dat=0;
    uchar ndat=0;

    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;
    _nop_();
    _nop_();
    ADCLK=1;
    _nop_();
    _nop_();
    ADCLK=0;
    _nop_();
    _nop_();
    ADCLK=1;
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;
    _nop_();
    _nop_();
    ADCLK=1;
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;
    ADDI=1;
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;
    ADCLK=0;
    ADDO=1;
    dat<<=8;
    dat|=ndat;
    return(dat);
}
void main()
{
        xiezhilin(0x01);
        xiezhilin(0x38);
  xiezhilin(0x0c);
        
        while(1)
        {                  
          getdata=Adc0832(0);  
          if(0<=getdata<=255)
                 {                           
                  int vary=getdata*100;
                        temp=(int)(vary/51);
                        dispbuf[2]=(temp/100)%10;
                        dispbuf[1]=(temp/10)%10;
                        dispbuf[0]=temp%10;   
          }
         LCDdisplay();
        }        
}


D951BD09845C7144C3559456FD38A61B.png
回復(fù)

使用道具 舉報

ID:836944 發(fā)表于 2020-12-21 11:25 | 顯示全部樓層
可以去看看以前的貼子,搜1602 白就有
回復(fù)

使用道具 舉報

ID:824490 發(fā)表于 2020-12-21 11:36 | 顯示全部樓層
你的MAIN中,沒有LCD的初始化,如何能顯示?
LCD1602初始化沒成功,顯示出來就是象你這樣的圖形。
回復(fù)

使用道具 舉報

ID:824490 發(fā)表于 2020-12-21 11:39 | 顯示全部樓層
LCD1602測試代碼
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>


unsigned int hour,minute,second,count;

sbit RS = P2^4;//Pin4
sbit RW = P2^5; //Pin5
sbit E  = P2^6;//Pin6

#define Data  P0    //數(shù)據(jù)端口

char data TimeNum[]="                ";
char data Test1[]="                  ";
/******************************************************************/
/*                    函數(shù)聲明                                    */
/******************************************************************//***************************************************************/
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
while(--ms)
   {
     DelayUs(250);
     DelayUs(250);
     DelayUs(250);
     DelayUs(250);
   }
}
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5);   //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
    p=pos+0xb0; //是第二行則命令代碼高4位為0xc
else
    p=pos+0x80; //是第二行則命令代碼高4位為0x8
WriteCommand (p);//write command
WriteData (c);   //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<4;
for (i=0;i<16;i++)
  ShowChar (l++,*(ptr+i));//循環(huán)顯示16個字符
}
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //顯示光標(biāo)移動位置
WriteCommand(0x0c); //顯示開及光標(biāo)設(shè)置
WriteCommand(0x01); //顯示清屏

}


/////////////////////////////////////////////////////////////////
void main(void)

{
InitLcd();//
DelayMs(15);

sprintf(Test1," xxxxxxxx  ");//the first line
ShowString(0,Test1);

sprintf(TimeNum,"LCM1602 Test ok!");//the first line
ShowString(1,TimeNum);

while(1);

}
回復(fù)

使用道具 舉報

ID:226055 發(fā)表于 2020-12-21 13:58 | 顯示全部樓層
    1、你使用的應(yīng)該是開發(fā)板吧,開發(fā)板提供的肯定有LCD1602的例程。
    2、下載提供的例程看下能不能顯示,這主要是為了判斷你的硬件是不是好的。
    1)例程指軟件,開發(fā)板配套的例程肯定都是被很多人驗(yàn)證過的,理論上是沒有問題的。
    2)你手頭的板子是硬件,出廠有無檢驗(yàn)不知道,即使檢驗(yàn)了,路上運(yùn)輸可能造成不良。
    3、LCD1602屏對供電有要求,一般是5V供電的。看你單片機(jī)是早期的STC89C52系列的吧,所以供電不存在選擇其他電壓,因?yàn)檫@個單片機(jī)就是5V供電的。
    4、LCD1602屏顯示還需要調(diào)節(jié)對比度的,一般都是針對屏VO引腳,外接可調(diào)電阻實(shí)現(xiàn)。但初步看你的現(xiàn)象,應(yīng)該是調(diào)節(jié)了的,因?yàn)橛嘘幱俺霈F(xiàn),只是沒有確切的內(nèi)容。
    5、這個開發(fā)板的單片機(jī)是可插拔的,一定注意下你單片機(jī)方向別插錯了。
    6、當(dāng)然也不排除軟件問題,下面給出下自已手頭的有一款艾克姆的STC8的驅(qū)動程序,寫得不錯,比你截圖的設(shè)計思路要清晰。
LCD1602圖.png

LCD1602圖2.png

LCD1602液晶屏顯示實(shí)驗(yàn).7z

14.67 KB, 下載次數(shù): 4

回復(fù)

使用道具 舉報

ID:864507 發(fā)表于 2020-12-21 15:56 | 顯示全部樓層
名字不是重點(diǎn) 發(fā)表于 2020-12-21 11:36
你的MAIN中,沒有LCD的初始化,如何能顯示?
LCD1602初始化沒成功,顯示出來就是象你這樣的圖形。

我已經(jīng)初始化了呀?還是顯示不出來而且仿真是沒有問題的
回復(fù)

使用道具 舉報

ID:226055 發(fā)表于 2020-12-22 09:08 | 顯示全部樓層
還要考慮是不是硬件問題,比如你的LCD1602屏壞了
回復(fù)

使用道具 舉報

ID:748788 發(fā)表于 2020-12-22 11:04 | 顯示全部樓層
1602的數(shù)據(jù)口沒有定義吧,樓下幫你定義了P0
回復(fù)

使用道具 舉報

ID:864507 發(fā)表于 2021-1-4 09:22 | 顯示全部樓層
wwh2382 發(fā)表于 2020-12-22 11:04
1602的數(shù)據(jù)口沒有定義吧,樓下幫你定義了P0

#include<reg51.h>
#include "intrins.h"

#define uchar unsigned char
#define uint unsigned int
typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable           */
typedef unsigned int   U16;


sbit  rs=P2^5;                                             
sbit  rw=P2^6 ;                                             
sbit  e=P2^7;
sbit ADCS =P3^5;  //ADC0832 chip seclect
sbit ADDI =P3^7;  //ADC0832 k in
sbit ADDO =P3^7;  //ADC0832 k out
sbit ADCLK =P3^6;  //ADC0832 clock signal

unsigned int temp;
unsigned char dispbuf[4];
uchar getdata;


void Delay(U16 j)
{      
U8 i;
for(;j>0;j--)
{        
for(i=0;i<27;i++);
}
}
//1602D′Ö¸áîoˉêy
void xiezhilin(uchar zhilin)
{      
        rs = 0 ;
          rw = 0 ;
          e = 0 ;
          P0 = zhilin ;
        Delay(100);
          e = 1 ;
        Delay(100);
          e = 0 ;
}
//1602D′êy¾Yoˉêy
void xiesu(uchar suzi)
{      
         rs = 1 ;
          rw = 0 ;
          e = 0 ;
          P0 = suzi ;
    Delay(100);
          e = 1 ;
          Delay(100);
          e = 0 ;
}
//1602¿ØÖÆÏÔê¾oˉêy
void xianshi(uchar dizhi, uchar suzi)
{
   xiezhilin(dizhi);
   xiesu(suzi);
}
//×a»»3é¿éòÔÔú1602ÏÔê¾μÄêyÖμ
void LCDdisplay(void)
{
          xianshi(0x80+0,'V');
          xianshi(0x80+1,'a');
                xianshi(0x80+2,'l');
                xianshi(0x80+3,'u');
          xianshi(0x80+4,'e');
          xianshi(0x80+5,':');
          xianshi(0x80+6,0x30+dispbuf[2]);
          xianshi(0x80+7,0x30+dispbuf[1]);
          xianshi(0x80+8,0x30+dispbuf[0]);
          xianshi(0x80+9,'G');
          xianshi(0x80+10,'E');
          xianshi(0x80+11,'\0');
}
回復(fù)

使用道具 舉報

ID:864507 發(fā)表于 2021-1-4 09:22 | 顯示全部樓層
wwh2382 發(fā)表于 2020-12-22 11:04
1602的數(shù)據(jù)口沒有定義吧,樓下幫你定義了P0

可以幫我看看問題出在哪嗎?
回復(fù)

使用道具 舉報

ID:390416 發(fā)表于 2021-1-4 10:11 | 顯示全部樓層
看這個貼子   單片機(jī)+LCD1602顯示℃ 這種自定義符號 www.torrancerestoration.com/bbs/dpj-200685-1.html
你把595 改成P0口 就行了   
回復(fù)

使用道具 舉報

ID:517466 發(fā)表于 2021-1-4 10:59 | 顯示全部樓層
本帖最后由 suncat0504 于 2021-1-4 11:08 編輯

樓主啊,你使用的開發(fā)板,明明是使用P2口作為數(shù)據(jù)線提供給液晶,P0.7,P0.6,P0.5作為控制線。而你的程序你確實(shí)用P2.7,P2.6,P2.5作為控制線,P0做數(shù)據(jù)口,又怎么可能會成功呢?
你修改這部分代碼:
sbit  rs=P2^5;                ==》sbit rs=P0^7;                                             
sbit  rw=P2^6 ;              ==》sbit rw=P0^6;                              
sbit  e=P2^7;                 ==》sbit e=P0^5;

你使用YL-39開發(fā)板,一定要牢記這個開發(fā)板的口線分配,在編程時一定要和程序嚴(yán)格匹配,否則肯定會出錯的。
另外再修改數(shù)據(jù)傳遞語句:
P0 = zhilin ;   ==> P2=zhilin;
P0 = suzi ;    ==>  P2 = suzi ;

另外使用過程中,注意各個跳線的設(shè)置。有些功能需要通過短路/斷開跳線才能正常執(zhí)行。
回復(fù)

使用道具 舉報

ID:517466 發(fā)表于 2021-1-4 11:04 | 顯示全部樓層
附上我已經(jīng)測試過的代碼,使用STC89C52,11.0592晶振.
# include <reg52.h>
# include <intrins.h>


typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long ulong;
typedef bit BOOL;

#define PDATA P2
sbit rs=P0^7;
sbit rw=P0^6;
sbit ep=P0^5;

// 延時
void delay (ulong m) {
        while(m--);
}

// 判斷1602是否處于忙狀態(tài)
BOOL lcd_bz() {
        BOOL result;
        rs=0;           // 讀忙信號
        rw=1;
        ep=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result = (BOOL)(PDATA&0x80);
        ep=0;
        result ;
}

// 向1602寫指令
void lcd_wcmd (BYTE cmd) {
        while (lcd_bz());
        rs=0;
        rw=0;
        ep=0;
        _nop_();
        _nop_();
        PDATA=cmd ;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep=0;
}
// 設(shè)置顯示位置:80H+ 地址碼( 0-27H ,40H-67H)
void lcd_pos (BYTE pos) {
          lcd_wcmd (pos|0x80);
}

// 向1602寫數(shù)據(jù)
void lcd_wdat (BYTE dat) {
        while (lcd_bz());
        rs=1;
        rw=0;
        ep=0;
        _nop_();
        _nop_();
        PDATA=dat ;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        ep=0;
}

// 液晶的初始化處理
void lcd_init () {
        lcd_wcmd (0x38);
        delay(1200);
        lcd_wcmd (0x0c);
        delay(1200);
        lcd_wcmd (0x06);
        delay(1200);
        lcd_wcmd (0x01);
        delay(1200);
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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