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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4322|回復: 8
打印 上一主題 下一主題
收起左側

單片機開發板LCD12864 st7565 的顯示問題,只顯示不會亮,不顯示任何內容

[復制鏈接]
跳轉到指定樓層
樓主
    //這是st7565.c文件

        #include"st7565.h"

        /*******************************************************************************

        * 函 數 名         : LCD12864_WriteCmd

        * 函數功能                   : 寫入一個命令到12864

        * 輸    入         : cmd

        * 輸    出         : 無

        *******************************************************************************/

        void LcdSt7565_WriteCmd(cmd)

        {

                LCD12864_CS = 0;           //chip select,打開片選

                LCD12864_RD = 1;           //disable read,讀失能        

                LCD12864_RS = 0;       //select command,選擇命令

                LCD12864_RW = 0;       //select write,選擇寫模式

                _nop_();

                _nop_();

                DATA_PORT = cmd; //put command,放置命令

                _nop_();

                _nop_();

                LCD12864_RW = 1;           //command writing ,寫入命令

        }

        /*******************************************************************************

        * 函 數 名         : LcdSt7565_WriteData

        * 函數功能                   : 寫入一個數據到12864

        * 輸    入         : dat

        * 輸    出         : 無

        *******************************************************************************/

        void LcdSt7565_WriteData(dat)

        {        

                LCD12864_CS = 0;           //chip select,打開片選

                LCD12864_RD = 1;           //disable read,讀失能        

                LCD12864_RS = 1;       //select data,選擇數據

                LCD12864_RW = 0;       //select write,選擇寫模式

                _nop_();

                _nop_();

                DATA_PORT = dat;       //put data,放置數據

                _nop_();

                _nop_();

                LCD12864_RW = 1;           //data writing,寫數據

        }

        /*******************************************************************************

        * 函 數 名         : LCD12864_Init

        * 函數功能                   : 初始化12864

        * 輸    入         : 無

        * 輸    出         : 無

        * 說    明         : LCD12864的命令指令可以查看例程文件夾下的《ST7565p數據手冊》

        *                  * 的第51頁的位置。

        *******************************************************************************/

        void Lcd12864_Init()

        {

                uchar i;

                LCD12864_RSET = 0;

                for (i=0; i<100; i++);

                LCD12864_CS = 0;

                LCD12864_RSET = 1;

                //----------------Star Initial Sequence-------//

                //------程序初始化設置,具體命令可以看文件夾下---//

                //--軟件初始化--//

                LcdSt7565_WriteCmd(0xE2);  //reset

                for (i=0; i<100; i++);           //延時一下

                //--表格第8個命令,0xA0段(左右)方向選擇正常方向(0xA1為反方向)--//

                LcdSt7565_WriteCmd(0xA1);  //ADC select segment direction

                //--表格第15個命令,0xC8普通(上下)方向選擇選擇反向,0xC0為正常方向--//

                LcdSt7565_WriteCmd(0xC8);  //Common direction

                //--表格第9個命令,0xA6為設置字體為黑色,背景為白色---//

                //--0xA7為設置字體為白色,背景為黑色---//

                LcdSt7565_WriteCmd(0xA6);  //reverse display

                //--表格第10個命令,0xA4像素正常顯示,0xA5像素全開--//

                LcdSt7565_WriteCmd(0xA4);  //normal display

                //--表格第11個命令,0xA3偏壓為1/7,0xA2偏壓為1/9--//

                LcdSt7565_WriteCmd(0xA2);  //bias set 1/9

                //--表格第19個命令,這個是個雙字節的命令,0xF800選擇增壓為4X;--//

                //--0xF801,選擇增壓為5X,其實效果差不多--//        

                LcdSt7565_WriteCmd(0xF8);  //Boost ratio set

                LcdSt7565_WriteCmd(0x01);  //x4

                //--表格第18個命令,這個是個雙字節命令,高字節為0X81,低字節可以--//

                //--選擇從0x00到0X3F。用來設置背景光對比度。---/

                LcdSt7565_WriteCmd(0x81);  //V0 a set

                LcdSt7565_WriteCmd(0x23);

                //--表格第17個命令,選擇調節電阻率--//

                LcdSt7565_WriteCmd(0x25);  //Ra/Rb set

                //--表格第16個命令,電源設置。--//

                LcdSt7565_WriteCmd(0x2F);

                for (i=0; i<100; i++);

                //--表格第2個命令,設置顯示開始位置--//

                LcdSt7565_WriteCmd(0x40);  //start line

                //--表格第1個命令,開啟顯示--//

                LcdSt7565_WriteCmd(0xAF);  // display on

                for (i=0; i<100; i++);

        }

        /*******************************************************************************

        * 函 數 名         : LCD12864_ClearScreen

        * 函數功能                   : 清屏12864

        * 輸    入         : 無

        * 輸    出         : 無

        *******************************************************************************/

        void Lcd12864_ClearScreen(void)

        {

                uchar i, j;

                for(i=0; i<8; i++)

                {

                        //--表格第3個命令,設置Y的坐標--//

                        //--Y軸有64個,一個坐標8位,也就是有8個坐標--//

                        //所以一般我們使用的也就是從0xB0到0x07,就夠了--//        

                        LcdSt7565_WriteCmd(0xB0+i);

                        //--表格第4個命令,設置X坐標--//

                        //--當你的段初始化為0xA1時,X坐標從0x10,0x04到0x18,0x04,一共128位--//

                        //--當你的段初始化為0xA0時,X坐標從0x10,0x00到0x18,0x00,一共128位--//

                        //--在寫入數據之后X坐標的坐標是會自動加1的,我們初始化使用0xA0所以--//

                        //--我們的X坐標從0x10,0x00開始---//

                        LcdSt7565_WriteCmd(0x10);

                        LcdSt7565_WriteCmd(0x04);                                                           

                        //--X軸有128位,就一共刷128次,X坐標會自動加1,所以我們不用再設置坐標--//

                        for(j=0; j<128; j++)

                        {

                                LcdSt7565_WriteData(0x00);  //如果設置背景為白色時,清屏選擇0XFF

                        }

                }

        }

        /*******************************************************************************

        * 函 數 名         : LCD12864_Write16CnCHAR

        * 函數功能                   : 在12864上面書寫16X16的漢字

        * 輸    入         : x, y, cn

        * 輸    出         : 無

        * 說    明                   : 該函數可以直接書寫字符串,但是書寫是從右到左,所以輸入的時

        *                  * 侯注意輸入。漢字的取模方式請觀看文件夾下的《漢字取模軟件的

        *                  * 使用說明》

        *******************************************************************************/

        #ifdef  CHAR_CODE

        #include"charcode.h"

        uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)

        {

                uchar j, x1, x2, wordNum;

                //--Y的坐標只能從0到7,大于則直接返回--//

                if(y > 7)

                {

                        return 0;

                }

                //--X的坐標只能從0到128,大于則直接返回--//

                if(x > 128)

                {

                        return 0;

                }

                y += 0xB0;           //求取Y坐標的值

                //--設置Y坐標--//

                LcdSt7565_WriteCmd(y);

                while ( *cn != '\0')         //在C語言中字符串結束以‘\0’結尾

                {        

                        //--設置Y坐標--//

                        LcdSt7565_WriteCmd(y);

                        x1 = (x >> 4) & 0x0F;   //由于X坐標要兩句命令,分高低4位,所以這里先取出高4位

                        x2 = x & 0x0F;          //去低四位

                        //--設置X坐標--//

                        LcdSt7565_WriteCmd(0x10 + x1);   //高4位

                        LcdSt7565_WriteCmd(0x04 + x2);        //低4位

                        for (wordNum=0; wordNum<50; wordNum++)

                        {

                            //--查詢要寫的字在字庫中的位置--//

                                if ((CN16CHAR[wordNum].Index[0] == *cn)

                                     &&(CN16CHAR[wordNum].Index[1] == *(cn+1)))

                                {

                                        for (j=0; j<32; j++) //寫一個字

                                        {               

                                                if (j == 16)         //由于16X16用到兩個Y坐標,當大于等于16時,切換坐標

                                                {

                                                        //--設置Y坐標--//

                                                           LcdSt7565_WriteCmd(y + 1);

                                                        //--設置X坐標--//

                                                        LcdSt7565_WriteCmd(0x10 + x1);   //高4位

                                                        LcdSt7565_WriteCmd(0x04 + x2);        //低4位

                                                }

                                                LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);

                                        }

                                        x += 16;

                                }//if查到字結束               

                        } //for查字結束        

                        cn += 2;

                }        //while結束

                return 1;

        }

        #endif

    //這是main.c文件

        #include<reg51.h>

        #include"st7565.h"

        //---聲明一個全局變量---//

        void Delay10ms(unsigned int c);

        /*******************************************************************************

        * 函 數 名         : main

        * 函數功能                   : 主函數

        * 輸    入         : 無

        * 輸    出         : 無

        *******************************************************************************/

        void main()

        {

                uchar i = 128;

                Lcd12864_Init();

                Lcd12864_ClearScreen();

                while (1)

                {

                        for (i=0; i<8; i += 2)

                        {

                                Lcd12864_ClearScreen();

                                //--由于這個函數顯示方向正好相反--//

                                Lcd12864_Write16CnCHAR(0, i, "司公限有技科中普");

                                Delay10ms(100);

                        }

                }

        }

        /*******************************************************************************

        * 函 數 名         : Delay10ms

        * 函數功能                   : 延時函數,延時10ms

        * 輸    入         : 無

        * 輸    出         : 無

        *******************************************************************************/

        void Delay10ms(unsigned int c)   //誤差 0us

        {

            unsigned char a,b;

            for(;c>0;c--)

                for(b=38;b>0;b--)

                    for(a=130;a>0;a--);

        }





    求求大家看下為啥我的只亮不顯示,兩天了救救孩子吧

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

