找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1780|回复: 4
打印 上一主题 下一主题
收起左侧

谱中科技的12864的液晶显示程序在protues中跑不通

[复制链接]
跳转到指定楼层
楼主

程序代码
#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,
};

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

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;

//--定义全局函数--//
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"

/*******************************************************************************
* 函 数 名         : 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


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2019-1-6 20:36 | 只看该作者
单看这仿真的运行情况单片机好似还未载入程序哦
回复

使用道具 举报

板凳
ID:375250 发表于 2019-1-29 22:09 | 只看该作者
没必要那个字符格式是取模还是
回复

使用道具 举报

地板
ID:21069 发表于 2019-1-30 01:05 | 只看该作者
电脑仿真的12864驱动芯片与学习板用上12864驱动芯片不是一样的,而却种类也多,更何况你上面用的是TG13650.

评分

参与人数 1黑币 +35 收起 理由
areyouok + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:21069 发表于 2019-1-30 01:07 | 只看该作者
驱动芯片完全不是一样的,LCD12864电脑上能仿真的开发板上是用不了的,同样开发板能用电脑也不能仿真

评分

参与人数 1黑币 +35 收起 理由
shuisheng + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表