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

📄 lcd.c

📁 液晶OCMJ2x8C驱动程序
💻 C
字号:
#include "hal.h"

#define CS_PIN       0x01 //p2_0
#define STD_PIN      0x02 //p2_1
#define SCLK_PIN     0x04 //p2_2
#define STD_H()  P2 |= STD_PIN
#define STD_L()  P2 &= ~STD_PIN
#define SCLK_H() P2 |= SCLK_PIN
#define SCLK_L() P2 &= ~SCLK_PIN
#define CS_H()   P2 |= CS_PIN
#define CS_L()   P2 &= ~CS_PIN

#define COMM 0 
#define DAT  1 


/*-------------------------------------------------------------------------------------------------- 
Public function prototypes 
--------------------------------------------------------------------------------------------------*/ 

void LCD_SCLK_write   (void); 
void delay_nus        (unsigned char wait); 



void LCD_init(void)       //液晶初始化 
{  
  unsigned char i=0; 
  halWait(150);        

  for(i=0;i<3;i++) 
  { 
    LCD_write_char(COMM,0x30);  //8位显示 
  } 
  LCD_write_char(COMM,0x0c);   
  LCD_write_char(COMM,0x0f);  //显示开,光标开,闪烁开 
  LCD_write_char(COMM,0x01);  //清屏 
  halWait(10);  
  LCD_write_char(COMM,0x06);   
}  

/*--------------清DDRAM------------------*/
void clrram (void)
{
  LCD_write_char(COMM,0x30);
  LCD_write_char(COMM,0x01);
  delay_nus(180);
}

void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数 
{ 
  unsigned char address; 
  if (y == 0) address = 0x80 + x; //第0行
  else if (y == 1) address = 0x90 + x; //第1行
 // else if (y == 2) address = 0x88 + x; 
 // else if (y == 3) address = 0x98 + x; 
  LCD_write_char(COMM,address); 
} 

void LCD_SCLK_write(void)  //液晶使能 
{ 
  SCLK_H();
  SCLK_L();
} 


void LCD_write_char(unsigned char command,unsigned char data) // 写数据 
{ 
  unsigned char i,j; 
  
  for(i=0;i<5;i++)   //同步信号
  { 
    STD_H();    //1 1 1 1 1 
    LCD_SCLK_write();  
  }  
  STD_L();      //RW 
  LCD_SCLK_write(); 
  
  if(command)   //RS 
    STD_H();    //data
  else
    STD_L();    //command
  LCD_SCLK_write(); 
  
  STD_L();   // 0 
  LCD_SCLK_write();  //写串口输入方式的头 

  for(j=0;j<2;j++) 
  { 
    for(i=0;i<4;i++) 
    { 
      if((0x80&data)>0) 
        STD_H(); 
      else 
        STD_L();  
      LCD_SCLK_write(); 
      data=data<<1; 
    } 
    for(i=0;i<4;i++) 
    { 
      STD_L();    //0 0 0 0 
      LCD_SCLK_write();  
    } 
  }  //end for(j=0  
  SCLK_L();
} 
/*写汉字*/
void LCD_write_hanzi(unsigned int data) // 写数据 
{ 
  LCD_write_char(DAT,((0Xff00&data)>>8)); 
  LCD_write_char(DAT,((0xff&data)));   
} 

/*---------------显示汉字或字符----------------*/
void Display_All (unsigned char *chn)
{
  unsigned char i,j;
  for (i=0;i<32;i++)
  { 
     LCD_write_char(DAT,chn[i]);
     if(i==15)
       LCD_write_char(COMM,0x90); //跳到第1行
     else if(i==31)
       LCD_write_char(COMM,0x80); //跳到第0行
  }  
}
/*---------------显示汉字----------------*/
void Display_hz (unsigned int data,unsigned char x,unsigned char y)
{
  LCD_set_xy(x,y);
  LCD_write_char(DAT,((0Xff00&data)>>8)); 
  LCD_write_char(DAT,((0xff&data))); 
}
 /*----------------------------------------------------------------------- 
延时函数 
-----------------------------------------------------------------------*/ 
void delay_nus(unsigned char wait)       //N us延时函数 
{ 
  do
  {
    ;
  }
  while(wait--);
} 

⌨️ 快捷键说明

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