使用道具 舉報

沙發
ID:880867 發表于 2021-2-10 12:17 | 只看該作者
程序用的是賣家給的,pz開發版
回復

使用道具 舉報

板凳
ID:390416 發表于 2021-2-10 18:59 | 只看該作者
LCD12864中文資料包 容易看明白 http://www.zg4o1577.cn/bbs/dpj-200462-1.html
回復

使用道具 舉報

地板
ID:97554 發表于 2021-2-10 20:48 | 只看該作者
普中的1602程序不兼容一般的屏,它自帶的可以。12864不知道什么情況,你可以著重檢查下引腳是否兼容,其次檢查一下V0電壓是否給夠,1602和2004的V0只需要零點幾伏,12864的可能需要4.5V左右。如果不是以上問題,那就不知道是否為不是普中配套的12864和顯示程序是否一致。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:97554 發表于 2021-2-12 23:40 | 只看該作者
晚上有時間又看了下代碼,順便學習一下,今天白天也在折騰ST7565的12864,不過是串口的。今天只是折騰出了圖片,沒有字符和漢字。

但是,了解到st7565似乎并沒有字庫 ,所以考慮樓主這程序應該不是ST7565的,所以看到主程序的時候發現
Lcd12864_Write16CnCHAR(0, i, "司公限有技科中普");
這句似乎根本無法實現,這ST7565要顯示漢字至少應該取模自己建字庫才可以。

