📄 lcd.c
字号:
#include <SPCE061V004.h>
#include "LCD.h"
void Delay( unsigned int delay )
{
unsigned int i ;
for( i = 0 ; i < delay ; i++ )
{
*P_Watchdog_Clear=0x0001;
}
}
void LCD_Init( )
{
//LCD初始化
Delay( 1000 ) ;
LCD_WriteCmd( LCD_Func | LCD_FuncBit8 | LCD_FuncDual | LCD_Func0508 ) ;
Delay( 300 ) ;
LCD_WriteCmd( LCD_Func | LCD_FuncBit8 | LCD_FuncDual | LCD_Func0508 ) ;
Delay( 300 ) ;
LCD_WriteCmd( LCD_Func | LCD_FuncBit8 | LCD_FuncDual | LCD_Func0508 ) ;
Delay( 300 ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_Func | LCD_FuncBit8 | LCD_FuncDual | LCD_Func0508 ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_OnOff | LCD_ScrOff | LCD_CurOff | LCD_FlashOn ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_Clear ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_Mode | LCD_AC_Inc | LCD_NoRoll ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_OnOff | LCD_ScrOn | LCD_CurOn | LCD_FlashOn ) ;
while( LCD_isBusy( ) ) ;
}
void LCD_Lamp( unsigned int on_off )
{
if( on_off )
{
LCD_SetLT ;
}
else
{
LCD_ClrLT ;
}
}
void LCD_WriteCmd( unsigned int cmd )
{
//A口高8位作为数据口,设为同相输出状态
*P_IOA_Buffer = *P_IOA_Buffer & 0x00ff ;
*P_IOA_Attrib = *P_IOA_Attrib | 0xff00 ;
*P_IOA_Dir = *P_IOA_Dir | 0xff00 ;
LCD_ClrRS ;
LCD_ClrRW ;
*P_IOA_Buffer = ( *P_IOA_Buffer & 0x00ff ) | ( cmd << 8 ) ;
LCD_NegEdgeEN ;
}
unsigned int LCD_ReadStat( void )
{
unsigned int state ;
*P_IOA_Buffer = *P_IOA_Buffer | 0xff00 ;
*P_IOA_Attrib = *P_IOA_Attrib & 0x00ff ;
*P_IOA_Dir = *P_IOA_Dir & 0x00ff ;
LCD_ClrRS ;
LCD_SetRW ;
LCD_SetEN ;
state = ( *P_IOA_Data & 0xff00 ) >> 8 ;
return ( state ) ;
}
void LCD_WriteDat( unsigned int dat )
{
*P_IOA_Buffer = *P_IOA_Buffer & 0x00ff ;
*P_IOA_Attrib = *P_IOA_Attrib | 0xff00 ;
*P_IOA_Dir = *P_IOA_Dir | 0xff00 ;
LCD_SetRS ;
LCD_ClrRW ;
*P_IOA_Buffer = ( *P_IOA_Buffer & 0x00ff ) | ( dat << 8 ) ;
LCD_NegEdgeEN ;
}
unsigned int LCD_ReadDat( void )
{
unsigned int dat ;
//A口高8位作为数据口,设为上拉输入方式
*P_IOA_Buffer = *P_IOA_Buffer | 0xff00 ;
*P_IOA_Attrib = *P_IOA_Attrib & 0x00ff ;
*P_IOA_Dir = *P_IOA_Dir & 0x00ff ;
LCD_SetRS ;
LCD_SetRW ;
LCD_SetEN ;
dat = ( *P_IOA_Data & 0xff00 ) >> 8 ;
return ( dat ) ;
}
unsigned int LCD_isBusy( void )
{
unsigned int busy ;
//A口高8位作为数据口,设为上拉输入方式
*P_IOA_Buffer = *P_IOA_Buffer | 0xff00 ;
*P_IOA_Attrib = *P_IOA_Attrib & 0x00ff ;
*P_IOA_Dir = *P_IOA_Dir & 0x00ff ;
busy = LCD_ReadStat( ) & 0x0080 ;
return ( busy ) ;
}
void LCD_Display( unsigned int pos ,unsigned char chara )
{
unsigned int ddram ;
if( pos < 16 )
{
ddram = pos ;
}
else
{
ddram = pos - 16 + 0x40 ;
}
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_AddrDDRAM | ddram ) ;
while( LCD_isBusy( ) ) ;
LCD_WriteDat( chara ) ;
while( LCD_isBusy( ) ) ;
}
void LCD_Load( unsigned char *src )
{
unsigned int i ;
for( i = 0 ;i < 32 ; i++ )
{
*( LCD_Buffer + i ) = *( src + i ) ;
}
LCD_Buffer[ 32 ] = 0 ;
}
void LCD_Update( void )
{
unsigned int i ;
for( i = 0 ; (i<32)&&(LCD_Buffer[i]!=0) ; i++ )
{
LCD_Display( i , LCD_Buffer[ i ] );
}
}
void LCD_CurShow( unsigned int on_off )
{
if( on_off )
{
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_OnOff | LCD_ScrOn | LCD_CurOn | LCD_FlashOn ) ;
}
else
{
while( LCD_isBusy( ) ) ;
LCD_WriteCmd( LCD_OnOff | LCD_ScrOn | LCD_CurOff | LCD_FlashOff ) ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -