#define LCD_GLOABLE
#include "config.h"
#include "charzimo.h"
//设备sn
char Device_SN[]={"S/N:0808188102 C"};
char MsgBuf[256],Old_MsgBuf[256];
char msg_start_time[11];
char msg_end_time[11];
char current_time[11];
volatile uint8 display_finish;
extern volatile Menu_Status * Menu;
extern char Main_Menu;
extern volatile Wg_Input_Data wg_input_data;
#define ZIMO_ADDR (( uint8 *)(0x83032000))
const uint8 ComTable[]={3,2,1,0,7,6,5,4,};
/*----------------------菜单显示-----------------------*/
extern void Sys_WaitinMS(unsigned int time);
void DelayNS(uint16 dly)
{
uint16 i;
for(; dly>0; dly--)
{
for(i=0; i<10; i++);
}
}
unsigned char LCD_Data_Read(void)
{
unsigned char address_data;
OS_ENTER_CRITICAL();
READ_DATA;
address_data=LCD_ADDRESS;
READ_OK;
OS_EXIT_CRITICAL();
return(address_data);
}
unsigned char LCD_Cmd_Read(void)
{
unsigned char address_cmd;
OS_ENTER_CRITICAL();
READ_STATUS;
address_cmd=LCD_ADDRESS;
READ_OK;
OS_EXIT_CRITICAL();
return(address_cmd);
}
void LCD_Cmd_Write(unsigned char cmd)
{
OS_ENTER_CRITICAL();
LCD_ADDRESS=cmd;
WRITE_COMMAND;
WRITE_COMMAND_OK;
OS_EXIT_CRITICAL();
}
void LCD_Data_Write(unsigned char data)
{
OS_ENTER_CRITICAL();
//LCD_Chk_Busy();
LCD_ADDRESS=data;
WRITE_DATA;
WRITE_DATA_OK;
OS_EXIT_CRITICAL();
}
void LCD_Chk_Busy(void)
{
unsigned char busy;//,times;
//times=100;
do
{
busy =(LCD_Cmd_Read() & 0x80);
//times--;
}while(busy);// && times);
}
void LCD_Back_OnOff(uint8 OnOff)
{
if(OnOff==1)
{
IO0SET |=KEY_BL_PIN;
IO3SET |=LCD_BL_PIN;
}
else
{
IO0CLR |=KEY_BL_PIN;
IO3CLR |=LCD_BL_PIN;
}
}
void Lcd_BrightSet(uint8 brightlevel)
{
uint8 i=0;
if(brightlevel>8)
{
brightlevel=0;
}
i=brightlevel*7+7;
LCD_Cmd_Write(0x81); //Sets V0
LCD_Cmd_Write(i); //内部电位器调节对比度
}
void LCM_Inintial(void)
{
Lcd_contr_level=4;
LCD_Cmd_Write(0xE2); //soft reset
LCD_Cmd_Write(0xAE); //Display OFF
LCD_Cmd_Write(0xA2); //1/64 Duty 1/9 Bias
LCD_Cmd_Write(0xE6);
LCD_Cmd_Write(0xCf); // CLOSCK
LCD_Cmd_Write(0xA0); //ADC select --> right
LCD_Cmd_Write(0xC0); //com1 --> com64
LCD_Cmd_Write(0x25); //没用,外部Rb/Ra
Lcd_BrightSet(Lcd_contr_level);
LCD_Cmd_Write(0x2C);//power control
LCD_Cmd_Write(0x2E);//
LCD_Cmd_Write(0x2F); //voltage follower ON regulator ON booster ON
LCD_Cmd_Write(0xA6); //Normal Display (not reverse dispplay)
LCD_Cmd_Write(0xA4); //Entire Display Disable
LCD_Cmd_Write(0xAF); //Display ON
LCD_Cmd_Write(0x40); //Set Display Start Line = com0
LCD_Cmd_Write(0xB0); //Set Page Address = 0
LCD_Cmd_Write(0x10); //Set Column Address 4 higher bits = 0
LCD_Cmd_Write(0x01); //Set Column Address 4 lower bits = 1 , from IC SEG1 -> SEG129
}
void LCD_Init(void)//液晶初始化
{
LcdOn_Count=6000;
Info_Process_Time=5000;
Info_Process_Flag=1;
old_msg_no=19;
LCD_IO_SET();
LCD_RST_LOW;
LCD_RST_HIGHT;
LCD_Back_OnOff(1);
LCM_Inintial();
}
void Set_Lcd_Page(uint8 Page,uint8 Col)
{
LCD_Cmd_Write(ComTable[Page&0x07]|0xB0); //Set Page Address
LCD_Cmd_Write( ((Col+1)>>4) | 0x10); //Set Column Address High Byte
LCD_Cmd_Write( (Col+1)&0x0F ); //Low Byte Colum from 1 -> 129 auto add
}
void Clr_Display(void)
{
uint8 i,j;
LCD_Cmd_Write(0x40); //Set Display Start Line = com0
for(i=0;i<8;i++)
{
LCD_Cmd_Write(0xB0|ComTable[i]); //Set Page Address
LCD_Cmd_Write(0x10); //Set Column Address = 0
LCD_Cmd_Write(0x01); //Colum from 1 -> 129 auto add
for(j=0;j<128;j++)
{
LCD_Data_Write( 0 );
}
}
}
void Display_Capacity(uint8 capcity)
{
uint8 temp;
uint8 dis_buf[28];
uint8 convert_buf[28];
uint32 i,j,k;
for(i=0;i<28;i++)
{
if(i<7)
{
temp=0;
if(capcity>=20)
temp=0xc0;
else if(capcity>=19)
temp=0x80;
if(i==0 || i==6)
dis_buf[i]=0xe0;
else if(i==3)
dis_buf[i]=temp;
else
dis_buf[i]=0x20+temp;
}
else if(i>6 && i<14)
{
temp=0;
if(capcity>10)
{
if(capcity>=18)
capcity=18;
k=capcity-11;
temp=0x00;
while(k)
{
temp|=(1<<k);
k--;
}
if(capcity==18)
temp|=1;
}
if(i==7 || i==13)
dis_buf[i]=0xff;
else
dis_buf[i]=temp;
}
else if(i>13 && i<21)
{
temp=0;
if(capcity>3)
{
if(capcity>=10)
capcity=10;
k=capcity-3;
temp=0x00;
while(k)
{
temp|=(1<<k);
k--;
}
if(capcity==10)
temp|=1;
}
if(i==14 || i==20)
dis_buf[i]=0xff;
else
dis_buf[i]=temp;
}
else
{
temp=0;
if(capcity>=2)
temp=0x03;
else if(capcity>=1)
temp=0x02;
if(i==21 || i==27)
dis_buf[i]=0x07;
else if(i==24)
dis_buf[i]=0+temp;
else
dis_buf[i]=0x04+temp;
}
}
//画图
for(i=0;i<28;i++)
{
temp= dis_buf[i];
convert_buf[i]=0;
for(j=0;j<8;j++)
{
convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
}
}
for(j=0;j<4;j++)
{
Set_Lcd_Page(2+j,121);
for(i=0;i<7;i++)
{
LCD_Data_Write(convert_buf[7*j+i]);
}
}
}
void Lcd_Contr_Adjust(uint8 Level)
{
uint8 cursor;
uint8 cur_num;
uint8 temp;
uint8 dis_buf[122];
uint8 convert_buf[122];
uint32 i,j,k;
k=0;
cur_num=0;
for(i=0;i<122;i++)
{
if(i==0 || i==60 || i==61 || i==121)
{
dis_buf[i]=0xff;
if(i==61)
{
k=0;
cur_num=0;
}
}
else
{
if(i>0 && i<61)
{
cursor=0;
if(i>1 && i<59)
{
if(k<6 && (cur_num<Level))
cursor=0xfc;
k++;
if(k>=7)
{
k=0;
cur_num++;
}
}
dis_buf[i]=0x01+cursor;
}
else
{
cursor=0;
if(i>62 && i<119)
{
if(k<6 && (cur_num<Level))
cursor=0x3f;
k++;
if(k>=7)
{
k=0;
cur_num++;
}
}
dis_buf[i]=0x80+cursor;
}
}
}
for(i=0;i<122;i++)
{
temp= dis_buf[i];
convert_buf[i]=0;
for(j=0;j<8;j++)
{
convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
}
}
for(j=0;j<2;j++)
{
Set_Lcd_Page(2+j,30);
for(i=0;i<61;i++)
{
LCD_Data_Write(convert_buf[61*j+i]);
}
}
gbchar_disp8(2,18, '-',0,0);
gbchar_disp8(2,30, '+',1,0);
}
//start:开始的坐标,end:结束的坐标
void Display_WaitCard(uint8 wait)
{
uint8 cursor;
uint8 cur_num;
uint8 temp;
uint8 dis_buf[244];
uint8 convert_buf[244];
uint32 i,j,k;
k=0;
cur_num=0;
for(i=0;i<244;i++)
{
if(i==0 || i==121 || i==122 || i==243)
{
dis_buf[i]=0xff;
if(i==122)
{
k=0;
cur_num=0;
}
}
else
{
if(i>0 && i<122)
{
cursor=0;
if(i>1 && i<120)
{
if(k<6 && (cur_num<wait))
cursor=0xfc;
k++;
if(k>=7)
{
k=0;
cur_num++;
}
}
dis_buf[i]=0x01+cursor;
}
else
{
cursor=0;
if(i>123 && i<242)
{
if(k<6 && (cur_num<wait))
cursor=0x3f;
k++;
if(k>=7)
{
k=0;
cur_num++;
}
}
dis_buf[i]=0x80+cursor;
}
}
}
for(i=0;i<244;i++)
{
temp= dis_buf[i];
convert_buf[i]=0;
for(j=0;j<8;j++)
{
convert_buf[i]|=((temp>>j)&0x01)<<(7-j);
}
}
for(j=0;j<2;j++)
{
Set_Lcd_Page(2+j,3);
for(i=0;i<122;i++)
{