久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

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

51單片機(jī)最小系統(tǒng)板 12864液晶無法顯示 求解決

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:66729 發(fā)表于 2014-10-3 22:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
51單片機(jī)最小系統(tǒng)板 如圖,寫入程序后12864液晶無法顯示,已經(jīng)試過多次了。。唉。。
   付上程序,看看哪時(shí)不行了??
#include "reg52.h"
#include "intrins.h"
sbit io_LCD12864_RS = P2^3 ;
sbit io_LCD12864_RW = P2^4 ;
sbit io_LCD12864_EN = P2^5 ;

#define io_LCD12864_DATAPORT P0

#define SET_DATA    io_LCD12864_RS = 1 ;
#define SET_INC      io_LCD12864_RS = 0 ;
#define SET_READ   io_LCD12864_RW = 1 ;
#define SET_WRITE io_LCD12864_RW = 0 ;
#define SET_EN       io_LCD12864_EN = 1 ;
#define CLR_EN       io_LCD12864_EN = 0 ;

void v_Lcd12864CheckBusy_f( void )      //忙檢測(cè)函數(shù)
{
        unsigned int nTimeOut = 0 ;
  SET_INC
  SET_READ
  CLR_EN
  SET_EN
  while( ( io_LCD12864_DATAPORT & 0x80 ) && ( ++nTimeOut != 0 ) ) ;
  CLR_EN
  SET_INC
  SET_READ
}

void v_Lcd12864SendCmd_f( unsigned char byCmd )     //發(fā)送命令
{
  v_Lcd12864CheckBusy_f() ;
        SET_INC
  SET_WRITE
  CLR_EN
  io_LCD12864_DATAPORT = byCmd ;
  _nop_();
  _nop_();
  SET_EN   
  _nop_();
  _nop_();
  CLR_EN

  SET_READ
  SET_INC
}
void v_Lcd12864SendData_f( unsigned char byData ) //發(fā)送數(shù)據(jù)
{
  v_Lcd12864CheckBusy_f() ;
        SET_DATA
  SET_WRITE
  CLR_EN
  io_LCD12864_DATAPORT = byData ;
  _nop_();
  _nop_();
  SET_EN   
  _nop_();
  _nop_();
  CLR_EN
  SET_READ
  SET_INC
}

void v_DelayMs_f( unsigned int nDelay )          //延時(shí)
{
  unsigned int i ;
        for( ; nDelay > 0 ; nDelay-- )
  {
          for( i = 125 ; i > 0 ; i-- ) ;
  }
}

void v_Lcd12864Init_f( void )              //初始化
{
  v_Lcd12864SendCmd_f( 0x30 ) ;           //基本指令集
  v_DelayMs_f( 50 ) ;
  v_Lcd12864SendCmd_f( 0x01 ) ;           //清屏
  v_DelayMs_f( 50 ) ;
  v_Lcd12864SendCmd_f( 0x06 ) ;           //光標(biāo)右移
  v_DelayMs_f( 50 ) ;
  v_Lcd12864SendCmd_f( 0x0c ) ;            //開顯示
}
void v_Lcd12864SetAddress_f( unsigned char x, y )    //地址轉(zhuǎn)換
{
  unsigned char byAddress ;
  switch( y )
  {

    case 0 :  byAddress = 0x80 + x ;
      break;
    case 1 :  byAddress = 0x90 + x ;
      break ;
    case 2 :  byAddress = 0x88 + x ;
      break ;
    case 3 :       byAddress = 0x98 + x ;
      break ;
    default :
      break ;
  }
  v_Lcd12864SendCmd_f( byAddress ) ;
}
void v_Lcd12864PutString_f( unsigned char x, unsigned char y, unsigned char *pData )
{
  v_Lcd12864SetAddress_f( x, y ) ;
  while( *pData != '\0' )
  {
    v_Lcd12864SendData_f( *pData++ ) ;
  }            

}
void main( void )
{
  v_Lcd12864Init_f() ;

  v_Lcd12864PutString_f( 0,0, "快樂隨行") ;
  v_Lcd12864PutString_f( 2,1, "分都不給") ;
  v_Lcd12864PutString_f( 0,2, "*LCD12864ST7920*") ;
  v_Lcd12864PutString_f( 0,3, "辛苦回答了半天") ;
  while( 1 ) ;
}

接口.jpg (94.43 KB, 下載次數(shù): 172)

板子接口說明

板子接口說明

接口說明.jpg (61.52 KB, 下載次數(shù): 187)

12864接口說明

12864接口說明

IMG_6781_副本.jpg (345.45 KB, 下載次數(shù): 184)

IMG_6781_副本.jpg

IMG_6786_副本.jpg (434.78 KB, 下載次數(shù): 190)

IMG_6786_副本.jpg

IMG_6788_副本.jpg (367.32 KB, 下載次數(shù): 189)

IMG_6788_副本.jpg

IMG_6791_副本.jpg (147.31 KB, 下載次數(shù): 162)

IMG_6791_副本.jpg

