导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→想请高手看看我的液晶程序是什么问题?总是不显示[guest]

 *第22311篇: 想请高手看看我的液晶程序是什么问题?总是不显示

  
楼 主:guest 2004年5月26日08:59
 想请高手看看我的液晶程序是什么问题?总是不显示
//***********************************************************
//连线图:LCM-89C51  DB0-P0.0 DB1-P0.1 DB2-P0.2
   //        DB3-P0.3  DB4-P0.4 DB5-P0.5  DB6-P0.6
   //        DB7-P0.7  A0-P2.7  CS1-P2.6 CS2-P2.5 CL-P2.4
  //         RES-P2.3
//程序是2*16字符显示
//*********************************************************** /
#include  <reg51.h>  
#include  <stdio.h>  
#include  <absacc.h>  

#define LCDCOM1 XBYTE[0x2600]//lcd命令寄存器地址A0=0,CS1=0,CS2=1,CL=0,RES=0,P2.2=1;
#define LCDCOM2 XBYTE[0x4600]//lcd命令寄存器地址A0=0,CS1=1,CS2=0,CL=0,RES=0,P2.2=1;
#define LCDDAT1 XBYTE[0xA600]//LCD数据寄存器地址A0=1,CS1=0,CS2=1,CL=0,RES=0,P2.2=1
#define LCDDAT2 XBYTE[0xC600]//LCD数据寄存器地址A0=1,CS1=1,CS2=0,CL=0,RES=0,P2.2=1;
    /*   #define LCDREAD1 XBYTE[0x4000] //读取数据A0=0,CS1=1,CS2=0,CL=0,RES=0
 #define LCDREAD2 XBYTE[0x2000] //读取数据A0=0,CS1=0,CS2=1,CL=0,RES=0 */
        sbit busy_flag=ACC^7;
       sbit lcd_reset=P2^3;
 //    sbit lcd_read=P3^7;
 //    sbit lcd_write=P3^6;
    sbit lcd_cl=P2^4;

        typedef unsigned char uchar;
     //   typedef unsigned int uint;
        uchar code
        lcd_line1[16]={0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00};          //"大"字上半边
        uchar code
        lcd_line2[16]={0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00};        //"大"字下半边
             //延时1*d ms
         void delay(unsigned int d)
         {uchar j;
         while(d--){
         for(j=0;j  <125;j++){;}
         }
         }
          //复位
       void reset(void)
        { lcd_reset=0;
          delay(5);
         lcd_reset=1;
         delay(5);
         lcd_reset=0;
         }
    //时钟产生
void clock(void) interrupt 1
 {
lcd_cl=!lcd_cl;
}
    //time0 产生中断

  //测试lcd1边忙
     void wait_lcd1(void)
     {do {//lcd_read=0;

    ACC=LCDDAT1;}
 while(busy_flag==1);
     }
 //测试lcd2边忙
        void wait_lcd2(void)
         {do {//lcd_read=0;
         ACC=LCDDAT2;}
         while(busy_flag==1);
         }
          //送lcd1边命令字
          void I_SEND1(uchar y)
          {wait_lcd1();
  //        lcd_read=1;lcd_write=0;

          LCDCOM1=y;
          }
//送lcd2边命令字
          void I_SEND2(uchar y)
          {wait_lcd2();
   //       lcd_read=1;lcd_write=0;
          LCDCOM2=y;
          }
          //送lcd1边数据
          void D_SEND1(uchar x)
          {wait_lcd1();
 //         lcd_read=1;lcd_write=0;

          LCDDAT1=x;
          }
