原创 图形液晶Proteus仿真(KS0108)

2007-1-22 06:42 6728 9 15 分类: MCU/ 嵌入式

调试笔记:


1、LGM12641BS1R,128×64点阵,内核驱动芯片KS0108,片选端为高电平有效,俺调试了半天,原来两个CS端置零片选失效的缘故(一般片选信号为高电平);


2、Proteus里的LGM12641BS1R仿真模块读状态时不管俺怎么的设置读写时序,返回的状态不是Busy=1就是RST=1,后来干脆把写数据之前的状态查询子程序给删了,结果再次调试——豁得一声霹雳,通了 !(都不知道自己是应该高兴还是……sigh !)


3、先把调试好的模块例程贴上,用过该LGM12641BS1R仿真模块的哪位高人帮偶提点意见,先谢了 !


4、显示模块例程(硬件接线可参看仿真抓图);


/******************************************************************************/
/**
/** 模 块 名: -------------------LCD_Graph.C---------------------------------
/**            -----------------图形液晶显示模块----------------------------*/
/** 功能描述:
/**
/** 创 建 人: huangtiexiong    日期:2006-11-28   */
/** 修 改 人:                  日期:2006-11-28   */
/** 其他说明: 驱动芯片KS0108或兼容芯;
/******************************************************************************/


#include "Includes.h"   //文件包含


/*************************************************
    模块级变量申明                
*************************************************/
static void  LCD_SetX(int8u pageX);
static void  LCD_SetY(int8u colY);
//static int8u  LCD_ReadStatus(void);
static void  LCD_WriteCmd(int8u cmd);
static void  LCD_WriteDat(int8u dat);


static void  LCD_SetStartRow(int8u startRow);



/*************************************************
    子函数定义                 
*************************************************/


/*******************************************************************************
*** 函 数 名: static void LCD_SetX(int8u pageX)
*** 功能描述: 设置页面地址;
*** 全局变量: NO !
*** 输  入: pageX;
*** 输  出: NO !****/
static void LCD_SetX(int8u pageX)
{ pageX %= 8; LCD_WriteCmd(pageX | 0xb8); }


static void LCD_SetY(int8u colY)
{ colY %= 64; LCD_WriteCmd(colY | 0x40); }


//static int8u LCD_ReadStatus(void)
//{
// int8u tmp;
// LCD_EN = 0;
// LCD_DATA = 0xff;// NOP();
// LCD_EN = 1;// LCD_RS = 0;// LCD_RW = 1;
// tmp = LCD_DATA;// LCD_EN = 0;// return tmp;
// }
static void LCD_WriteCmd(int8u cmd)
{
// while(1)
// {
//  if(!(LCD_ReadStatus() & 0x80)) break;
//  }
 LCD_EN = 1; LCD_RS = 0; LCD_RW = 0; LCD_DATA = cmd; NOP();
 LCD_EN = 0; }
static void LCD_WriteDat(int8u dat)
{
// while(1)
// {
//  if(!(LCD_ReadStatus() & 0x80)) break;
//  }
 LCD_EN = 1; LCD_RS = 1; LCD_RW = 0; LCD_DATA = dat; NOP(); LCD_EN = 0; }


static void LCD_SetStartRow(int8u startRow)
{ LCD_WriteCmd(startRow | 0xc0); }


extern void  LCD_Init(void)
{
 LCD_RST = 0; Delay_Xus(100); LCD_RST = 1; Delay_Xms(100);
// while(1)        //是否上电复位完毕;
// {
//  if(!(LCD_ReadStatus() & 0x10)) break;
//  }
 LCD_EN = 0; LCD_CS1 = 1; LCD_CS2 = 1;
 LCD_WriteCmd(0x3f);   //开显示,指令码:0x3f;
 LCD_Clear();      //清屏;
  LCD_SetStartRow(0x00); }


extern void LCD_Clear(void)
{
 int8u i,j;
 for(i=0;i<8;i++){ LCD_SetX(i);     //设置页地址;
  for(j=0;j<64;j++){LCD_WriteDat(0x00);} //显示RAM清零;
  }}


extern void   LCD_Display(int8u x,int8u y,int8u *disp_dat)
{
 int8u i;int8u  j;
 LCD_SetX(x);LCD_SetY(y);
 for(j=0;j<8;j++)
 {for(i=0;i<128;i++){
        if(i>=64){LCD_CS1 = 1; LCD_CS2 = 0;}
       else         {LCD_CS1 = 0; LCD_CS2 = 1;}  
       LCD_SetX(j); LCD_SetY(i%64);
       LCD_WriteDat(disp_dat[j*128+i]); }}}


/*******************************************************************************
****                              End Of File
*******************************************************************************/


5、Proteus仿真抓图:


点击看大图


该仿真为128×64点阵图形显示,图形数据提取方式:纵向取模,字节倒序。

文章评论6条评论)

登录后参与讨论

用户1364249 2008-4-15 13:09

太逗了,天才。东航的飞行员就“复位”了一把。

用户554377 2008-4-7 10:44

呵呵有点扯哈

用户64375 2008-4-3 10:57

好比喻 员工就像这样一个“看门狗”,如果老板定期不给涨工资的话,员工就让项目“复位”

用户18341 2007-12-24 10:31

请问一下,谁知道哪里有卖LGM12641BS1R???

用户1321573 2007-11-22 10:43

有LGM12641BS1R的资料吗?发到lngdcctv@163.com里,最近我在做LCD的驱动,没做出来.E的时序中的1000ms 你是怎么处理的帮个忙谢谢.

用户77921 2007-9-6 23:14

我用proteus 6.7sp3仿真1602LCD时也是加了判读忙时,也是仿真通不过,取消后就正常.不知是为什么了???郁闷哪!

用户1295967 2007-6-15 12:42

我也遇到这个问题 不知道楼主现在解决了没有 是什么原因/

用户68356 2007-3-3 16:44

DI: Data or Instruction,DI=0时为对指令寄存器进行操作,DI=1为对当前寻址的Display RAM进行数据读写;该仿真模块LGM12641BS1R基于KS0108内核,你可以查阅KS0108数据手册获取更详细的说明。

用户68493 2007-1-27 10:32

我也遇到过,想不明白
相关推荐阅读
用户68356 2007-06-10 09:23
canopen
我申请了恒润科技的试用光盘(VectorDemoCDV8.3),里边coe_canopen.exe因损坏无效,是不是每张光盘都这样?...
用户68356 2007-05-19 03:39
本博公告
本博暂停更新,稍后就回。欢迎访问:canopen.onlyblog.com...
用户68356 2007-03-14 22:17
ARM7TDMI-S后缀解释
T:Thumb代码支持,16bits指令结构;D:Debug硬件调试模块支持;M:加强的乘法操作支持(硬件乘法器),64位乘法结果;I:EmbededICE Logic,支持片上断点和调试点;S:sy...
用户68356 2007-03-14 04:44
老子-道德经
老子道德经--白话文注解:http://www.xet.cn/_game/lib/01_laozi/...
用户68356 2007-03-08 00:56
ARM完整定义
     ARM是英国一家电子公司的名字,全名的意思是Advanced RISC Machine。ARM首创了chipless的生产模式,即该公司既不生产芯片,也不设计芯片,而是设计出高效的IP内核,...
用户68356 2007-03-08 00:24
CPU基本概念
1.主频       主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度。CPU的主频=外频×倍频系数。很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出...
我要评论
6
9
关闭 站长推荐上一条 /2 下一条