导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:请大侠指教液晶显示的问题:

* 5064: C51编程:请大侠指教液晶显示的问题:

   liutie 
liutie发表的帖子 

 C51编程:请大侠指教液晶显示的问题:
请教AVR单片机(90S515)液晶显示问题:
          我在ICCAVR开发平台上,编了一段液晶显示程序,用AVR STUDIO仿真时
   好象没有什么问题,可在实际电路中,一点也不管用,什么显示也没有。实在发现
  不了问题,希望请做过液晶显示的大侠指点 ,不胜感激。(我的液晶显示模块是HY128*64B,
控制芯片是三星的KS0108B,我对照了其它128*64显示模块,接口大都差不多)   
    #include<io8515.h>
#define cs1 0x01   //B口PB0
#define cs2 0x02   //B口PB1
#define rst 0x04   //B口PB2
#define rw  0x08   //B口PB3
#define di  0x10   //B口PB4
#define ea  0x20   //B口PB5
#pragma data:eeprom
unsigned char a[16]={0xff,0x00,0x00,0xff,0xaa,0xaa,0x55,0x55,
                            
0xaa,0x55,0x55,0xaa,0xff,0xff,0x00,0x00};
unsigned char yu[32]=
{0x20,0x20,0x20,0xFE,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x00
,
                                 
0x00,0x00,0x00,0x3F,0x20,0x20,0x27,0x22,0x22,0x22,0x22,0x27,0x30,0x20,0x00,0x00}
;//16*16汉字数组
unsigned char xin[32]=
{0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0xFF,0xC9,0x49,0x49,0x49,0xFF,0x00,0x00,0x00
,
                            
0x00,0x08,0x08,0x84,0x44,0x22,0x1D,0x00,0x00,0xFD,0x02,0x02,0x04,0x0C,0x04,0x00}
;//16*16汉字数组

void init8515(void)
  { 
   DDRC=0xff;PORTC=0xff;//C口输出(液晶显示输入输出口)
   DDRB=0xff;PORTB=0xff;//B口输出(液晶显示模块控制位)
   }
  void delay(int dly)
   {
     while(dly--);
    }  
 void waitidle1(void)                 //判断芯片1的状态  
   {
    PORTB&=~cs1;PORTB|=cs2;          //低电平选中(cs1=0,cs2=1)
    PORTB&=~di;PORTB|=rw;PORTB|=ea;  //di=0表示指令,1表示数据;rw=0表示写;1表示

    for(;(PINC&0x80)==0x80;);     //判断是READY OR BUSYING 如BUSYING,则等
待;
   }
  void waitidle2(void)               //判断芯片1的状态
   {
    PORTB|=cs1;PORTB&=~cs2;          //低电平选中(cs1=1,cs2=0)
    PORTB&=~di;PORTB|=rw;PORTB|=ea;   //di=0表示指令,1表示数据;rw=0表示写;1表示

    for(;(PINC&0x80)==0x80;);         //判断是READY OR BUSYING 如BUSYING,则等待
   }      
 void initlcm(void)
 {  PORTB&=~rst;delay(2);PORTB|=rst;delay(8);
    PORTB&=~ea&~di&~rw;PORTB|=cs1|cs2;
    waitidle1();                //判断芯片1是否准备好?如准备好则继续,否则,等待 
PORTB&=~cs1;PORTB|=cs2;PORTB&=~di&~rw;//di=0表示指令,1表示数据;rw=0表示写;1表示

   PORTC=0x3f;PORTB|=ea;delay(2);PORTB&=~ea;delay(2);  //控制指令0x3f表示正常显示
   waitidle1();PORTB&=~cs1;PORTB|=cs2;PORTB&=~di&~rw;
   PORTC=0xc0;PORTB|=ea;delay(2);PORTB&=~ea;delay(2);  //控制指令0xc0表示显示起始
位置从屏幕最顶端开始
   PORTB|=cs1|cs2;waitidle2();
   PORTB|=cs1;PORTB&=~cs2;PORTB&=~di&~rw;
   PORTC=0x3f;PORTB|=ea;delay(2);PORTB&=~ea;delay(2);
   waitidle2();PORTB|=cs1;PORTB&=~cs2;PORTB&=~di&~rw;
   PORTC=0xc0;PORTB|=ea;delay(2);PORTB&=~ea;delay(2);
   PORTB|=cs1|cs2;
    
  }
  void lw(unsigned char x,unsigned char y,unsigned char dd) 
      {
        if (x<64) 
        {                                //当x地址小于64时,转到第1号
芯片处理   
                PORTB|=cs1|cs2;
                   waitidle2();
           PORTB&=~di&~rw;PORTB|=cs1;PORTB&=~cs2;
           PORTC=0xb8|y;PORTB|=ea;delay(2);PORTB&=~ea;delay
(2); //0xb8|y表示y地址
           waitidle2();
           PORTB&=~di&~rw;PORTB|=cs1;PORTB&=~cs2;
           PORTC=0x40|x;PORTB|=ea;delay(2);PORTB&=~ea;delay
(2); //0x40|x表示x地址
           waitidle2();
           PORTB|=di;PORTB&=~rw;PORTB|=cs1;PORTB&=~cs2;  
           PORTC=dd;PORTB|=ea;delay(2);PORTB&=~ea;delay(2);  //向该
地址写数据
           PORTB|=cs1|cs2;
            
        }
        else 
        {
           PORTB|=cs1|cs2;x=x-64;         //当x地址大于64时,转到第2
号芯片处理
           waitidle1();
           PORTB&=~di&~rw;PORTB&=~cs1;PORTB|=cs2;
           PORTC=0xb8|y;PORTB|=ea;delay(2);PORTB&=~ea;delay(2); //0xb8|y表
示y地址
          waitidle1();
          PORTB&=~di&~rw;PORTB&=~cs1;PORTB|=cs2;
          PORTC=0x40|x;PORTB|=ea;delay(2);PORTB&=~ea;delay
(2); //0x40|x表示x地址
            waitidle1();
            PORTB|=di;PORTB&=~rw;PORTB&=~cs1;PORTB|=cs2;
            PORTC=dd;PORTB|=ea;delay(2);PORTB&=~ea;delay
(2);  //向该地址写数据
            PORTB|=cs1|cs2;
        }
        PORTC=0xff;
        }
   void write_chinese(unsigned char x,unsigned char y,unsigned char array[])
         {
          unsigned char j,dd;            
          for(j=0;j<32;j++)
           {
             dd=array[j];
             if(j<16) lw(x+j,y,dd);
             else     lw(x+j-16,y+1,dd);
           }    
         }
void main(void)
{
unsigned char i;
init8515();
while(1)
  {
    initlcm();    
    write_chinese(20,0,yu);       //在指定位置显示汉字
    write_chinese(40,2,xin);
    delay(60000);
    for(i=0;i<8;i++)
    {    
      unsigned char x,y;
        for(y=0;y<8;y++)
        {
            for(x=0;x<128;x++)
            {
             if(x%2==0)
               lw(x,y,a[2*i]);
             else
               lw(x,y,a[2*i+1]);
            }                
         }
         delay(60000);
      }             
    }
}              


      
     



发表时间:2002年1月22日0:40:00

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:我也要,行吗?WZWX@21CN.COM
[下一篇帖子]:初学者:谁能帮我?我想作一个单片机。能与我的电脑键盘通讯,每次开机时只有输入密码才能打开电源,谢 B