2728|3

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

12864液晶屏显示问题 [复制链接]

为什么我的proteus仿真出来是这样的
1、 LCD12864显示驱动程序
//--------------------------LCD_12864.c-------------------------
//        名称 :12864LCD显示驱动程序(不带字库)
//-----------------------------------------------------------------
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define LCD_DB_PORT P0          // 液晶数据线端口DB0-DB7
#define LCD_START_ROW 0xc0         //起始行命令
#define LCD_PAGE 0xB8                 //         页指令
#define LCD_COL  0x40                 //          列指令
bit Reverse_Display=0;//是否反相显示(白底黑字/黑底白字)
//液晶引脚定义
sbit DI=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit RST=P2^5;
//---------------------------------------------------------------
//        检查LCD是否忙
//--------------------------------------------------------------
bit LCD_IS_BUSY()
{
          LCD_DB_PORT=0xFF;
        RW=1;
        _nop_();
        DI=0;
        E=1;
        _nop_();
        E=0;
        return (bit)(P0&0x80);
}
//---------------------------------------------------------------
//        向LCD写入一个字节(一般用于发送命令)
//--------------------------------------------------------------
void Write_Byte_To_LCD(uchar comand)
{
   while(LCD_IS_BUSY());  
   LCD_DB_PORT=0xFF;
   RW=0;
   _nop_();
   DI=0;
   LCD_DB_PORT=comand;
   E=1;
   _nop_();
   E=0;
}
//---------------------------------------------------------------
//        向LCD写入数据
//--------------------------------------------------------------
void Write_Data_To_LCD(uchar dat)
{
   while(LCD_IS_BUSY());  
   LCD_DB_PORT=0xFF;
   RW=0;
   _nop_();
   DI=1;
   if(!Reverse_Display)           //根据Reverse_Display决定是否反相显示
       LCD_DB_PORT=dat;
   else
      LCD_DB_PORT=~dat;
   E=1;
   _nop_();
   E=0;
}
//---------------------------------------------------------------
//        初始化LCD
//--------------------------------------------------------------
void LCD12864_Initialization()
{
  CS1=1;
  CS2=1;
  Write_Byte_To_LCD(0x38);
  Write_Byte_To_LCD(0x0F);
  Write_Byte_To_LCD(0x01);
  Write_Byte_To_LCD(0x06);
  Write_Byte_To_LCD(LCD_START_ROW);
}
//---------------------------------------------------------------
//        通用显示函数  从第P页第L列显示W个字节数据,具体显示的数据在r所指的数组中
//--------------------------------------------------------------
void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant
{
    uchar i;
        if(L<64)
                  {
                    CS1=1;
                CS2=0;
                        Write_Byte_To_LCD(LCD_PAGE+P);
                        Write_Byte_To_LCD(LCD_COL+L);
                        if(L+W<64)
                          {
                            for(i=0;i
                                   Write_Data_To_LCD(r);
                          }
                        else
                          {
                            for(i=0;i<64-L;i++)
                                          Write_Data_To_LCD(r);
                                CS1=0;
                    CS2=1;
                                Write_Byte_To_LCD(LCD_PAGE+P);
                            Write_Byte_To_LCD(LCD_COL);
                                for(i=64-L;i
                                          Write_Data_To_LCD(r);
                          }
                   }
        else
          {
                    CS1=0;
            CS2=1;
                        Write_Byte_To_LCD(LCD_PAGE+P);
                    Write_Byte_To_LCD(LCD_COL+L-64);
                        for(i=0;i
                                  Write_Data_To_LCD(r);
          }
}
//---------------------------------------------------------------
// 显示一个8×16点阵字符
//--------------------------------------------------------------
void Display_char(uchar P1,uchar L1,uchar *M) reentrant
{
   LCD_Show(P1,L1,8,M);
   LCD_Show(P1+1,L1,8,M+8);
}
//--------------------------------------------------------------------
// 显示一个16×16点阵字符 (汉字上半部分与下半部分分别处在相邻两页中)
//----------------------------------------------------------------------
void Display_Word(uchar P2,uchar L2,uchar *M) reentrant
{                                                                                         
   LCD_Show(P2,L2,16,M);
   LCD_Show(P2+1,L2,16,M+16);
}

QQ图片20131218142240.jpg (37.89 KB, 下载次数: 0)

QQ图片20131218142240.jpg
此帖出自51单片机论坛

最新回复

cs1 cs2是控制左右屏的  是不是写反了  详情 回复 发表于 2013-12-24 09:56

点评

我没用过仿真,你可以试试实物连接显示什么  详情 回复 发表于 2013-12-18 20:33
点赞 关注
 

回复
举报

577

帖子

9

TA的资源

纯净的硅(中级)

沙发
 

回复 楼主tyblaji 的帖子

我没用过仿真,你可以试试实物连接显示什么
此帖出自51单片机论坛
 
个人签名哈喽,我是卡索KaSuo~~
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

板凳
 
拿个真东西吧,真的也不需要多少钱的,
此帖出自51单片机论坛
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

4
 
cs1 cs2是控制左右屏的  是不是写反了
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表