所以,作為一個沒有入門的門外漢,還是覺得開發板就是一個坑,我也買過兩塊開發板,一塊郭天祥的,一塊普中的。我是電子愛好者,對于C語言毫無基礎,郭天祥的教程卻是針對在校大學生,至少對于C語言有些許了解的,所以其在講解過程中對于我熟悉的硬件講解過多,而且不完全正確。對于我需要學的編程過程他講的似乎有些草率。

后來又買了一塊普中68000,不說講解問題如何,只說后來的學習過程中,發現這種集成式的開發板根本不考慮初學者對于硬件和程序的認知,就比如普中的板子,帶的一塊1602液晶,用他帶的液晶和例程可以點亮,但是換一塊大眾的1602就完蛋了,大眾的1602驅動程序也點不亮普中的1602液晶。這就是開發板的坑,初學者很容易掉進這些坑里。

今天找參考資料的時候又翻了下普中的資料,結果發現我買板子時候沒給帶的12864他們居然不止一個版本,而且都是極其小眾的東西,不知何故。這樣的東西要想舉一反三頗有難度。

這兩年,在51論壇混倒是學到了以前看無數遍教程都沒有學到的知識總量,也有些自己的學習體會。單片機學習不能再搞開發板,買兩片最小系統,一些外設的功能模塊,比如這些液晶,還有什么時鐘模塊,ADC模塊啥的,自己連線自己找相關程序一遍遍的試,試錯的過程就是學習的過程。經常在51上看看別人遇到的問題,那行許就是自己可能遇到的問題,然后幫忙去尋找一下答案,找不到,解決不了,就收藏一下等著大佬給出指引,然后也一起學習一下,這就是提高入門的最佳方案了,至少我是這么覺得的。

