?? toucher.c
字號:
#include "allhead.h"
/****************************變量聲明********************************/
extern uchar realtimebuff[7];
extern uchar time_set[7];
extern uchar tx_buff[12]; //存放要發向轉換器的數
//TWI 相關全局變量
extern uchar i2c_rd_buff[32]; //i2c讀出的數最初存放的地方
extern uchar i2c_wt_buff[35]; //寫
extern uchar fhz;
extern uchar canuse[4]; //轉換器的投用情況 按位
extern uchar detuse[33][4]; //所有485節點的投用情況,0,1按位起作用
extern uchar det_link[33]; //探測器或聯動模塊選擇字節段,按位起作用
extern uchar shoubao[9];
extern uchar firstuse1; //判斷電源故障是不是第一次進入用
extern uchar firstuse2;
extern uchar firstuse3;
extern uchar firstuse4; //虧電
extern uchar hibao[32][4]; //高報
extern uchar lobao[32][4]; //低報
extern uchar detector[32][4]; //傳感器
extern uchar communicate[32][4]; //通訊
extern struct
{
uchar bei; //備電
uchar shi; //市電
uchar cong; //從電
}error;
extern struct
{
uchar di[32][4]; //低報
uchar tan[32][4]; //探測器
uchar tong[32][4]; //通訊
uchar gao[32][4]; //高報
}rxerror;
//GAL門相關全局變量
extern uchar gal1data ;
extern uchar gal2data ; //繼電器控制信號1,聯動模塊故障1,聯動輸出都為1
extern uchar gal3data ; //指示燈為共陽極的
extern uchar gal4data ;
extern uchar gal5data ;
extern uint baojingaddr;
extern uint guzhangaddr; //第一次取用的最新故障地址
extern uint guzhangaddr2; //已存住的最新故障地址
extern uint baojingaddr2;
extern uint onaddr2 ; //開關機用
extern uchar canuse[4];
extern uchar detuse[33][4]; //所有485節點的投用情況,0,1按位起作用
extern uchar zhongbuff[32][10]; // 一次接收的轉換器的數
extern uint cuo1;
extern uint cuo2;
extern uint cuo3; // 實時界面用 實時報警,故障數
extern uint cuo4;
extern uchar keyc;
extern uchar gal1data;
extern uchar gal2data;
extern uchar gal3data;
extern uchar gal4data;
//extern uchar first_clarm[11]; //存放首次報警信息
extern uchar first_alarm;
extern uchar wunai;
extern uchar wunai2; //投用
extern uchar yure_flag;
extern uchar errorflag;
extern uchar can_cuo_flag[32];
extern uint realaddr2; //存RAM錯誤信息用
uchar flag_local; // 聯動故障用
//系統坐標
uchar xh; //橫坐標高字節
uchar xl; //橫坐標低字節
uchar yh; //縱坐標高字節
uchar yl; //縱坐標高字節
//矩形的右下角坐標
uchar x2h; //橫坐標高字節
uchar x2l; //橫坐標低字節
uchar y2h; //縱坐標高字節
uchar y2l; //縱坐標高字節
//common use
uchar i;
uchar j;
//系統坐標轉換后坐標
uint x;
uint y;
uchar biaozhi; //USART1接收中斷數據標志
uchar key; //鍵值
uchar RXC_BUFF[15]; //觸摸屏發送的數據
uchar jiemian; //界面標志
//開關機記錄顯示用
uint addre2; //外部E2的當前地址
uchar addre2hi; //地址高址
uchar addre2lo; //地址低址
uchar num_open=1; //存放開關機記錄中的編號
uchar num_open2; //存放翻頁后的第一個開關機記錄編號
uchar data[16]; //存放外部E2中的開關機記錄中信息
uchar baojing[16]; //存放外部E2中的報警記錄信息
uchar guzhang[8]; //存放外部E2中的故障記錄信息
uint chroma[16] ; //顯示的濃度
uchar c[3]; //通道關聯探測器編號及高低報情況
uint ccc=0; //等待CAN返回計數延時用
/********************************************************************/
uchar pass1[6]; //更改密碼所存數組
uchar pass2[6]; //確認密碼所存數組
uchar pass3[6]; //輸入密碼所存數組
uchar pass[6]; //存放E2中讀出的密碼
uchar pass4[6]={0x04,0x01,0x08,0x00,0x06,0x09}; //設定的超級密碼
uchar time[22]; //存放時間設定后的值
uchar high[4]; //高報濃度
uchar low[4]; //低報濃度
uchar passage1[6]; //探測器高報關聯的通道1
uchar passage2[6]; //探測器低報關聯的通道2
//uchar passage3[4]; //通道3
//uchar passage4[4]; //通道4
uchar linkage1[2]; //存放控制外設界面中輸入的轉換器編號
uchar linkage2[2]; //存放控制外設界面中輸入的探測器編號
uchar linkage[4]; //存放系統設置界面中輸入的調零地址號
uchar biaoding[4]; //存放系統設置界面中輸入的標定值
uchar old_can[2]; //原來轉換器地址
uchar new_can[2]; //修改后轉換器地址
uchar can[2]; //修改地址界面中can的地址
uchar old_det[2]; //原來探測器地址
uchar new_det[2]; //修改后探測器地址
uchar index_link1; //指向linkage1數組中的數
uchar index_link2; //指向linkage2數組中的數
uchar index_link; //指向linkage數組中的數
uchar bd; //指向biaoding數組中的數
//uchar send_buff[8];
//uchar recv_buff[8];
uchar p1; //對應old_can數組
uchar p2; //對應new_can數組
uchar p3; //對應can數組
uchar p4; //對應old_det數組
uchar p5; //對應new_det數組
uchar m1; //對應pass1數組
uchar m2; //對應pass2數組
uchar m3; //對應pass3數組
uchar m; //對應pass數組
uchar n; //對應time數組
uchar n1; //對應high數組
uchar n2; //對應low數組
uchar way1; //通道1標志
uchar way2; //通道2標志
//uchar way3; //通道3標志
//uchar way4; //通道4標志
uchar page; //翻頁標志
uchar flag_can; //can標志
//uchar flag_sound; //按鍵音
uchar flag_print; //打印標志
uchar gas_type; //氣體類型
uchar unit_chroma; //濃度單位
uchar info_det[4]; //存放高低報濃度轉換后的值
uchar chro_bd[2]; //存放標定濃度
uchar choice; //選擇
uchar regist; //注冊
uchar denglu; //登錄
uchar password; //判斷是超級密碼還是普通密碼
uchar num_can; //can編號
uchar num_det; //節點編號
uchar num_det2; //已選擇的節點的編號
uchar addr_can; //控制外設界面中轉換器編號
uchar addr_can1; //探測器界面中高報關聯的轉換器編號
uchar addr_can2; //探測器界面中低報關聯的轉換器編號
uchar addr_can3; //系統設置界面中調零的轉換器編號
//uchar addr_can3; //聯動界面中通道3關聯的轉換器編號
//uchar addr_can4; //聯動界面中通道4關聯的轉換器編號
uchar addr_det; //控制外設界面中探測器編號
uchar addr_det1; //探測器界面中高報關聯的探測器編號
uchar link1; //探測器界面中高報關聯的通道編號
uchar addr_det2; //探測器界面中低報關聯的探測器編號
uchar link2; //探測器界面中低報關聯的通道編號
uchar addr_det3; //系統設置界面調零的探測器編號
//uchar addr_det3; //聯動界面中通道3關聯的探測器編號
//uchar addr_det4; //聯動界面中通道4關聯的探測器編號
//uchar high_low1; //聯動界面中通道1關聯的高低報情況
//uchar high_low2; //聯動界面中通道2關聯的高低報情況
//uchar high_low3; //聯動界面中通道3關聯的高低報情況
//uchar high_low4; //聯動界面中通道4關聯的高低報情況
uchar channel; //存放通道的吸合斷開情況
uchar cha_local; //存放本地通道的吸合斷開情況
uchar state_cha;
//光標坐標
uchar X1H;
uchar X1L;
uchar Y1H;
uchar Y1L;
uchar X2H;
uchar X2L;
uchar Y2H;
uchar Y2L;
uint X1; //光標左上角橫坐標
uint Y1; //光標左上角縱坐標
uint X2; //光標右下角橫坐標
uint Y2; //光標右下角縱坐標
/************************轉換函數*****************************/
//對顏色位進行處理的轉換
void zhuanhuan1(void)
{
X1=(X1H&0x03); //將X1H,X1L轉換成16位數X1,將高6位清零
X1=(X1<<8);
X1=X1+X1L;
X1H=(X1H&0xfc); //恢復X1H的高6位,低兩位清零
}
void zhuanhuan2(void)
{
Y1=Y1H&0x03; //將Y1H,Y1L轉換成16位數Y1,將高6位清零
Y1=Y1<<8;
Y1=Y1+Y1L;
Y1H=Y1H&0xfc; //恢復Y1H的高6位
}
void zhuanhuan3(void)
{
uchar x=0; //將16位數X1的高低位分離
X1L=X1; //低8位給X1L
x=X1>>8;
X1H=X1H|x; //高8位處理后給X1H
}
void zhuanhuan4(void)
{
uchar y=0; //將16位數Y1的高低位分離
Y1L=Y1; //將低8位給Y1L
y=(Y1>>8);
Y1H=(Y1H|y); //高8位處理后給Y1H
}
//顏色位沒有處理的轉換
void zhuanhuan(void)
{
x=xh;
x=x<<8;
x=x+xl; //將8位數xh,xl轉換成16位數x,高位保持不變
y=yh;
y=y<<8;
y=y+yl;
}
void zhuanhuan5(void)
{
uchar x=0; //將16位數X2的高低位分離
X2L=X2; //低8位給X2L
x=X2>>8;
X2H=x; //高8位給X2H
}
void zhuanhuan6(void)
{
uchar y=0; //將16位數Y2的高低位分離
Y2L=Y2; //將低8位給Y2L
y=Y2>>8;
Y2H=y; //高8位給Y2H
}
void zhuanhuan7(uchar temp1,uchar temp2)
{
x=xh;
x=x<<8;
x=x+xl;
x=x+temp1; //報警界面中的位置轉換
xl=x;
xh=x>>8;
y=yh;
y=y<<8;
y=y+yl;
y=y+temp2;
yl=y;
yh=y>>8;
}
/**************************坐標變化函數*****************************/
void zbzj(void) //液晶坐標增加
{
zhuanhuan1(); //8位數X1H,X1L轉換為16位,高6位清零
zhuanhuan2(); //8位數Y1H,Y1L轉換為16位,高6位清零
X1=X1+6;
X2=X1;
Y2=Y1+15;
zhuanhuan3(); //將16位數X1的高低位分離
zhuanhuan4(); //將16位數Y1的高低位分離
zhuanhuan5(); //將16位數X2的高低位分離
zhuanhuan6(); //將16位數Y2的高低位分離
}
void zbjs(void) //液晶坐標減少
{
zhuanhuan1(); //8位數X1H,X1L轉換為16位,高6位清零
zhuanhuan2(); //8位數Y1H,Y1L轉換為16位,高6位清零
X1=X1-6;
X2=X1;
Y2=Y1+15;
zhuanhuan3(); //將16位數X1的高低位分離
zhuanhuan4(); //將16位數Y1的高低位分離
zhuanhuan5(); //將16位數X2的高低位分離
zhuanhuan6(); //將16位數Y2的高低位分離
}
/************************************************************************************/
/****************************************顯示****************************************/
/************************************************************************************/
/***********************************************************************/
/**************顯示變量****************/
void xianshi(uint num)
{
uchar p=0,q=0;
uint temp[5];
uint temp1=0,temp2=0;
uint temp3=0;
temp2=num;
temp3=10000;
for(p=0;p<5;p++)
{
temp1=temp2/temp3;
temp2=temp2%temp3;
temp3=temp3/10;
temp[p]=temp1+0x30; //將要顯示的數放在temp數組
}
//功能: 將一個uint型的數顯示出來,但是第一個非零數字前的零要省略
for(p=0;p<4;p++)
{
if(temp[p]!=0x30)
break;
}
wdr();
for(q=0;q<p;q++)
{
xszf(0x31,0x20); //如果開始的數為零,則省略
}
for(q=p;q<5;q++)
{
xszf(0x31,temp[q]); //顯示出部位零的數
}
}
/*********************************************************/
void menu(void) //菜單
{
wdr();
juxing(0xe0,0x00,0x04,0x00,0x00,0x50,0x00,0x2a); //(0x00,0x00,0x50,0x2a)
juxing(0xe0,0xa0,0x04,0x00,0x00,0xf0,0x00,0x2a); //(0xa0,0x00,0xf0,0x2a)
juxing(0xe1,0x40,0x04,0x00,0x01,0x90,0x00,0x2a); //(0x140,0x00,0x190,0x2a)
xtzb(0x00,0x0f,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x20); //查
xszf(0x34,0x21); //看
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x58);
xszf(0x31,0x29);
xtzb(0x00,0xaf,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x22); //設
xszf(0x34,0x23); //置
wdr();
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x59);
xszf(0x31,0x29);
xtzb(0x01,0x4f,0x00,0x0d);
fdbs(0x04);
xszf(0x34,0x24); //控
xszf(0x34,0x25); //制
fdbs(0x14);
xszf(0x31,0x28);
xszf(0x31,0x5a);
xszf(0x31,0x29);
}
void kong(uchar temp1,uchar temp2) //空格
{
uint temp=0;
for(temp=0;temp<temp2;temp++)
{
if(temp1==0x33) //如果是字符集3中的空格
fdbs(0x04); //不放大
else if(temp1==0x31) //如果是字符集1中的空格
fdbs(0x14); //放大1倍
else
NOP();
xszf(temp1,0x20); //顯示空格
wdr();
}
}
/****************列表界面的第一行顯示***************/
void bank1(void)
{
wdr();
xszf(0x34,0x26); //編
xszf(0x34,0x27); //號
kong(0x33,0x02);
xszf(0x34,0x2a); //濃
xszf(0x34,0x2b); //度
wdr();
kong(0x33,0x02);
xszf(0x34,0x34); //狀
xszf(0x34,0x35); //態
}
/****************報警界面的第一行顯示**************/
void bank2(void)
{
xszf(0x34,0xd6); //轉
xszf(0x34,0xd7); //換
xszf(0x34,0xd8); //器
kong(0x33,0x01);
xszf(0x34,0x85); //探
xszf(0x34,0x86); //測
xszf(0x34,0x84); //器
kong(0x33,0x01);
xszf(0x34,0x3f); //報
xszf(0x34,0x40); //警
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -