欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 為什么LCD1602不顯示? [打印本頁]

作者: 孫韜    時間: 2018-4-30 21:01
標題: 為什么LCD1602不顯示?
這個程序的目的是顯示出welcome Harbin China
我先是使用的查忙程序,但是LCD沒有顯示
后來用的這個程序沒有使用差忙的程序,而是使用的延時函數,但是1602液晶屏還是沒有顯示,誰知道是怎么回事嗎?
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define out P0
sbit RS=P2^0;//將P2口的0,1,2號口作為RS RW E的接口
sbit RW=P2^1;//
sbit E=P2^2;//
void LCD_initialize();//初始化函數
void check_busy();//查忙函數,但是這次沒有用到
void write_command(uchar com);//寫命令函數
void write_data(uchar dat);//寫數據函數
void string(uchar ad,uchar*p,uchar n);//使Lcd顯示字符的函數
void delay(uchar i);//延時函數
void main()
{
  LCD_initialize();//LCD初始化
  while(1)
  {
    string(0x85,"welcome",7);//寫入welcome
  string(0xc2,"Harbin China",12);//寫入Harbin China
  delay(100);
  write_command(0x01);//清屏
  delay(100);
   }
}
void delay(uchar i)//延時函數
{
  uchar t;
  while(i--)
  {
    for(t=0;t<120;t++);
  }
}
void write_command(uchar com)//寫命令函數
{
delay(1);
E=0;
RS=0;
RW=0;
out=com;
delay(1);
E=1;
_nop_();
E=0;
delay(1);
}
void LCD_initialize()//初始化函數
{
  write_command(0x38);
  _nop_();
  write_command(0x0c);
  _nop_();
  write_command(0x0b);
  _nop_();
  write_command(0x01);
  delay(1);
}
void write_data(uchar dat)//寫數據函數
{
delay(1);
E=0;
RS=1;
RW=0;
out=dat;
delay(1);
E=1;
_nop_();
E=0;
delay(1);
}
void string(uchar ad,uchar *p,uchar n)//顯示字符函數
{
  uchar i;
  write_command(ad);
  for(i=0;i<n;i++)
  {
    write_data(*p++);
  delay(100);
  }
}

T@(7QC0)[TGTT$@@%6FEQPO.png (63.88 KB, 下載次數: 102)

T@(7QC0)[TGTT$@@%6FEQPO.png

作者: zl2168    時間: 2018-5-2 12:52
實例67  LCD1602顯示屏顯示
Proteus仿真一下,確認有效。
實例61 LCD1602顯示屏顯示.rar (49.26 KB, 下載次數: 289)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1。書中電路和程序設計有詳細說明,程序語句條條有注解。

作者: wulin    時間: 2018-5-2 16:27

改了一下,實物驗證正常。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define out P0
sbit RS=P2^0;//將P2口的0,1,2號口作為RS RW E的接口
sbit RW=P2^1;//
sbit E=P2^2;//
//void LCD_initialize();//初始化函數
//void check_busy();//查忙函數,但是這次沒有用到
//void write_command(uchar com);//寫命令函數
//void write_data(uchar dat);//寫數據函數
//void string(uchar ad,uchar*p,uchar n);//使Lcd顯示字符的函數
//void delay(uchar i);//延時函數

void delay(uchar i)//延時函數
{
  uchar t;
  while(i--)
  {
    for(t=0;t<120;t++);
  }
}
void write_command(uchar com)//寫命令函數
{
//        delay(1);
        E=0;
        RS=0;
//        RW=0;
        out=com;
        delay(1);
        E=1;
        delay(1);
        E=0;
//        delay(1);
}

void write_data(uchar dat)//寫數據函數
{
//        delay(1);
//        E=0;
        RS=1;
//        RW=0;
        out=dat;
        delay(1);
        E=1;
        delay(1);
        E=0;
//        delay(1);
}
void LCD_initialize()//初始化函數
{
        RW=0;
        write_command(0x38);
        write_command(0x01);
        write_command(0x0c);
        write_command(0x06);
//        write_command(0x0b);
        write_command(0x80);
}

void string(uchar ad,uchar *p,uchar n)//顯示字符函數
{
        uchar i;
        write_command(ad);
        for(i=0;i<n;i++)
        {
                write_data(*p++);
                delay(100);
        }
}

void main()
{
        LCD_initialize();//LCD初始化
        while(1)
        {
                string(0x85,"welcome",7);//寫入welcome
                string(0xc2,"Harbin China",12);//寫入Harbin China
                delay(100);
                write_command(0x01);//清屏
                delay(100);
        }
}


作者: 孫韜    時間: 2018-5-4 07:47
wulin 發表于 2018-5-2 16:27
改了一下,實物驗證正常。
#include
#include

行,已經改好了,多謝幫助!
作者: 孫韜    時間: 2018-5-4 07:48
zl2168 發表于 2018-5-2 12:52
實例67  LCD1602顯示屏顯示
先Proteus仿真一下,確認有效。
以上摘自張志良編著《80C51單片機仿真設計實 ...

已經改好了,多謝幫助!
作者: SOsong    時間: 2018-5-4 09:41
時序問題或者電位器
作者: 18686906042    時間: 2019-8-3 12:30
void string(uchar ad,uchar *p,uchar n)//顯示字符函數
{
        uchar i;
        write_command(ad);
        for(i=0;i<n;i++)
        {
                write_data(*p++);
                delay(100);
        }
}
請問這個*號是什么呢?為什么去掉之后就不對了,而顯示亂碼
作者: aaaaaa。    時間: 2019-8-3 14:13
*是指針
作者: 18686906042    時間: 2019-8-4 10:49
aaaaaa。 發表于 2019-8-3 14:13
*是指針

謝謝蟹蟹,還有個問題,這兩個*都不可省略嘛????
作者: 18686906042    時間: 2019-8-4 12:50
* 指針運算符 //*p為p所指向的存儲單元的內容
p就相當于存儲單元地址
作者: sprout    時間: 2019-8-4 13:45
檢查一下是a6還是a18
作者: zhuxiaoyao    時間: 2019-8-4 13:56
void LCD_initialize()//初始化函數
{
  write_command(0x38);
  _nop_();
  write_command(0x0c);
  _nop_();
  write_command(0x0b);
  _nop_();
  write_command(0x01);
  delay(1);
}
這個你把0xb改為0x6就可以顯示,但是顯示是一次顯示的。我用自己的實驗板演示了以下。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1