//送lcd2边数据
          void D_SEND2(uchar x)
          {wait_lcd2();
       //   lcd_read=1;lcd_write=0;

          LCDDAT2=x;
          }
   //lcd1边初始化
          void start_lcd1()
          {
          delay(5);    //等待2ms的时间或更长时间,使电压稳定
          I_SEND1(0XE2);         //soft reset
          I_SEND1(0xAE);         //关显示
          I_SEND1(0xc0);          //start line
          I_SEND1(0xA4);         //清除显示   static drive off
          I_SEND1(0X00);         //COLUMN ADDRESS SET:0
        //  I_SEND1(0XB8);         //PAGE SET :0
          I_SEND1(0xA9);  //占空比
          I_SEND1(0xA0);  //ADC模式
          I_SEND1(0xEE);
          I_SEND1(0XAF);         //开显示
          }
          //lcd2边初始化
          void start_lcd2()
          {
          delay(5);    //等待2ms的时间或更长时间,使电压稳
          I_SEND2(0xAE);         //关显示
          I_SEND2(0xc0);

          I_SEND2(0xA4);         //清除显示
          I_SEND2(0X00);  //COLUMN ADDRESS SET:0
        //  I_SEND2(0XBA);    //PAGE SET :  2
          I_SEND2(0xA9);  //占空比
          I_SEND2(0xA0);  //ADC模式
          I_SEND2(0xEE);         //开显示
          I_SEND2(0XAF);
          }

        //清lcd1
          void lcd_clr1(uchar page1)
          { int i;
          i=0;
          I_SEND1(page1);
          I_SEND1(0x00);
          do{

          D_SEND1(0X00);
          i++;}
          while(i  <79);
          }
          //清lcd2
          void lcd_clr2(int page1)
          { int i;
          i=0;
          I_SEND2(page1);
          I_SEND2(0);
          do{

          D_SEND2(0X00);
          i++;}
          while(i  <79);
          }

        void lcd_display1()
        {start_lcd1();
        lcd_clr1(0xb8);
        lcd_clr1(0xb9);
        lcd_clr1(0xba);
        lcd_clr1(0xbb);
        start_lcd2();

        lcd_clr2(0xb8);
        lcd_clr2(0xb9);
        lcd_clr2(0xba);
        lcd_clr2(0xbb);

        I_SEND1(0XB8);
        I_SEND1(0X00);
      //  D_SEND1(lcd_line1);

       D_SEND1(lcd_line1[0]);
       D_SEND1(lcd_line1[1]);
       D_SEND1(lcd_line1[2]);
       D_SEND1(lcd_line1[3]);
       D_SEND1(lcd_line1[4]);
       D_SEND1(lcd_line1[5]);
         D_SEND1(lcd_line1[6]);
        D_SEND1(lcd_line1[7]);
       D_SEND1(lcd_line1[8]);
        D_SEND1(lcd_line1[9]);
       D_SEND1(lcd_line1[10]);
       D_SEND1(lcd_line1[11]);
        D_SEND1(lcd_line1[12]);
       D_SEND1(lcd_line1[13]);
       D_SEND1(lcd_line1[14]);
       D_SEND1(lcd_line1[15]);

        I_SEND1(0XB9);
        I_SEND1(0X00);
       // D_SEND1(lcd_line2);

      D_SEND1(lcd_line2[0]);
        D_SEND1(lcd_line2[1]);
        D_SEND1(lcd_line2[2]);
          D_SEND1(lcd_line2[3]);
         D_SEND1(lcd_line2[4]);
       D_SEND1(lcd_line2[5]);
         D_SEND1(lcd_line2[6]);
        D_SEND1(lcd_line2[7]);
       D_SEND1(lcd_line2[8]);
        D_SEND1(lcd_line2[9]);
       D_SEND1(lcd_line2[10]);
       D_SEND1(lcd_line2[11]);
        D_SEND1(lcd_line2[12]);
       D_SEND1(lcd_line2[13]);
       D_SEND1(lcd_line2[14]);
       D_SEND1(lcd_line2[15]);


        }

 void main(void)
          {
           TMOD=0x22;
           TL0=TH0=173;
           TCON=0x00;
           ET0=1;
           TR0=1;
           EA=1;
           reset();
          for(;;)
          lcd_display1();

      /*   while(1)
          {}       */
          }

  
2楼:guest 2004年5月26日09:07
 忘了说了,我用的是truly MSC-G
忘了说了,我用的是truly MSC-G12232DGRN-7W

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:专业制造网络滤波器!

[下一篇主题]:找人开发PIC