找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15W4K58S4與1602,12864顯示失敗解決方案之一

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:586048 發(fā)表于 2019-7-23 20:59 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我遇到的是時(shí)序圖那個(gè)時(shí)間不對(duì)應(yīng),因?yàn)?5w快89  6——12倍,所以那些時(shí)間也要快6——12倍,引腳也要相應(yīng)的看原理圖改。

下面是我的問題:
我的屏幕很暗,調(diào)了板子上的可調(diào)電阻還是很暗,又沒有大佬幫幫我





延時(shí)測試.zip

699.63 KB, 下載次數(shù): 28

1602與stc15w

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

使用道具 舉報(bào)

沙發(fā)
ID:586048 發(fā)表于 2019-7-23 20:59 | 只看該作者
/*
**********************************************************************
*                         頭文件包含
**********************************************************************
*/
#define         MAIN_Fosc                12000000UL        //定義主時(shí)鐘  22.1184M晶振
//u8,u16,u32已在"STC15Fxxxx.h"定義
#include "STC15Fxxxx.h"

/*
**********************************************************************
*                         本地宏定義
**********************************************************************
*/
/*
void main(void)
{
        P0M1 = 0;        P0M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P1M1 = 0;        P1M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P2M1 = 0;        P2M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P3M1 = 0;        P3M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P4M1 = 0;        P4M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P5M1 = 0;        P5M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P6M1 = 0;        P6M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P7M1 = 0;        P7M0 = 0;        //設(shè)置為準(zhǔn)雙向口
       
        while(1);
}*/
/*
RS  RW E 引腳要自己定義
因?yàn)?5W系列快89系列 6——12倍,時(shí)序圖上面的時(shí)間也要
相應(yīng)的加倍,具體多少要具體測試,我的大概快了8倍(IAP15W4K584S)
可以作為參考
*/

sbit LCD_RS=P5^0;//定義引腳
sbit LCD_RW=P5^1;
sbit LCD_E=P5^2;
sbit ledL = P5^5;
#define LCD_Data P4
#define Busy    0x80 //用于檢測LCD狀態(tài)字中的Busy標(biāo)識(shí)



void WriteDataLCD(unsigned char WDLCD);
void WriteCommandLCD(unsigned char WCLCD,BuysC);
unsigned char ReadDataLCD(void);
unsigned char ReadStatusLCD(void);
void LCDInit(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);
void Delay4us(void);


unsigned char code uctech[] = {"ic2012.taobao.co"};
unsigned char code net[] = {"Happy every day!"};

void main(void)
{
        P0M1 = 0;        P0M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P1M1 = 0;        P1M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P2M1 = 0;        P2M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P3M1 = 0;        P3M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P4M1 = 0;        P4M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P5M1 = 0;        P5M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P6M1 = 0;        P6M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        P7M1 = 0;        P7M0 = 0;        //設(shè)置為準(zhǔn)雙向口
        //上面這些是必要的,除非用到PWM
       
        ledL = 0;
Delay400Ms(); //啟動(dòng)等待,等LCD講入工作狀態(tài)
LCDInit(); //LCM初始化
Delay5Ms(); //延時(shí)片刻(可不要)

DisplayListChar(0, 0, uctech);
DisplayListChar(0, 5, net);
ReadDataLCD();//測試用句無意義
while(1);{}
       
}

//寫數(shù)據(jù)
void WriteDataLCD(unsigned char WDLCD)
{
ReadStatusLCD(); //檢測忙
LCD_Data = WDLCD;
LCD_RS = 1;
        Delay4us(); //延時(shí)  約4.25微秒
       
LCD_RW = 0;       
        Delay4us(); //延時(shí)
       
LCD_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
        Delay4us();  //延時(shí)
       
LCD_E = 1;
}

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

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

//讀狀態(tài)
unsigned char ReadStatusLCD(void)
{
LCD_Data = 0xFF;
LCD_RS = 0;
        Delay4us();  //延時(shí)
       
LCD_RW = 1;
        Delay4us();  //延時(shí)
       
LCD_E = 0;
        Delay4us(); //約4.25微秒
        Delay4us();        //兩個(gè)約8微秒,自己測試一下
LCD_E = 1;
while (LCD_Data & Busy); //檢測忙信號(hào)
return(LCD_Data);
}

void LCDInit(void) //LCM初始化
{
LCD_Data = 0;
WriteCommandLCD(0x38,0); //三次顯示模式設(shè)置,不檢測忙信號(hào)
Delay5Ms();
WriteCommandLCD(0x38,0);
Delay5Ms();
WriteCommandLCD(0x38,0);
Delay5Ms();

WriteCommandLCD(0x38,1); //顯示模式設(shè)置,開始要求每次檢測忙信號(hào)
WriteCommandLCD(0x08,1); //關(guān)閉顯示
WriteCommandLCD(0x01,1); //顯示清屏
WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
WriteCommandLCD(0x0C,1); // 顯示開及光標(biāo)設(shè)置
}

//按指定位置顯示一個(gè)字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
X |= 0x80; // 算出指令碼
WriteCommandLCD(X, 0); //這里不檢測忙信號(hào),發(fā)送地址碼
WriteDataLCD(DData);
}

//按指定位置顯示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;

  ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
  {
   if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
    {
     DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
     ListLength++;
     X++;
    }
  }
}

//5ms延時(shí)
void Delay5Ms(void)
{
        unsigned char i, j;

        i = 59;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}

//400ms延時(shí)
void Delay400Ms(void)
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 19;
        j = 62;
        k = 43;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
void Delay4us()                //@12.000MHz  精準(zhǔn)延時(shí)4微妙
{
        unsigned char i;

        _nop_();
        _nop_();
        i = 9;   //必須i>=8,大約6微秒(在229——237測試)實(shí)際上是3.9微秒
        while (--i);
}




回復(fù)

使用道具 舉報(bào)

板凳
ID:480680 發(fā)表于 2019-7-25 11:22 | 只看該作者
電位器調(diào)節(jié)顯示對(duì)比度!沒有顯示有三種能:
1、顯示屏壞了
2、信號(hào)線沒有連接好
3、程序問題
回復(fù)

使用道具 舉報(bào)

地板
ID:586048 發(fā)表于 2019-7-26 14:34 | 只看該作者
周濤1331 發(fā)表于 2019-7-25 11:22
電位器調(diào)節(jié)顯示對(duì)比度!沒有顯示有三種能:
1、顯示屏壞了
2、信號(hào)線沒有連接好

顯示屏沒有壞,信號(hào)線也沒有問題,如果是程序問題會(huì)出在那里?
電位器也調(diào)過了,也是沒有什么用,求大佬解答
回復(fù)

使用道具 舉報(bào)

5#
ID:586048 發(fā)表于 2019-7-26 14:38 | 只看該作者
周濤1331 發(fā)表于 2019-7-25 11:22
電位器調(diào)節(jié)顯示對(duì)比度!沒有顯示有三種能:
1、顯示屏壞了
2、信號(hào)線沒有連接好

可能說的不是很清楚,程序能過正常顯示,但是屏幕很暗
回復(fù)

使用道具 舉報(bào)

6#
ID:419264 發(fā)表于 2019-7-27 20:55 | 只看該作者
那個(gè)P5^5改為P5^4
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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