📄 lcd.c
字号:
/*********************************************************************
* Goldenchip ICDDEMO Workshop for MCUPIC16F877 *
**********************************************************************
* 本程序包含控制外部液晶面板的4-BIT控制模式子程序。这些程序是专门为 *
* 高奇ICDDEMO演示板设计的。但它也可作为其他类型的使用 KS0066U控制器的*
* 液晶面板的控制程序。 *
* ICDDEMO板使用的LCD显示信号口为: *
* PORTB2-》数据位0 *
* PORTB3-》数据位1 *
* PORTB4-》数据位2 *
* PORTB5-》数据位3 *
* PORTB1-》RS控制位 *
* PORTA5-》E 控制位 *
* 本程序使用4M晶振 *
*********************************************************************/
/*********************************************************************
* Filename: lcd.c *
* Date: 10/19/2002 *
* Edit by Yamato View ,Goldenchip Electronic Co. ,Ltd. *
* *
* TEL: 86-0591-3375855-721 *
* *
*********************************************************************/
#include <pic.h>
#include "lcd.h"
// PORTBITS
#define PortBit(port,bit) ((unsigned)&(port)*8+(bit))
#define RS RB1
#define E RA5
void Init_Lcd( void ) // 初始化 LCD 显示
{
PORTB = 0xC1;
TRISB = 0xC1;
TRISA = 0xDF;
Delay15Ms(); // ~15mS延时
DATA = 0x00;
E = 1;
NOP();
NOP();
E = 0;
DATA = 0x08;
E = 1;
NOP();
NOP();
E = 0;
Delay5Ms();
Write_Lcd_Cmd( 0x28 ); //
Write_Lcd_Cmd( 0x0C ); // 开显示
Write_Lcd_Cmd( 0x06 ); // 设置指针移动方式
Write_Lcd_Cmd( 0x01 ); // 清屏
}
void Write_Lcd_Cmd( unsigned char cmd ) // 写命令到LCD子程序
{
DATA &=0xc3;
DATA |= ( ( cmd >>2 ) & 0x3C ); // 送高4位
RS = 0; // 设置为发送命令格式
E = 1; // 发送信号,下降沿触发
NOP();
NOP();
E = 0;
DATA &=0xc3 ; //
DATA |= ( ( cmd <<2 ) & 0x3C ); // 送低4位
E = 1; // 发送信号,下降沿触发
NOP();
NOP();
E = 0; //
Delay5Ms(); //
}
void Write_Lcd_Data( unsigned char data ) // 写数据到LCD的子程序
{
DATA &= 0xc3;
DATA |= ( ( data >>2 ) & 0x3C ); // 送高4位
RS = 1; // 设置为发送数据格式
E = 1; //
NOP();
NOP(); //
E = 0; // set enable low
//;DATA &= 0xF0;
DATA &= 0xc3;
DATA |= ( ( data <<2 ) & 0x3C ); // 送低4位
E = 1; //
NOP();
NOP(); //
E = 0; //
Delay5Ms(); //
}
void Home_Clr( void ) // 清屏
{
Write_Lcd_Cmd( 0x01 );
}
void Line_1( void ) // 从第一行显示
{
Write_Lcd_Cmd( 0x80 );
}
void Line_2( void ) // 从第2行开始显示
{
Write_Lcd_Cmd (0xC0 );
}
void Delay15Ms( void ) // 精确 15ms 延时
{
unsigned char outer, inner;
for (outer = 45; outer > 0; outer--)
for (inner = 235; inner > 0; inner--);
}
void Delay5Ms( void ) // 精确 5ms 延时
{
unsigned char outer, inner;
for (outer = 15; outer > 0; outer--)
for (inner = 240; inner > 0; inner--);
}
void Delay200Us( void ) // 精确 200us 延时
{
unsigned char delay;
for (delay = 167; delay > 0; delay--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -