📄 lcd.c
字号:
#pragma sfr
#pragma di
#pragma ei
#include"main.h"
#include"WRE2PROM.h"
#include"serialRC.h"
#include"POWER_COUNT.h"
#include"LCD.h"
#define LCD_CLK0
#define DELAY _delay(3)
#define LCD_WR1 (P2.0=1);DELAY
#define LCD_WR0 (P2.0=0);DELAY
#define CS0 P13=0;_delay(20)
#define CS1 P13=1;P4.3=1;_delay(20)
#define DATAOUT_MODE PM2.2=0
#define DATAIN_MODE PM2.2=1
#define DATAOUT0 P2.2=0
#define DATAOUT1 P2.2=1
#define LCDDATAIN (P2.2)
#define COMMAND 0x04
#define READ 0x06
#define WRITE 0x05
LCD_Display_s LCD_Show;
const unsigned char Show_number[16]=
{
LCD_CODE_INFO_0,
LCD_CODE_INFO_1,
LCD_CODE_INFO_2,
LCD_CODE_INFO_3,
LCD_CODE_INFO_4,
LCD_CODE_INFO_5,
LCD_CODE_INFO_6,
LCD_CODE_INFO_7,
LCD_CODE_INFO_8,
LCD_CODE_INFO_9,
LCD_CODE_INFO_A,
LCD_CODE_INFO_B,
LCD_CODE_INFO_C,
LCD_CODE_INFO_D,
LCD_CODE_INFO_E,
LCD_CODE_INFO_F
};
/**********************************************************************
起动ht1621
**********************************************************************/
void Start_spi(void)
{
CS1;
DATAOUT_MODE;
LCD_WR1;
DATAOUT1;
DELAY;
CS0;
LCD_WR0;
DELAY;
}
void Bit_Write(uchar data,uchar Len)
{
data<<=(8-Len);
while(Len--)
{
LCD_WR0;
if(data&0x80)
{
DATAOUT1;
}
else
{
DATAOUT0;
}
_delay(1);
LCD_WR1;
data<<=1;
_delay(1);
}
}
void Write_Order(uchar Order)
{
Start_spi();
Bit_Write(COMMAND,3);
Bit_Write(Order,8);
Bit_Write(0xFF,1);
CS1;
}
void Update_LCD(uchar check_lcd)
{
uchar ii;
if(PROGR_ENABLE )//编程
{
LCD_Show.Lcd_Buffer[8]|=0x04;
}
if(TXE6 )//通讯
{
LCD_Show.Lcd_Buffer[4]|=0x01;
}else
{
LCD_Show.Lcd_Buffer[4]&=0xFE;
}
//继电器状态
LCD_Show.Lcd_Buffer[5]|=LCD_Show.Relay_State;
if (PEVERSE_PIN)
{
LCD_Show.Lcd_Buffer[0]|=REVERSE;
#ifndef NEED_IR
ALARM_LED_SET(0);
#endif
}
else
{
#ifndef NEED_IR
ALARM_LED_SET(1);
#endif
}
Start_spi();
Bit_Write(WRITE,3);
Bit_Write(0x00,6);//addr
for(ii=0;ii<LEN_OF_LCD_DISPLAY;ii++)
{
if(check_lcd)
{
LCD_Show.Lcd_Buffer[ii]=0xFF;
}
Bit_Write(LCD_Show.Lcd_Buffer[ii],8);//addr
}
CS1;
}
void Load_Data(uchar *temp ,uchar item)
{
uchar ii;
for(ii=0;ii<item;ii++)
{
LCD_Show.Lcd_Buffer[7-ii*2]=Show_number[temp[ii]&0x0F];
LCD_Show.Lcd_Buffer[6-ii*2]=Show_number[temp[ii]>>4];
}
}
void LCD_Show_Turn(void)
{
if(LCD_Show.timer--==0)
{
uchar temp[4];
MemSetTo0(LCD_Show.Lcd_Buffer,LEN_OF_LCD_DISPLAY);
if(LCD_Show.Showing_ItemNO++)
{
if( 2 == LCD_Show.Showing_ItemNO)
{
ReadString(temp,PowerMeterCode_address+3,3);//读表号
LCD_Show.Lcd_Buffer[0]=LCD_CODE_INFO_H; //
}
else
{
ReadString(temp,PowerMeterCode_address,3);//读表号
LCD_Show.Lcd_Buffer[0]=LCD_CODE_INFO_L; //L
LCD_Show.Showing_ItemNO=0;
}
Load_Data(temp,3);
LCD_Show.Lcd_Buffer[1]=LG; //-
LCD_Show.Lcd_Buffer[9]|=0x40;//局号
}else
{
Read_Degree(DEGREE_OF_ABCPHASIC_ACT,temp);
Load_Data(temp,4);
LCD_Show.Lcd_Buffer[8]|=0x41;LCD_Show.Lcd_Buffer[7]|=0x01;LCD_Show.Lcd_Buffer[3]|=0x01;
Write_Order(BIAS13);
Write_Order(XTAL32K);
Write_Order(SYS_EN);
Write_Order(LCD_ON);
Write_Order(TIMER_DIS);
Write_Order(WDT_DIS);
Write_Order(TONE_OFF);
}
LCD_Show.timer=LCD_TURN_TIME;
Update_LCD(0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -