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

📄 lcd.c

📁 高奇公司ICD的例子,全部能用,非常好!C语言编程
💻 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 + -