lcd.c

来自「SPI FLASH,SL811HST驱动」· C语言 代码 · 共 105 行

C
105
字号
#include<pic18.h>
#include "lcd.h"
#ifndef LCD_CHAR_1602_2005_4_9
#define LCD_CHAR_1602_2005_4_9

////////////////////////////////////////////////

#define Rs RB2
#define En RB3

////////////////////////////////////////////////

//#define unsigned char unsigned char          //在编译时用unsigned char替代unsigned char
//#define uint unsigned int




//void LCD_Write(unsigned char c);   //写字节函数
//void ClearLcd(void);    // 清屏函数
//void Print(const char * s); //写字符串
//void GotoXY(unsigned char x,unsigned char y);  //确定显示位置x=线号 y=位置
//void Delay10Us(unsigned char x);            //约延时x*10Us
//void Delay1Ms(unsigned char x);    //约延时x*1Ms
 
void LCD_Write(unsigned char c)
{
     PORTB=(PORTB&0x0f)|(c&0xf0);
     En=1;
     En=0;
     PORTB=(PORTB&0x0f)|(c<<4);
     En=1;
     En=0;
     Delay10Us(4);
}

void ClearLcd(void)
{
     Rs = 0;
     LCD_Write(0x01);
     Delay1Ms(2);
}

void Print(const char * s)
{
     Rs = 1; // RS=1表示写入数据寄存器

     while(*s)
          LCD_Write(*s++);
}

void GotoXY(unsigned char x,unsigned char y)
{
     Rs = 0;
     if(x==1)
          LCD_Write(0x80+y);
     else
          LCD_Write(0xC0+y);  
} 
void InitLcd(void)
{
     Rs = 0; // RS=0,以下数据写入的是LCD命令寄存器
     Delay1Ms(15); 
     PORTB = 0x03; 

     En=1;
     En=0;
     Delay1Ms(5);
     En=1;
     En=0;
     Delay10Us(10);
     En=1;
     En=0;
     Delay1Ms(5);
     PORTB = 0x20; // 设定LCD为四线数据传输方式工作
     En=1;
     En=0;
     Delay10Us(4);
     LCD_Write(0x28); // 4位传输,5*8的字体
     LCD_Write(0x08); // 关闭LCD
     LCD_Write(0x0c); // 开LCD,不打开滑标不闪烁
     LCD_Write(0x06); 
}


void Delay10Us(unsigned char x)
{
     unsigned char i;
     while(x--)
     {
          for(i=0;i<7;i++)
               continue;
     }
}

void Delay1Ms(unsigned char x)
{
     while(x--)
         Delay10Us(100);
}
    


#endif

⌨️ 快捷键说明

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