app023_glcd.c

来自「PIC 18F8680 CAN bus Demo」· C语言 代码 · 共 188 行

C
188
字号
#include <p18f8680.h>
#include <delays.h>
#include "APP023_GLCD.h"

#define	LCD_E1			LATGbits.LATG1
#define	LCD_RW			LATHbits.LATH5 
#define	LCD_RS			LATHbits.LATH4
#define	LCD_DATA			LATF

#define	TRIS_LCD_DATA	TRISF
#define	TRIS_LCD_E1		TRISGbits.TRISG1
#define	TRIS_LCD_RS		TRISHbits.TRISH4
#define	TRIS_LCD_RW		TRISHbits.TRISH5

void	GLCD_Initial( void )
{
		LCD_E1 = 0 ;
		TRIS_LCD_RS = 0 ;
		TRIS_LCD_RW = 0 ;
		TRIS_LCD_E1 = 0 ;
		TRIS_LCD_DATA = 0 ; 

		LCD_DATA = 0x00 ;

		LCD_Delay_nms(40) ;
	
		LCD_DATA = 0b00110000 ;
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms(10) ;				// Delay 2 us

		LCD_DATA = 0b00110000 ;
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms(10) ;				// Delay 2 us

		LCD_DATA = 0b00001000 ;
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nus( 200 ) ;

		LCD_DATA = 0b00000001 ;
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms( 20 ) ;

		LCD_DATA = 0b00000110 ;
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms( 10 ) ;

		LCD_DATA = 0b00110000 ;			// Function Set
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms( 10 ) ;

		LCD_DATA = 0b00001000 ;			// Turn Display off 
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms(10 ) ;

		LCD_DATA = 0b00001110 ;			// Turn Display On
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms( 10 ) ;

		LCD_DATA = 0b00000110 ;			// Set entry mode
		LCD_CMDW_Timing( ) ;
		LCD_Delay_nms( 10 ) ;

}

void	putcGLCD( unsigned char TheChar )
{
		LCD_DATA = TheChar ;
		LCD_DATW_Timing( ) ;
}

void	putrsGLCD( const rom unsigned char *CS_Pointer )
{
		while ( *CS_Pointer != 0 )
		putcGLCD(*CS_Pointer++ ) ;

}

void	putsGLCD( unsigned char *S_Pointer )
{
		while ( *S_Pointer != 0 )
		putcGLCD(*S_Pointer++ ) ;

}

void	setcurGLCD( char CurY , char CurX)
{
		unsigned char	BaseAddr ;

		switch ( CurY )
		{
			case	0 :
					BaseAddr = 0x80 ;
					break ;
			case	1 :
					BaseAddr = 0x90 ;
					break ;
			case	2 :
					BaseAddr = 0x88 ;
					break ;
			case	3 :
					BaseAddr = 0x98 ;
					break ;
			default :
					BaseAddr = 0x80 ;
					break ;
		}
			BaseAddr += CurX ;
			cmdwGLCD(BaseAddr ) ;

}

void	cmdwGLCD( unsigned char TheCmd )
{
		LCD_DATA = TheCmd ;			// Set cursor !!!!
		LCD_CMDW_Timing( ) ;

}

void	LCD_CMDW_Timing( void )
{
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;

		LCD_RS = 0 ;
		LCD_RW = 0 ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		LCD_E1 = 1 ;
		
		LCD_WR_Delay( ) ;

		LCD_E1 = 0 ;

		LCD_Delay_nus(100) ;
}

void	LCD_DATW_Timing( void )
{
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		LCD_RS = 1 ;
		LCD_RW = 0 ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		Nop( ) ;
		LCD_E1 = 1 ;
		
		LCD_WR_Delay( ) ;

		LCD_E1 = 0 ;
	
		LCD_Delay_nus(100) ;

}

void	LCD_WR_Delay( void )
{
		Delay10TCYx(2) ;
}

void	LCD_Delay_nms( int Value_ms )
{
	int	i ;

		for ( i = 0 ; i < Value_ms ; i++ )
			Delay1KTCYx( 4 ) ;
}

void	LCD_Delay_nus( int Value_us )
{
	int	i ;	
		
		for ( i = 0 ; i < Value_us ; i++ )
		{
			Nop( ) ;
			Nop( ) ;
			Nop( ) ;
			Nop( ) ;
		}
}

⌨️ 快捷键说明

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