IMG_6792_副本.jpg (272.05 KB, 下載次數(shù): 169)

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

使用道具 舉報(bào)

沙發(fā)
ID:63094 發(fā)表于 2014-10-9 16:19 | 只看該作者
剛試了你的程序 也沒顯示出來 ,我也剛學(xué) 沒法幫你改呵呵,簡(jiǎn)單的會(huì)改
回復(fù)

使用道具 舉報(bào)

板凳
ID:66729 發(fā)表于 2014-10-9 21:03 | 只看該作者
vohang 發(fā)表于 2014-10-9 16:19
剛試了你的程序 也沒顯示出來 ,我也剛學(xué) 沒法幫你改呵呵,簡(jiǎn)單的會(huì)改

我換了其他的程序,,改了接口,現(xiàn)在可以顯示了,,,唉開始以為L(zhǎng)CD是壞的。。呵呵
回復(fù)

使用道具 舉報(bào)

地板
ID:44262 發(fā)表于 2014-10-10 11:37 來自手機(jī) | 只看該作者
能共享一下可用的程序嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:66729 發(fā)表于 2014-10-10 22:01 | 只看該作者
這個(gè)是我的板子上能正常顯示的程序,你也可以改一下接口或者顯示的字體。
//頭文件:
#include <reg52.h>

/********IO引腳定義***********************************************************/
sbit LCD_RS=P2^3;//定義引腳
sbit LCD_RW=P2^4;
sbit LCD_E=P2^5;
sbit PSB =P2^6;                //PSB腳為12864-12系列的串、并通訊功能切換,使用8位并行接口,PSB=1

/********宏定義***********************************************************/
#define LCD_Data P0
#define Busy    0x80 //用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí)

/********函數(shù)聲明*************************************************************/
void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD,BuysC);
unsigned char ReadDataLCD(void);
unsigned char ReadStatusLCD(void);
void LCDInit(void);
void LCDClear(void);
void LCDFlash(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);

/********數(shù)據(jù)定義*************************************************************/
code unsigned char  uctech[] = {"5 1 單片機(jī)實(shí)驗(yàn)板"};
code unsigned char  net[] = {"lydz8.taobao.com"};
code unsigned char  mcu[] = {"自學(xué)單片機(jī)的首選"};
code unsigned char  qq[] = {"  QQ: 52927029  "};

/***********主函數(shù)開始********************************************************/
void main(void)
{
        Delay400Ms();         //啟動(dòng)等待,等LCD講入工作狀態(tài)
        LCDInit();                 //LCM初始化
        Delay5Ms();         //延時(shí)片刻(可不要)
        while(1){
                LCDClear();
                DisplayListChar(0,1,uctech);        //顯示字庫(kù)中的中文數(shù)字
                DisplayListChar(0,2,net);                //顯示字庫(kù)中的中文數(shù)字
                DisplayListChar(0,3,mcu);                //顯示字庫(kù)中的中文
                DisplayListChar(0,4,qq);                //顯示字庫(kù)中的中文數(shù)字
                Delay400Ms();
                Delay400Ms();
                Delay400Ms();
                Delay400Ms();
                LCDFlash();                                                //閃爍效果
        }
}

/***********寫數(shù)據(jù)********************************************************/
void WriteDataLCD(unsigned char WDLCD)
{
        ReadStatusLCD(); //檢測(cè)忙
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_Data = WDLCD;
        LCD_E = 1;
        LCD_E = 1;
        LCD_E = 0;
}

/***********寫指令********************************************************/
void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
{
        if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_Data = WCLCD;
        LCD_E = 1;
        LCD_E = 1;
        LCD_E = 0;  
}

/***********讀數(shù)據(jù)********************************************************/
unsigned char ReadDataLCD(void)
{
        unsigned char LCDDA;
        LCD_RS = 1;
        LCD_RW = 1;
        LCD_E = 1;
        LCD_E = 1;
        LCDDA=LCD_Data;
        LCD_E = 0;
        return(LCDDA);
}

/***********讀狀態(tài)*******************************************************/
unsigned char ReadStatusLCD(void)
{
        LCD_Data = 0xFF;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_E = 1;
        LCD_E = 1;
        while (LCD_Data & Busy); //檢測(cè)忙信號(hào)       
        LCD_E = 0;
        return(1);
}

/***********初始化********************************************************/
void LCDInit(void)
{
        WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
        WriteCommandLCD(0x01,1); //顯示清屏
        WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
        WriteCommandLCD(0x0C,1); // 顯示開及光標(biāo)設(shè)置
}

/***********清屏********************************************************/       
void LCDClear(void)
{
        WriteCommandLCD(0x01,1); //顯示清屏
        WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置
        WriteCommandLCD(0x30,1); // 顯示開及光標(biāo)設(shè)置
}

/***********閃爍效果********************************************************/
void LCDFlash(void)
{
        WriteCommandLCD(0x08,1); //顯示清屏
        Delay400Ms();
        WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
        Delay400Ms();
        WriteCommandLCD(0x08,1); //顯示清屏
        Delay400Ms();
        WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
        Delay400Ms();
        WriteCommandLCD(0x08,1); //顯示清屏
        Delay400Ms();
}

