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

📄 lcd.c

📁 单相 CPU卡表复费率电能表,内部有提供I2C驱动,CPU卡驱动,NEC单片机0513等
💻 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 + -