找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2368|回復: 4
收起左側

譜中科技的12864的液晶顯示程序在protues中跑不通

[復制鏈接]
ID:439421 發(fā)表于 2019-1-6 19:27 | 顯示全部樓層 |閱讀模式
QQ截圖20190106192556.png
程序代碼
#include<reg51.h>
#include"st7565.h"
//---存一個圖片--//
unsigned char code pic[]={
/*--  寬度x高度=128x64  --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,
0x57,0x53,0x57,0x07,0xFF,0x0F,0xE3,0x0F,0xEF,0xFF,0xEF,0xEF,0xEF,0x03,0xEF,0xEF,
0xEF,0x0F,0xE3,0x0F,0xEF,0xFF,0x77,0x77,0x17,0x57,0x57,0x53,0x57,0x57,0x17,0x77,
0x77,0xFF,0xFB,0x8B,0xAB,0x83,0xAB,0x83,0xAB,0x8B,0xFF,0x37,0xDB,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,
0x57,0x53,0x57,0x07,0xFF,0x0F,0xE3,0x0F,0xEF,0xFF,0xEF,0xEF,0xEF,0x03,0xEF,0xEF,
0xEF,0x0F,0xE3,0x0F,0xEF,0xFF,0x77,0x77,0x17,0x57,0x57,0x53,0x57,0x57,0x17,0x77,
0x77,0xFF,0xFB,0x8B,0xAB,0x83,0xAB,0x83,0xAB,0x8B,0xFF,0x37,0xDB,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xF5,
0xFB,0xF4,0xEF,0xE0,0xFF,0xF4,0xFB,0xF4,0xEF,0xFF,0xE0,0xEE,0xEE,0xEE,0xEE,0xE0,
0xFF,0xF4,0xFB,0xF5,0xEC,0xFF,0xE2,0xEF,0xEF,0xE1,0xFD,0xFD,0xFD,0xF9,0xF7,0xEF,
0xEE,0xFF,0xEB,0xF2,0xFA,0xE2,0xEA,0xFA,0xF2,0xEB,0xFF,0xE0,0xFD,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEE,0xF5,
0xFB,0xF4,0xEF,0xE0,0xFF,0xF4,0xFB,0xF4,0xEF,0xFF,0xE0,0xEE,0xEE,0xEE,0xEE,0xE0,
0xFF,0xF4,0xFB,0xF5,0xEC,0xFF,0xE2,0xEF,0xEF,0xE1,0xFD,0xFD,0xFD,0xF9,0xF7,0xEF,
0xEE,0xFF,0xEB,0xF2,0xFA,0xE2,0xEA,0xFA,0xF2,0xEB,0xFF,0xE0,0xFD,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xE3,0x81,0x81,0xE3,0xFF,0xFF,0xDF,0xDD,0xD5,0x4D,0x9D,0x00,
0x9D,0x4D,0xD5,0xDD,0xDF,0xFF,0xFB,0xFB,0x00,0xFB,0xFB,0x9B,0xEB,0xFB,0x0F,0xE9,
0xEE,0xFF,0xEF,0xEE,0x2A,0xAA,0xAA,0xA8,0xA2,0x0A,0xAA,0x6E,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xE3,0x81,0x81,0xE3,0xFF,0xFF,0xDF,0xDD,0xD5,0x4D,0x9D,0x00,
0x9D,0x4D,0xD5,0xDD,0xDF,0xFF,0xFB,0xFB,0x00,0xFB,0xFB,0x9B,0xEB,0xFB,0x0F,0xE9,
0xEE,0xFF,0xEF,0xEE,0x2A,0xAA,0xAA,0xA8,0xA2,0x0A,0xAA,0x6E,0xEF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFF,0xFF,0xFF,0xFD,0xFD,0xFE,0xFF,0x7F,0x78,
0x7F,0x7F,0xFE,0x7D,0x7D,0xBF,0xBB,0xBB,0xBA,0xBA,0x3A,0xBB,0xBB,0xBD,0xBE,0x7D,
0x7B,0xBF,0xBF,0xBF,0x78,0xFA,0xFA,0xFA,0xFA,0xF8,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFF,0xFF,0xFF,0xFD,0xFD,0xFE,0xFF,0x7F,0x78,
0x7F,0x7F,0xFE,0x7D,0x7D,0xBF,0xBB,0xBB,0xBA,0xBA,0x3A,0xBB,0xBB,0xBD,0xBE,0x7D,
0x7B,0xBF,0xBF,0xBF,0x78,0xFA,0xFA,0xFA,0xFA,0xF8,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x87,0xF8,0xFF,0xFF,
0xFF,0x7F,0x7E,0xBD,0xCF,0x73,0xBF,0xDB,0xDD,0xBD,0x7B,0xFE,0x7F,0xBB,0xDD,0xDD,
0xBB,0x7F,0xE7,0x9F,0x5F,0xBE,0x7D,0x73,0xEF,0x9F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x87,0xF8,0xFF,0xFF,
0xFF,0x7F,0x7E,0xBD,0xCF,0x73,0xBF,0xDB,0xDD,0xBD,0x7B,0xFE,0x7F,0xBB,0xDD,0xDD,
0xBB,0x7F,0xE7,0x9F,0x5F,0xBE,0x7D,0x73,0xEF,0x9F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFD,0x0D,0xF2,0xFC,
0xFE,0xFF,0xFF,0xEF,0x1F,0x3E,0xDC,0xE8,0xEB,0xED,0xDE,0xD7,0xD6,0xD4,0x68,0x6B,
0xED,0xF6,0xF7,0xEF,0x1F,0xFE,0xFD,0xF3,0x0E,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFD,0x0D,0xF2,0xFC,
0xFE,0xFF,0xFF,0xEF,0x1F,0x3E,0xDC,0xE8,0xEB,0xED,0xDE,0xD7,0xD6,0xD4,0x68,0x6B,
0xED,0xF6,0xF7,0xEF,0x1F,0xFE,0xFD,0xF3,0x0E,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC3,0x81,0x3C,0x7E,0xFE,0xFE,0xFD,0xF9,0xFD,0xFE,0xFA,0x66,
0xBD,0x00,0x7E,0xFE,0xFE,0xFD,0xF9,0xFD,0xFE,0xFA,0x66,0xBD,0xC3,0xFF,0xFC,0x73,
0x37,0x2F,0xAF,0xDE,0xDF,0xBF,0xAC,0x9B,0xB7,0xB7,0x6C,0x6C,0x6F,0x6F,0xB6,0xB6,
0xDB,0xCB,0xD5,0xAA,0x2F,0x37,0x7B,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC3,0x81,0x3C,0x7E,0xFE,0xFE,0xFD,0xF9,0xFD,0xFE,0xFA,0x66,
0xBD,0x00,0x7E,0xFE,0xFE,0xFD,0xF9,0xFD,0xFE,0xFA,0x66,0xBD,0xC3,0xFF,0xFC,0x73,
0x37,0x2F,0xAF,0xDE,0xDF,0xBF,0xAC,0x9B,0xB7,0xB7,0x6C,0x6C,0x6F,0x6F,0xB6,0xB6,
0xDB,0xCB,0xD5,0xAA,0x2F,0x37,0x7B,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xF7,0xFB,0xFD,0xFE,0xFF,0xDF,0xDF,0xC1,0xC8,0xDC,
0xFF,0xF8,0xF7,0xEF,0xDF,0xF8,0xF2,0xF2,0xF8,0xFC,0xFE,0xFC,0xFC,0xFE,0xFC,0xF8,
0xF2,0xD2,0xE8,0xF7,0xF8,0xFF,0xDC,0xC8,0xC1,0xC3,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFF,0xFE,0xFC,0xF9,0xF3,0xF7,0xFB,0xFD,0xFE,0xFF,0xDF,0xDF,0xC1,0xC8,0xDC,
0xFF,0xF8,0xF7,0xEF,0xDF,0xF8,0xF2,0xF2,0xF8,0xFC,0xFE,0xFC,0xFC,0xFE,0xFC,0xF8,
0xF2,0xD2,0xE8,0xF7,0xF8,0xFF,0xDC,0xC8,0xC1,0xC3,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,
};

/*******************************************************************************
* 函 數(shù) 名         : main
* 函數(shù)功能                   : 主函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void main(void)
{
        uchar i , j;
        uint n;
        Lcd12864_Init();        //初始化
        Lcd12864_ClearScreen();        //清屏

        for (i=0;i<8;i++)
        {  
            //--設置初始顯示開始位置--//
                LcdSt7565_WriteCmd(0x40);

                //--設置Y坐標--//
                LcdSt7565_WriteCmd(0xB0+i);
               
                //--設置X坐標--//
                LcdSt7565_WriteCmd(0x10);
                LcdSt7565_WriteCmd(0x04);
                for(j=0; j<128; j++)
                {
                        LcdSt7565_WriteData(~pic[n]);
                        n=n+1;
                }
        }
        while (1)
        {
        }
}








//---重定義關鍵詞---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uint unsigned int
#endif

//--定時使用的IO口--//
#define DATA_PORT P0
sbit LCD12864_CS   = P3^2;
sbit LCD12864_RSET = P3^3;
sbit LCD12864_RS   = P2^6;
sbit LCD12864_RW   = P2^7;
sbit LCD12864_RD   = P2^5;

//--定義全局函數(shù)--//
void LcdSt7565_WriteCmd(cmd);
void LcdSt7565_WriteData(dat);
void Lcd12864_Init();
void Lcd12864_ClearScreen(void);
uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn);

#endif





#include"st7565.h"

/*******************************************************************************
* 函 數(shù) 名         : LCD12864_WriteCmd
* 函數(shù)功能                   : 寫入一個命令到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 ,寫入命令
}

/*******************************************************************************
* 函 數(shù) 名         : LcdSt7565_WriteData
* 函數(shù)功能                   : 寫入一個數(shù)據(jù)到12864
* 輸    入         : dat
* 輸    出         : 無
*******************************************************************************/

void LcdSt7565_WriteData(dat)
{        
        LCD12864_CS = 0;           //chip select,打開片選
        LCD12864_RD = 1;           //disable read,讀失能        
        LCD12864_RS = 1;       //select data,選擇數(shù)據(jù)
        LCD12864_RW = 0;       //select write,選擇寫模式
        _nop_();
        _nop_();

        DATA_PORT = dat;       //put data,放置數(shù)據(jù)
        _nop_();
        _nop_();

        LCD12864_RW = 1;           //data writing,寫數(shù)據(jù)
}
/*******************************************************************************
* 函 數(shù) 名         : LCD12864_Init
* 函數(shù)功能                   : 初始化12864
* 輸    入         : 無
* 輸    出         : 無
* 說    明         : LCD12864的命令指令可以查看例程文件夾下的《ST7565p數(shù)據(jù)手冊》
*                  * 的第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個命令,這個是個雙字節(jié)的命令,0xF800選擇增壓為4X;--//
        //--0xF801,選擇增壓為5X,其實效果差不多--//        
        LcdSt7565_WriteCmd(0xF8);  //Boost ratio set
        LcdSt7565_WriteCmd(0x01);  //x4
        
        //--表格第18個命令,這個是個雙字節(jié)命令,高字節(jié)為0X81,低字節(jié)可以--//
        //--選擇從0x00到0X3F。用來設置背景光對比度。---/
        LcdSt7565_WriteCmd(0x81);  //V0 a set
        LcdSt7565_WriteCmd(0x23);

        //--表格第17個命令,選擇調節(jié)電阻率--//
        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++);

}

/*******************************************************************************
* 函 數(shù) 名         : LCD12864_ClearScreen
* 函數(shù)功能                   : 清屏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位--//
                //--在寫入數(shù)據(jù)之后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
                }
        }
}

/*******************************************************************************
* 函 數(shù) 名         : LCD12864_Write16CnCHAR
* 函數(shù)功能                   : 在12864上面書寫16X16的漢字
* 輸    入         : x, y, cn
* 輸    出         : 無
* 說    明                   : 該函數(shù)可以直接書寫字符串,但是書寫是從右到左,所以輸入的時
*                  * 侯注意輸入。漢字的取模方式請觀看文件夾下的《漢字取模軟件的
*                  * 使用說明》
*******************************************************************************/

#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


回復

使用道具 舉報

ID:96682 發(fā)表于 2019-1-6 20:36 | 顯示全部樓層
單看這仿真的運行情況單片機好似還未載入程序哦
回復

使用道具 舉報

ID:375250 發(fā)表于 2019-1-29 22:09 | 顯示全部樓層
沒必要那個字符格式是取模還是
回復

使用道具 舉報

ID:21069 發(fā)表于 2019-1-30 01:05 | 顯示全部樓層
電腦仿真的12864驅動芯片與學習板用上12864驅動芯片不是一樣的,而卻種類也多,更何況你上面用的是TG13650.

評分

參與人數(shù) 1黑幣 +35 收起 理由
areyouok + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:21069 發(fā)表于 2019-1-30 01:07 | 顯示全部樓層
驅動芯片完全不是一樣的,LCD12864電腦上能仿真的開發(fā)板上是用不了的,同樣開發(fā)板能用電腦也不能仿真

評分

參與人數(shù) 1黑幣 +35 收起 理由
shuisheng + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表