📄 driver.c
字号:
unsigned long int table_address;
unsigned int char_buffer_address;
unsigned long int i,j,k,l,w;
i=0xa1;
j=0x5e;
k=0xa1;
l=0x20;
w=0x1000;
table_address=((qu_code-i)*j+(wei_code-k))*l+w;
char_buffer_address=table_address%0x100;
return(char_buffer_address);
}
//************************************************************************
//显示一个ASCII字符 注:可全屏显示
//************************************************************************
void DISP_ASCII(unsigned char page_address,unsigned char column_address,unsigned char asic_data,unsigned char cs)
{
unsigned char i=0;
unsigned char j=0;
j=cs+1;
GET_ASCII_MODE(asic_data);
if((column_address>56)&&(cs!=3))
{
WRITE_DATA_ADDRESS(page_address,column_address,cs);
for(i=0;i<(64-column_address);i++)
{
WRITE_DATA(ascii_mode[i],cs);
}
WRITE_DATA_ADDRESS(page_address,0,j);
for(;i<8;i++)
{
WRITE_DATA(ascii_mode[i],j);
}
}
else
{
WRITE_DATA_ADDRESS(page_address,column_address,cs);
for(i=0;i<8;i++)
{
WRITE_DATA(ascii_mode[i],cs);
}
}
if((column_address>56)&&(cs!=3))
{
WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
for(i=8;i<(72-column_address);i++)
{
WRITE_DATA(ascii_mode[i],cs);
}
WRITE_DATA_ADDRESS(page_address+1,0,j);
for(;i<16;i++)
{
WRITE_DATA(ascii_mode[i],j);
}
}
else
{
WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
for(i=8;i<16;i++)
{
WRITE_DATA(ascii_mode[i],cs);
// delay(100);
}
}
DISP_ONE_BYTE(page_address,column_address,cs,0);
}
//************************************************************************
//反显示一个ASCII字符 注:可全屏显示
//************************************************************************
void DISP_ASCII_REVERSE(unsigned char page_address,unsigned char column_address,unsigned char asic_data,unsigned char cs)
{
unsigned char i=0;
unsigned char j=0;
j=cs+1;
GET_ASCII_MODE(asic_data);
if((column_address>56)&&(cs!=3))
{
WRITE_DATA_ADDRESS(page_address,column_address,cs);
for(i=0;i<(64-column_address);i++)
{
WRITE_DATA(~ascii_mode[i],cs);
}
WRITE_DATA_ADDRESS(page_address,0,j);
for(;i<8;i++)
{
WRITE_DATA(~ascii_mode[i],j);
}
}
else
{
WRITE_DATA_ADDRESS(page_address,column_address,cs);
for(i=0;i<8;i++)
{
WRITE_DATA(~ascii_mode[i],cs);
}
}
if((column_address>56)&&(cs!=3))
{
WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
for(i=8;i<(72-column_address);i++)
{
WRITE_DATA(~ascii_mode[i],cs);
}
WRITE_DATA_ADDRESS(page_address+1,0,j);
for(;i<16;i++)
{
WRITE_DATA(~ascii_mode[i],j);
}
}
else
{
WRITE_DATA_ADDRESS(page_address+1,column_address,cs);
for(i=8;i<16;i++)
{
WRITE_DATA(~ascii_mode[i],cs);
// delay(100);
}
}
DISP_ONE_BYTE(page_address,column_address,cs,0xff);
}
//*****************************************************
//取ASCII字符的字模(16BYTES)16*8
//*****************************************************
void GET_ASCII_MODE(unsigned char ascii_code)
{
unsigned char i;
unsigned int j;
READ_ONE_PAGE_TO_BUFFER1(ASCII_PAGE_ADDRESS(ascii_code));
j=ASCII_BUFFER_ADDRESS(ascii_code);
ascii_mode[0]=READ_BYTE_FROM_BUFFER1(j);
j++;
for(i=1;i<16;i++)
{
ascii_mode[i]=READ_BYTE_FROM_BUFFER1(j);
j++;
}
}
//*****************************************************
//计算ASCII字符的页地址
//*****************************************************
unsigned int ASCII_PAGE_ADDRESS(unsigned char ascii_code)
{
unsigned int ascii_page_address;
ascii_page_address=ascii_code/0x10;
return(ascii_page_address);
}
//*****************************************************
//计算ASCII字符的页内地址
//*****************************************************
unsigned char ASCII_BUFFER_ADDRESS(unsigned char ascii_code)
{
unsigned char ascii_buffer_address;
ascii_buffer_address=(ascii_code%0x10)*0x10;
return(ascii_buffer_address);
}
//***********************************************************
//显示屏单屏清屏,注:单块屏清
//***********************************************************
void CLEAR_LCD_X(unsigned char cs)
{
unsigned int i,j;
WRITE_DATA_ADDRESS(0x00,0x00,cs);
for(i=0;i<8;i++)
{
WRITE_DATA_ADDRESS(i,0x00,cs);
for(j=0;j<64;j++)
{
WRITE_DATA(0x00,cs);
}
}
}
//*************************************************************
//显示屏整屏清屏
//*************************************************************
void CLEAR_LCD_ALL(void)
{
CLEAR_LCD_X(1);
CLEAR_LCD_X(2);
CLEAR_LCD_X(3);
}
//*******************************************************显示器界面*********************************************************//
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&待机界面部分显示&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
//********************************************************
//进入待机状态
//需要返回待机界面时:lcd_status=0
//********************************************************
void ENTER_ORIGINAL_INTERFACE(void)
{
CLEAR_LCD_ALL();
DISP_CHARACTER(2,32,0xcc,0xa9,1);//泰
DISP_CHARACTER(2,48,0xc9,0xad,1);//森
DISP_CHARACTER(2,0,0xbf,0xc6,2);//科
DISP_CHARACTER(2,16,0xbc,0xbc,2);//技
DISP_ASCII(4,32,ASCII(hour/10),1);//显示时间
DISP_ASCII(4,40,ASCII(hour%10),1);
DISP_ASCII(4,48,':',1);
DISP_ASCII(4,56,ASCII(minute/10),1);
DISP_ASCII(4,0,ASCII(minute%10),2);
DISP_ASCII(4,8,':',2);
DISP_ASCII(4,16,ASCII(second/10),2);
DISP_ASCII(4,24,ASCII(second%10),2);
DISP_CHARACTER(6,0,0xc9,0xee,1);//深
DISP_CHARACTER(6,16,0xdb,0xda,1);//圳
DISP_CHARACTER(6,32,0xcc,0xa9,1);//泰
DISP_CHARACTER(6,48,0xc9,0xad,1);//森
DISP_CHARACTER(6,0,0xb5,0xe7,2);//电
DISP_CHARACTER(6,16,0xd7,0xd3,2);//子
DISP_CHARACTER(6,32,0xb9,0xab,2);//公
DISP_CHARACTER(6,48,0xcb,0xbe,2);//司
if(main_status!=0)
{
UPDATE_GPS_DISP();//显示gps信号
UPDATE_GSM_DISP();
UPDATE_DEFENCE_DISP();
UPDATE_NO_ANSWER_DISP();
}
else
{ //设备初始化...
DISP_CHARACTER(0,0,0xc9,0xe8,1);//设
DISP_CHARACTER(0,16,0xb1,0xb8,1);//备
DISP_CHARACTER(0,32,0xb3,0xf5,1);//初
DISP_CHARACTER(0,48,0xca,0xbc,1);//始
DISP_CHARACTER(0,0,0xbb,0xaf,2);//化
DISP_ASCII(0,16,'.',2);
DISP_ASCII(0,24,'.',2);
DISP_ASCII(0,32,'.',2);
}
//指南针部分
UPDATE_COMPASS_DISP();
lcd_status=1;
son_count=0;
}
//*******************************************************
//待机状态
//待机界面只有有变化的部分才更新
//*******************************************************
void ORIGINAL_INTERFACE(void)
{
if(hour_temp!=hour)
{
DISP_ASCII(4,32,ASCII(hour/10),1);
DISP_ASCII(4,40,ASCII(hour%10),1);
hour_temp=hour;
}
if(minute_temp!=minute)
{
DISP_ASCII(4,56,ASCII(minute/10),1);
DISP_ASCII(4,0,ASCII(minute%10),2);
minute_temp=minute;
}
if(second_temp!=second)
{
DISP_ASCII(4,16,ASCII(second/10),2);
DISP_ASCII(4,24,ASCII(second%10),2);
second_temp=second;
}
if(main_status==0)
{
}
else
{
if(gps_status_temp!=gps_status)
{
UPDATE_GPS_DISP();
gps_status_temp=gps_status;
}
if(signal_count_temp!=signal_count)
{
UPDATE_GSM_DISP();
signal_count_temp=signal_count;
}
if(defence_flag_temp!=defence_flag)
{
UPDATE_DEFENCE_DISP();
defence_flag_temp=defence_flag;
}
}
if(logo_change_time>50000)
{
logo_change_time=0;
if(logo_mark==0)
{
logo_mark=1;
}
else
{
logo_mark=0;
}
if(logo_mark==0)
{
DISP_CHARACTER(2,32,0xcc,0xa9,1);//泰
DISP_CHARACTER(2,48,0xc9,0xad,1);//森
DISP_CHARACTER(2,0,0xbf,0xc6,2);//科
DISP_CHARACTER(2,16,0xbc,0xbc,2);//技
DISP_CHARACTER(6,0,0xc9,0xee,1);//深
DISP_CHARACTER(6,16,0xdb,0xda,1);//圳
DISP_CHARACTER(6,32,0xcc,0xa9,1);//泰
DISP_CHARACTER(6,48,0xc9,0xad,1);//森
DISP_CHARACTER(6,0,0xb5,0xe7,2);//电
DISP_CHARACTER(6,16,0xd7,0xd3,2);//子
DISP_CHARACTER(6,32,0xb9,0xab,2);//公
DISP_CHARACTER(6,48,0xcb,0xbe,2);//司
}
else //畅行无阻
{
DISP_CHARACTER(2,32,0xb3,0xa9,1);//畅
DISP_CHARACTER(2,48,0xd0,0xd0,1);//行
DISP_CHARACTER(2,0,0xcc,0xec,2);//天
DISP_CHARACTER(2,16,0xcf,0xc2,2);//下
DISP_ASCII(6,0,0x77,1); //w
DISP_ASCII(6,8,0x77,1); //w
DISP_ASCII(6,16,0x77,1); //w
DISP_ASCII(6,24,0x2e,1); //.
DISP_ASCII(6,32,0x73,1); //s
DISP_ASCII(6,40,0x7a,1); //z
DISP_ASCII(6,48,0x74,1); //t
DISP_ASCII(6,56,0x61,1); //a
DISP_ASCII(6,0,0x69,2); //i
DISP_ASCII(6,8,0x73,2); //s
DISP_ASCII(6,16,0x65,2); //e
DISP_ASCII(6,24,0x6e,2); //n
DISP_ASCII(6,32,0x2e,2); //.
DISP_ASCII(6,40,0x63,2); //c
DISP_ASCII(6,48,0x6f,2); //o
DISP_ASCII(6,56,0x6d,2); //m
}
}
//指南针部分
}
//********************************************************
//更新gps状态图标
//********************************************************
void UPDATE_GPS_DISP(void)
{
if(gps_status==0) //Gps无输出时显示空格
{
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(0,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(0,40,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,40,2);
}
else if(gps_status==1) //Gps无定位时显示下划线
{
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x60;
single8[4]=0x60;
single8[5]=0x60;
single8[6]=0x60;
single8[7]=0x60;
DISP_8X8_PICTURE(0,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,32,2);
single8[0]=0x60;
single8[1]=0x60;
single8[2]=0x60;
single8[3]=0x60;
single8[4]=0x60;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(0,40,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,40,2);
}
else if(gps_status==2) //Gps有定位时显示G
{
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x30;
single8[5]=0x50;
single8[6]=0x90;
single8[7]=0xf0;
DISP_8X8_PICTURE(0,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x0f;
DISP_8X8_PICTURE(1,32,2);
single8[0]=0x90;
single8[1]=0x50;
single8[2]=0x30;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(0,40,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,40,2);
}
else //其余显示空格
{
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(0,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
single8[3]=0x00;
single8[4]=0x00;
single8[5]=0x00;
single8[6]=0x00;
single8[7]=0x00;
DISP_8X8_PICTURE(1,32,2);
single8[0]=0x00;
single8[1]=0x00;
single8[2]=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -