📄 lcdzk.c
字号:
#include <mega128.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "typedef.h"
#include "app.h"
#include "attention.h"
#include "Flash.h"
#include "g20modem.h"
#include "g20serialdrv.h"
#include "rtc.h"
#include "serialdrv.h"
#include "timer.h"
#include "UDP.h"
#include "protocol.h"
#include "ombro.h"
#include "ombrodb.h"
#include "lcdzk.h"
#include "data.h"
#include "ADC.h"
unsigned char _cx,_cy;
unsigned char pl;
extern flash unsigned char strk[STR_NUM*16];
extern flash unsigned char str_index[STR_NUM];
extern flash unsigned char hzk[HZ_NUM*32];
extern flash unsigned int hz_index[HZ_NUM];
void write_comddata(unsigned char mode,unsigned char comda)
{
lcd_ddr=0xff;
if (mode)
{
lcd_a0=1;
}
else
lcd_a0=0;
// lcd_a0=mode;
lcd_port=comda;
lcd_wr=0;
lcd_wr=1;
}
unsigned char read_comddata(unsigned char mode)
{
unsigned char i=0;
lcd_port=0;
if (mode)
{
lcd_a0=1;
}
else
lcd_a0=0;
// lcd_a0=mode;
lcd_ddr=0;
lcd_rd=0;
lcd_rd=0;
i=lcd_in;
lcd_rd=1;
return(i);
}
void wait_ok(void)
{
unsigned char i=0;
while((i&3)!=3)
{
i=read_comddata(1);
}
}
void write_comd1(unsigned char comd)
{
lcd_cs=0;
wait_ok();
write_comddata(1,comd);
lcd_cs=1;
}
void write_comd2(unsigned char comd1,unsigned char comd2)
{
lcd_cs=0;
wait_ok();
write_comddata(0,comd1);
wait_ok();
write_comddata(1,comd2);
lcd_cs=1;
}
void write_comd3(unsigned char comd1,unsigned char comd2,unsigned char comd3)
{
lcd_cs=0;
wait_ok();
write_comddata(0,comd1);
wait_ok();
write_comddata(0,comd2);
wait_ok();
write_comddata(1,comd3);
lcd_cs=1;
}
unsigned char read_data(char dir)
{
unsigned char ch;
write_comd1(0xc1+dir*2);
lcd_cs=0;
wait_ok();
ch=read_comddata(0);
return(ch);
}
void writec(char ch)
{
_cx++;
write_comd2(ch,0xc0);
write_comd3(_cx,_cy,0x21);
}
void gotoc(unsigned char x,unsigned char y,unsigned int gf)
{
unsigned int addr;
addr=y;
addr=x+addr*DISPWIDTH+gf;
write_comd3(addr,addr/256,0x24);
}
void gotoxy(unsigned char x,unsigned char y)
{
gotoc(x,y,TOFFSET);
_cx=x;
_cy=y-pl;
write_comd3(_cx,_cy,0x21);
}
void cls(unsigned int ln)
{
unsigned char j=0;
unsigned int i;
write_comd1(0xb0);
lcd_cs=0;
for (i=0;i<ln;i++)
{
while((j&8)!=8)
{
j=read_comddata(1);
}
write_comddata(0,0);
}
write_comd1(0xb2);
}
void disp_string(unsigned char x,unsigned char y,unsigned char *string)
{
unsigned int quwei;
unsigned char qu;
unsigned char wei;
unsigned char i;
unsigned char _x,_y;
_x=x;
_y=y;
while (*string!=0)
// for (j=0;j<=strlen(string);j++)
{
qu=*string;
string++;
wei=1;
for (i=0;i<STR_NUM;i++)
{
if (qu==str_index[i])
{
qu=i;
wei=0;
break;
}
}
if (wei==0)
{
quwei=qu;
quwei=quwei*16;
for (i=0;i<16;i++)
{
gotoc(_x,_y,GOFFSET);
write_comd2(strk[quwei+i],0xc0);
_y++;
}
}
_x++;
_y=_y-16;
}
}
/*void disp_string(unsigned char x,unsigned char y,unsigned char *string)
{
unsigned int quwei;
unsigned char qu;
unsigned char wei;
unsigned char i;
unsigned char _x,_y;
_x=x;
_y=y;
wei=1;
while (*string!=0)
{
qu=*string;
string++;
for (i=0;i<STR_NUM;i++)
{
if (qu==str_index[i])
{
qu=i;
wei=0;
break;
}
}
if (wei==0)
{
quwei=qu;
quwei=quwei*16;
for (i=0;i<16;i++)
{
gotoc(_x,_y,GOFFSET);
write_comd2(strk[quwei+i],0xc0);
_y++;
}
}
_x++;
_y=_y-16;
}
}
void disp_string(unsigned char x,unsigned char y,unsigned char *string)
{
unsigned char j=0;
gotoxy(x,y);
write_comd1(0xb0);
lcd_cs=0;
while (*string>0x19)
{
while((j&8)!=8)
{
j=read_comddata(1);
}
write_comddata(0,*string-0x20);
_cx++;
string++;
}
write_comd1(0xb2);
gotoxy(_cx,y);
}
*/
void disp_hzstr(unsigned char x, unsigned char y, unsigned char flash *string)
{
unsigned int quwei;
unsigned char qu;
unsigned char wei;
unsigned char i;
unsigned char _x,_y;
_x=x;
_y=y;
while (*string!=0)
{
qu=*string;
string++;
wei=*string;
string++;
quwei=qu;
quwei=quwei*256+wei;
for (i=0;i<HZ_NUM;i++)
{
if (quwei==hz_index[i])
{
qu=i;
wei=0;
break;
}
}
if (wei==0)
{
quwei=qu;
quwei=quwei*32;
for (i=0;i<16;i++)
{
gotoc(_x,_y,GOFFSET);
write_comd2(hzk[quwei+i*2],0xc0);
write_comd2(hzk[quwei+i*2+1],0xc0);
_y++;
}
}
_x++;
_x++;
_y=_y-16;
}
}
void disp_nhz(unsigned char x,unsigned char y,unsigned char no)
{
unsigned char i,j;
unsigned char _x,_y;
_x=x;
_y=y;
do
{
for (i=0;i<16;i++)
{
gotoc(_x,_y,GOFFSET);
write_comd1(0xc5);
lcd_cs=0;
wait_ok();
j=read_comddata(0);
j=~j;
write_comd2(j,0xc0);
write_comd1(0xc5);
lcd_cs=0;
wait_ok();
j=read_comddata(0);
j=~j;
write_comd2(j,0xc0);
_y++;
}
_x++;
_x++;
_y=_y-16;
}while(--no);
}
void cright(void)
{
_cx++;
write_comd2(0,0xc1);
write_comd3(_cx,_cy,0x21);
}
void cleft(void)
{
_cx--;
write_comd2(0,0xc3);
write_comd3(_cx,_cy,0x21);
}
void clspage(unsigned char page_num,unsigned char page_type)
{
unsigned int i;
i=TOFFSET;
i=i*page_type;
gotoc(0,page_num*(16*DISPHIGH-112*page_type),i);
i=DISPWIDTH;
i=i*(16*DISPHIGH-112*page_type);
cls(i);
}
void read_string(unsigned char si,unsigned char * num)
{
unsigned char i;
for (i=0;i<si;i++)
num[i]=read_data(0)+0x20;
num[si]=0;
}
void screen_line(unsigned char ln)
{
unsigned int addr;
addr=ln;
addr=addr*DISPWIDTH+TOFFSET;
write_comd3(addr,addr/256,0x40);
pl=ln;
}
/*LCD Reset Subroutine */
void LCD_Reset(void)
{
DDRG=0x07;
PORTG |= 0x04;
timer_delay(100);
PORTG &= 0x1B;
timer_delay(1500);
PORTG |= 0x04;
timer_delay(200);
}
void InitialDisplay(void)
{
unsigned char strdata[15];
LCD_Reset();
timer_delay(200);
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTA=0xFF;
DDRA=0xFF;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In
// State7=0 State6=0 State5=1 State4=1 State3=0 State2=1 State1=P State0=P
PORTC=0x37;
DDRC=0xFC;
timer_delay(200);
gotoc(0,0,GOFFSET);
cls(0x2000);
write_comd1(0x80);
cursor_off;
cursor(7);
write_comd3(DISPWIDTH,0,0x41);
write_comd3(0,0,0x42);
write_comd3(DISPWIDTH,0,0x43);
timer_delay(1000);
screen_line(0);
graph_page(0);
disp_hzstr(8,10,"系统初始化");
display_no(NAME_NO);
disp_hzstr(2,148,"十分钟降雨");
disp_hzstr(4,166,"当日降雨");
disp_hzstr(4,184,"连续降雨");
disp_hzstr(0,202,"风速");
disp_hzstr(16,202,"风向 度");
disp_hzstr(0,220,"温度 C");
disp_hzstr(16,220,"湿度");
memset(strdata, 0x00, 15);
sprintf(strdata,": mm");
disp_string(12,148,strdata);
disp_string(12,166,strdata);
disp_string(12,184,strdata);
sprintf(strdata,": m/s");
disp_string(4,202,strdata);
sprintf(strdata,":");
disp_string(20,202,strdata);
sprintf(strdata,":");
disp_string(4,220,strdata);
sprintf(strdata,": %%");
disp_string(20,220,strdata);
}
void disp_real(void)
{
unsigned char strdata[15];
memset(strdata, 0x00, 15);
sprintf(strdata,"%6.1f",(float)(ombro_ten*fGrid));
disp_string(14,148,strdata);
sprintf(strdata,"%6.1f",(float)(ombro_day*fGrid));
disp_string(14,166,strdata);
sprintf(strdata,"%6.1f",(float)(ombro_continue*fGrid));
disp_string(14,184,strdata);
sprintf(strdata," ");
disp_string(6,202,strdata);
sprintf(strdata,"%3.1f",(float)(wind_speed)*0.05);
disp_string(6,202,strdata);
vane_deal();
sprintf(strdata," ");
disp_string(21,202,strdata);
sprintf(strdata,"%4.1f",(float)(vane)*2.8125);
disp_string(21,202,strdata);
ADC_deal();
sprintf(strdata," ");
disp_string(6,220,strdata);
sprintf(strdata,"%3d",temperature);
disp_string(6,220,strdata);
sprintf(strdata," ");
disp_string(22,220,strdata);
sprintf(strdata,"%3d",humidity);
disp_string(22,220,strdata);
}
void disp_alarm(void)
{
unsigned char strdata[15];
memset(strdata, 0x00, 15);
sprintf(strdata,"%5.1f",my_ombset.fPatrol10m);
disp_string(20,0,strdata);
sprintf(strdata,"%5.1f",my_ombset.fPatrol1h);
disp_string(20,16,strdata);
sprintf(strdata,"%5.1f",my_ombset.fPatrol1d);
disp_string(20,32,strdata);
sprintf(strdata,"%5.1f",my_ombset.fPatrolCon);
disp_string(20,48,strdata);
sprintf(strdata,"%5.1f",my_ombset.fRisk10m);
disp_string(20,64,strdata);
sprintf(strdata,"%5.1f",my_ombset.fRisk1h);
disp_string(20,80,strdata);
sprintf(strdata,"%5.1f",my_ombset.fRisk1d);
disp_string(20,96,strdata);
sprintf(strdata,"%5.1f",my_ombset.fRiskCon);
disp_string(20,112,strdata);
}
void disp_title(unsigned char page)
{
unsigned char i;
unsigned char strdata[30];
clspage(0,0);
clspage(0,1);
switch (page)
{
case 1:
disp_hzstr(8,20,"连接无线网络");
break;
case 2:
disp_hzstr(2,0,"十分钟出巡警戒值");
disp_hzstr(2,16,"一小时出巡警戒值");
disp_hzstr(2,32,"日降雨出巡警戒值");
disp_hzstr(0,48,"连续降雨出巡警戒值");
disp_hzstr(2,64,"十分钟危急警戒值");
disp_hzstr(2,80,"一小时危急警戒值");
disp_hzstr(2,96,"日降雨危急警戒值");
disp_hzstr(0,112,"连续降雨危急警戒值");
memset(strdata, 0x00, 30);
sprintf(strdata,": mm");
disp_string(18,0,strdata);
disp_string(18,16,strdata);
disp_string(18,32,strdata);
disp_string(18,48,strdata);
disp_string(18,64,strdata);
disp_string(18,80,strdata);
disp_string(18,96,strdata);
disp_string(18,112,strdata);
disp_alarm();
break;
case 3:
disp_hzstr(4,20,"请输入密码");
memset(strdata, 0x00, 30);
sprintf(strdata,":****");
disp_string(14,20,strdata);
break;
case 4:
disp_hzstr(4,50,"正在打印,请等待。。。");
break;
case 5:
disp_hzstr(6,4,"1:设置警戒值");
disp_hzstr(6,24,"2:设置手机号");
disp_hzstr(6,44,"3:设置时钟");
disp_hzstr(6,64,"4:查询数据");
disp_hzstr(6,84,"5:打印结果");
disp_hzstr(4,110,"请按数字键选择或取消!");
break;
case 6:
disp_hzstr(0,64,"时钟");
memset(strdata, 0x00, 30);
sprintf(strdata, "20%02d-%02d-%02d %02d:%02d:%02d", CLK_YEAR, CLK_MONTH, CLK_DAY,
CLK_HOUR, CLK_MIN, CLK_SEC);
disp_string(6,64,(unsigned char*)strdata);
break;
case 7:
disp_hzstr(2,24,"报警手机号");
memset(strdata, 0x00, 30);
for (i=0;i<11;i++)
{
strdata[i]=MobilePhone[i];
}
disp_string(14,24,strdata);
disp_hzstr(2,64,"雨量计量程");
memset(strdata, 0x00, 30);
sprintf(strdata,": mm");
disp_string(12,64,strdata);
sprintf(strdata,"%3.1f",fGrid);
disp_string(14,64,strdata);
break;
case 8:
display_no(NAME_NO);
break;
case 9:
display_no(NAME_NO);
disp_hzstr(0,38,"站点ID号:");
disp_hzstr(2,68,"IP地址:");
myip_no(NAME_NO);
break;
default:
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -