导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[xiaotan97]C51编程:关于点阵液晶显示求助!



No.18195
作者:xiaotan97
邮件:www.tanyuhua@forentek.com
ID:8829
登陆:2次
文章数:11篇
最后登陆IP:218.201.34.123
最后登陆:2003/3/17 19:56:14
注册:2003/1/28 10:48:00
财富:36
发帖时间:2003/1/30 15:55:00
发贴者IP:218.70.96.75
标题:xiaotan97:C51编程:关于点阵液晶显示求助!
摘要:No.18195C51编程:关于点阵液晶显示求助!     我在编写点阵液晶显示的时候发现一个这样的问题让我没有高明白是怎回事,请求大家
帮助。
    我选用用的液晶片是Truly  MFC-G12864DPLY-1N型点阵液晶显示模块。单片机选用的是
89C51或52。P2口同液晶片的D0~D7相联。P1口的低5位接读写和片选信号。
    问题:
    在对模块的左半边进行写的时候,起先定义一个页和一个起始列写字的上半部分,写完
后在定义另外一页,再重先定以列同前面定义的列相同(对齐)。一般来说只要定义一个起
始列后再进行写的时候列计数自动相加。那么重先定义列,他会自动从新定以列处再自动相
加,这样达到前后两页的数据对齐,不如写一个字就会上下半对齐。但是我却发现程序执行
的时候没有按我预期的设想工作。即列记数一直再相加,导致上下部分出现错位。同样的程
序我把片选设在右半部分时结果又是正确的。这到底是怎么回事?!
  我的源程序如下:
  请各位大侠帮忙分析一下我的程序,到底是什么原因导致这个问题的?谢谢!
#include <stdio.h>
#include <reg51.h>
#include <intrins.h>

#define     uchar  unsigned char
#define     uint   unsigned int
#define     Byte   unsigned char
#define     Word   unsigned int
#define     bool   bit 

sbit   y_rs        = P1^0;             /*定以寄存器选择信号引脚*/        
sbit   y_rw        = P1^1;             /*定义使能引脚*/
sbit   y_e         = P1^2;             /*定义读写引脚*/        
sbit   y_cs1       = P1^3;             /*定义片选1引脚*/
sbit   y_cs2       = P1^4;             /*定义片选2引脚*/
sbit   y_rstb      = P1^5;             /*定义复位引脚*/

                                       /*P2口为D0-D7数据线*/ 
                                    
uchar code buff[]=                     /*显示一个重字*/
{
  
0x10,0x10,0x12,0xF2,0x52,0x52,0x52,0xFE,0x52,0x52,0x51,0x31,0xF1,0x10,0x08,0x08,
  
0X80,0XA0,0XA0,0XA7,0XA5,0XA5,0XA5,0XFF,0XA5,0XA5,0XA5,0XA5,0XA7,0X90,0X80,0X80
};

                                     
/*-----------------------------------------------------------------*/

void init(void);
void L_WriteState(uchar L_WRSTATE);
void L_WriteData(uchar L_WRDATA);
void Clear(void);
void Write(void);


void main(void)
{
  y_cs1 = 0;
  _nop_();
  y_cs1 = 1;
  _nop_();
  y_cs1 = 0;
  init();
  Write();
  while(1);
}

void init(void)
{
   uchar temp;
  
   y_rstb=0;                                       /*显示复位*/
   _nop_();
   _nop_();
   y_rstb=1;
   
   P1 = 0X38;                                      /*使能片选1和2*/
   y_rw=1;                                         /*读写允许;读取状态字*/
   y_rs=0;                                         /*清除寄存器选择信号口*/
  
   temp=P2 | 0XFF;  
   while ((temp & 0X10)==0X10)                     /*复位状态*/  
   {   
        while ((temp & 0X80)==0X80)                   /* 处于忙状态 */
     {
       P2|=0XFF;                                   /*将P2口全部置1*/
       y_e=1;                                      /*使能液晶显示模块*/ 
       temp=P2;
       y_e=0;  
     }
   } 
   
  temp=0XC0;                                       /*设置起始行*/
  L_WriteState(temp);
                        
  temp=0X3F;                                       /*开显示*/
  L_WriteState(temp);
  
  Clear();                                         /*清屏*/
}

void L_WriteState(uchar L_WRSTATE)                  /*写控制信息*/       
{  uchar  mm;
   mm=0X80;
   y_rs=0;          ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:7276毫秒 查询6次