/***********按指定位置顯示一個(gè)字符*******************************************/       
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
        if(Y<1)
                Y=1;
        if(Y>4)
                Y=4;
        X &= 0x0F;                         //限制X不能大于16,Y不能大于1
        switch(Y){
        case 1:X|=0X80;break;
        case 2:X|=0X90;break;
        case 3:X|=0X88;break;
        case 4:X|=0X98;break;
        }
        WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
        WriteDataLCD(DData);
}

/***********按指定位置顯示一串字符*****************************************/
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
        unsigned char ListLength,X2;
        ListLength = 0;
        X2=X;
        if(Y<1)
                Y=1;
        if(Y>4)
                Y=4;
        X &= 0x0F;                                 //限制X不能大于16,Y在1-4之內(nèi)
        switch(Y){
        case 1:X2|=0X80;break;        //根據(jù)行數(shù)來選擇相應(yīng)地址
        case 2:X2|=0X90;break;
        case 3:X2|=0X88;break;
        case 4:X2|=0X98;break;
        }
        WriteCommandLCD(X2, 1);         //發(fā)送地址碼
          while (DData[ListLength]>=0x20){ //若到達(dá)字串尾則退出
                   if (X <= 0x0F){                         //X坐標(biāo)應(yīng)小于0xF
                     WriteDataLCD(DData[ListLength]);
                     ListLength++;
                         X++;
                         Delay5Ms();
            }
          }
}

/***********短延時(shí)********************************************************/
void Delay5Ms(void)
{
        unsigned int TempCyc = 5552;
        while(TempCyc--);
}

/***********長(zhǎng)延時(shí)********************************************************/
void Delay400Ms(void)
{
        unsigned char TempCycA = 5;
        unsigned int TempCycB;
        while(TempCycA--){
                  TempCycB=7269;
                  while(TempCycB--);
        }
}
回復(fù)

使用道具 舉報(bào)

6#
ID:66729 發(fā)表于 2014-10-10 22:03 | 只看該作者
HEX文件

評(píng)分

參與人數(shù) 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:67992 發(fā)表于 2014-11-5 22:57 | 只看該作者
程序一點(diǎn)問題都沒有,只改了3根控制線,正常顯示。

評(píng)分

參與人數(shù) 1威望 +50 收起 理由
admin + 50

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:66840 發(fā)表于 2014-11-6 08:35 | 只看該作者
程序里由很多沒加分號(hào)
回復(fù)

使用道具 舉報(bào)

9#
ID:68253 發(fā)表于 2014-11-8 21:26 | 只看該作者
是你接口沒整清楚吧
回復(fù)

使用道具 舉報(bào)

10#
ID:66729 發(fā)表于 2014-11-15 19:38 | 只看該作者
wyy450y 發(fā)表于 2014-11-8 21:26
是你接口沒整清楚吧

已經(jīng)正常,換個(gè)程序就好了。。呵呵
回復(fù)

使用道具 舉報(bào)

11#
ID:109647 發(fā)表于 2016-3-19 10:39 | 只看該作者
dgahz 發(fā)表于 2014-11-5 22:57
程序一點(diǎn)問題都沒有,只改了3根控制線,正常顯示。

你好  我也是這個(gè)程序  出的問題  請(qǐng)問您改了哪三根控制線?
回復(fù)

使用道具 舉報(bào)

12#
ID:147415 發(fā)表于 2017-9-7 16:16 | 只看該作者
rst沒有強(qiáng)制復(fù)位一次
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久成人一区二区三区 | 欧美精品网站 | 一区二区三区不卡视频 | 青青草视频网站 | 欧美老少妇一级特黄一片 | 精品久久久一区二区 | 国产一二三区精品视频 | 日韩中文字幕 | 国产在视频一区二区三区吞精 | 成人a视频片观看免费 | 一区二区三区四区视频 | 国产一区二区三区视频 | 欧美精品乱码久久久久久按摩 | 毛片网站在线观看视频 | 国产一区在线免费观看视频 | 国产欧美在线一区二区 | 欧洲一级黄 | 久久久国产精品一区 | 午夜精品一区二区三区在线视频 | 播放一级毛片 | 亚洲天堂色 | 亚洲 中文 欧美 日韩 在线观看 | 国产国拍亚洲精品av | 久久久看| 一区二区三区欧美在线 | 九九av| 国产高清一区二区 | 国产精品网页 | 9久久婷婷国产综合精品性色 | 成人性生交大免费 | 精品视频网 | 日韩精品一区二区三区在线观看 | 黄色一级大片在线免费看产 | 欧美日韩在线成人 | 国产成人精品一区二区 | 精品亚洲一区二区 | 精品国产乱码久久久久久久久 | 欧美午夜一区二区三区免费大片 | 久久亚洲国产精品 | 国产在线视频一区二区 | 久草欧美 |