最后,樓主還是找7565的顯示漢字字符的例程去參考下,或者找畫線或者填充方案先試下屏的好壞,連線的正確與否,初始化程序是否對應,硬件是否正確等都可以實現。
Lcd12864_Write16CnCHAR(0, i, "司公限有技科中普");

把上邊這一句前邊加 "//” 如下:
//Lcd12864_Write16CnCHAR(0, i, "司公限有技科中普");

如果其他都正常的情況下,應該是滿屏都是白的,因為他清屏命令是反向顯示的,所以會滿屏像素點全白,如果沒有全白,那么檢查IO口是否一一對應,以及對比度電壓是否正確。


普中68000開發板的資料里有三個例程對應四種12864平,一種常用的,是20腳并口帶字庫的屏,主控可能是ST7920的。舊12864是一塊OLED屏,用的SPI驅動,新12864就是兩塊COG,我也看到了你貼的程序。有些屏在轉接板上帶個8腳的存儲芯片做的字庫,那種可以不用字模顯示漢字,但是普中的兩片我好像沒有看見有字庫存儲芯片。

下圖為本站壇友貼的帶字庫的ST7565的模塊的圖




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:97554 發表于 2021-2-13 17:06 | 只看該作者
看的不夠仔細,charcode.h就是那幾個漢字的字庫。那么只剩下連線是直插還是杜邦線的問題了
回復

使用道具 舉報

7#
ID:880867 發表于 2021-2-14 16:41 | 只看該作者
楊雪飛 發表于 2021-2-13 17:06
看的不夠仔細,charcode.h就是那幾個漢字的字庫。那么只剩下連線是直插還是杜邦線的問題了

對,但是我幾天還是沒搞出來,難受
回復

使用道具 舉報

8#
ID:584814 發表于 2021-2-15 00:06 | 只看該作者
普中的板子,同型號的我有兩塊,配的1602都不一樣,原本的程序只能點亮其中之一,呵呵
開發板全是坑,從硬件到配套軟件都一樣,普中配的1602一般是壓倉的山寨手機屏,就是便宜考慮
所以,你可以試一下普中各個開發板的配套程序,一般會找到可用的,同時可以本壇搜索一下,可能也找得到
板上用不同的單片機或晶振都可能需要對程序中的延時進行調整,祝好運
回復

使用道具 舉報

9#
ID:801056 發表于 2022-2-19 10:10 | 只看該作者
我把普中的12864顯示程序移植到lcp1114上了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费观看av | 色婷婷久久久久swag精品 | 国产小视频在线观看 | 四虎影音 | 黄色片网站在线观看 | 国产一级黄色网 | 日韩在线视频精品 | 欧美激情一区二区三区 | 国产成人精品一区二区三区四区 | 成人羞羞国产免费视频 | 久久久久九九九女人毛片 | 91九色在线观看 | 欧美综合久久 | 国产伦一区二区三区 | 天天操网 | 91精品国产综合久久久亚洲 | 精品av| www.色.com | 国产欧美精品 | 日日操视频 | 精品国产一区二区三区成人影院 | 亚洲欧美精品国产一级在线 | 中文字幕97 | 亚洲免费av一区 | 国产99视频精品免视看9 | 日本a视频 | 人人干在线视频 | 国产做a爱免费视频 | 激情黄色在线观看 | 日日操视频 | 亚洲日韩中文字幕一区 | 国产精品久久久久久久久久久久久 | 日韩中文字幕在线播放 | 日韩精品一区二区三区免费视频 | 日韩一区二区三区视频 | 国产黄色小视频 | av大片 | 91精品国产91久久久 | 91直接看| 久久久久久久久久久久一区二区 | 爱综合 |