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

📄 lcdzk.c

📁 使用avr--cc2420模块程序,需要原理图的联系 QQ:120304948
💻 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 + -