⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm_initial.c

📁 用串行通信实现的液晶ST7920的初始显示
💻 C
字号:
#include  "config.h"     

#define  SCK  0x00000010  //P0.4
#define  MISO 0x00000020  //P0.5
#define  MOSI 0x00000040  //P0.6
#define  SSEL 0x00000080  //P0.7

#define  OUT  0x000000D0
 
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<100; i++);
}

//该函数用于发送一个字节(1,1,1,1,1,RW=0,RS=0,0)
//五个1用于串行同步,
void tongbu00(void)
{ IOCLR=SCK;
   //5个1
  IOSET=MOSI;
      IOSET=SCK;
  IOCLR=SCK;
      IOSET=SCK;
  IOCLR=SCK;
      IOSET=SCK;
  IOCLR=SCK;
      IOSET=SCK;
  IOCLR=SCK;
      IOSET=SCK;
  IOCLR=SCK;    //时钟清零
     
  IOCLR=MOSI;   //传RW位0
      IOSET=SCK;
  IOCLR=SCK;
     
               //传RS位0
      IOSET=SCK;
  IOCLR=SCK;
     
               //0
      IOSET=SCK; 
  IOCLR=SCK;
     }
     
//该函数用于发送一个字节(1,1,1,1,1,RW=0,RS=1,0)
//五个1用于串行同步,,RW=0,RS=1是写显示数据的控制信号
void tongbu01(void)
{ IOCLR=SCK;
   //5个1
  IOSET=MOSI;
     IOSET=SCK;
  IOCLR=SCK;
     IOSET=SCK;
  IOCLR=SCK;
     IOSET=SCK;
  IOCLR=SCK;
     IOSET=SCK;
  IOCLR=SCK;
     IOSET=SCK;
  IOCLR=SCK;    //时钟清零
     
  IOCLR=MOSI;   //传RW位0
     IOSET=SCK;
  IOCLR=SCK;
     
  IOSET=MOSI;   //传RS位1
     IOSET=SCK;
  IOCLR=SCK;
     
  IOCLR=MOSI;
     IOSET=SCK;  //0
  IOCLR=SCK;
     }
     
 //该函数用于发送四个连续的0
 void send_4zero(void)
 {  IOCLR=MOSI;       //发送4个零
       IOSET=SCK;
    IOCLR=SCK;
       IOSET=SCK;
    IOCLR=SCK;
       IOSET=SCK;
    IOCLR=SCK;
       IOSET=SCK;
    IOCLR=SCK;   //时钟清零 
    }
    
 //该函数用于向LCM12832发送一个字节的数据
 void SendData(uint8 a)
 {   uint8 i,b;
     b=a;
     IOCLR=SSEL;
     IOSET=SSEL;
     
     tongbu00();
      
     for(i=0;i<4;i++)      //发送高4位
     { if((a&0x80)==0)
       { IOCLR=MOSI;
         IOSET=SCK;
        }
       else
       {IOSET=MOSI;
        IOSET=SCK;
        }
       IOCLR=SCK;   //时钟清零
       a=a<<1;
      }

     send_4zero();     

     for(i=0;i<4;i++)      //发送低4位
     { if((b&0x08)==0)
       { IOCLR=MOSI;
         IOSET=SCK;
        }
       else
       {IOSET=MOSI;
        IOSET=SCK;
        }
       IOCLR=SCK;   //时钟清零
       b=b<<1;
      }
     
     send_4zero();
    
     IOCLR=SSEL;
    
     DelayNS(50);                   
       
   }
  
 //该函数用于向LCM12832发送两个字节的数据
  void SHOWSend(uint16 a)
  { uint8 i; 
    uint16 b,c,d;
    b=c=d=a;
    IOCLR=SSEL;
    IOSET=SSEL;
  
    tongbu01();
         
    for(i=0;i<4;i++)      //发送第1个字节的高4位
    { if((a&0x8000)==0)
      { IOCLR=MOSI;
         IOSET=SCK;
        }
      else
      { IOSET=MOSI;
        IOSET=SCK;
       }
      IOCLR=SCK;   //时钟清零         
      a=a<<1;
     }

    send_4zero();     

    for(i=0;i<4;i++)      //发送第1个字节的低4位
    { if((b&0x0800)==0)
      { IOCLR=MOSI;
        IOSET=SCK;
       }
      else
      { IOSET=MOSI;
        IOSET=SCK;
       }
      IOCLR=SCK;   //时钟清零
      b=b<<1;
     }

    send_4zero();
    IOCLR=SSEL;
    
    DelayNS(50);
     
    IOSET=SSEL;
    tongbu01();
    
    for(i=0;i<4;i++)    //发送第2个字节的高4位
    { if((c&0x0080)==0)
      { IOCLR=MOSI;
        IOSET=SCK;
       }
      else
      { IOSET=MOSI;
        IOSET=SCK;
       }
      IOCLR=SCK;   //时钟清零
      c=c<<1;
     }

    send_4zero();  
    
    for(i=0;i<4;i++)    //发送第2个字节的低4位
    { if((d&0x0008)==0)
      { IOCLR=MOSI;
        IOSET=SCK;
       }
      else
      { IOSET=MOSI;
        IOSET=SCK;
       }
      IOCLR=SCK;   //时钟清零
      d=d<<1;
     }

     send_4zero();
    
     IOCLR=SSEL;
    
     DelayNS(50);   
     }
     
/*lcm初始化*/  
void LCMInitial(void)
{ DelayNS(50);          
  SendData(0x30);
  
  DelayNS(50);           
  SendData(0x30);

  DelayNS(50);            
  SendData(0x0C);

  DelayNS(50);               
  SendData(0x01);
 
  DelayNS(50);         
  SendData(0x06);
  
 }



int main(void)
{ PINSEL0=0x00000000; //通用口
  IODIR=OUT;          //SSEL口设置为输出,当其为低电平时LCM12832才能接受数据
  IOCLR=SCK; 
  IOCLR=SSEL;
  LCMInitial();         //初试化LCM显示频
  

  SendData(0x83);       //DDROM地址83H           
  SHOWSend(0xCED2);  //显示汉字"我"
 
  return (0);
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -