📄 main.c
字号:
// Header:
// File Name:
// Author: Wan Ning
// Date: 2007.10.20
#include <REG591.H>
#include <C591_def.h>
#include <ABSACC.H>
#include <STDIO.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include "diagnosis.h"
#define SW_NUM 30
#define PAGE12_BASE_Y 4
#define COM8279 XBYTE[0x9fff]
#define DAT8279 XBYTE[0x9eff]
uchar idata Key;
bit NewKey = 0;
xdata enum Page
{MenuPage, Page1, Page2, Page3, Page4, Page5, Check1, Check2, Check3, Check4, Check5, Check6, Check7, Check8, Check9}
CurrentPage = Page1;
uchar OldMenuItem = 0, MenuItem = 0, Page45OldItem[2] = {0}, Page45Item[2] = {0}, Page45Sel = 0;
uchar idata Count = 28;
uchar idata SelfCheck[4] = {0x01, 0x01, 0x01, 0x01};
uchar idata Sw[2][10] = {0};
uchar idata SortedSw1[2][(SW_NUM+1)/2/8+((SW_NUM+1)/2%8 != 0)] = {0}, SortedSw2[2][SW_NUM/2/8+((SW_NUM+1)/2%8 != 0)] = {0};
uint idata Analog[2][10] = {0};
bit NewSelfCheck = 0, NewSw = 0, NewAnalog = 0, TimingFlag = 0;
uchar code * code Menu[5] = {"(1) 控 制 电 路 (一)", "(2) 控 制 电 路 (二)", "(3) 机 车 运 行 状 态",
"(4) A 节 车 的 单 项 检 测", "(5) B 节 车 的 单 项 检 测"};
uchar code * code SwPrefix[2][SW_NUM] = {
{"零位得电", "零位失电中继/零位延时", "低级延时/自起风机", "牵引制动转换中继", "预备", "励磁91KM",
"励磁92KM", "线路接触器1M", "线路接触器2M", "线路接触器3M", "线路接触器4M", "保护阀287YV",
"受电弓", "主接地恢复线圈97KER/98KER", "恢复562KA", "4KF", "主断合闸线圈", "劈相机中继",
"劈相机启动", "劈相机启动延时", "分相533KT/213KM", "劈相机接触器", "牵引通风机1",
"牵引通风机2", "油泵", "变压器", "制动风机209KM", "制动风机210KM", "压缩机", "主断分合(1-分 0-合)"},
{"412", "415", "417", "405", "433", "454", "439", "471", "472", "473", "474", "217",
"534", "539", "543", "541", "564", "568", "614", "571", "573", "580", "582", "591",
"545", "592", "593", "594", "599", "704"}};
uchar code * code AnalogPrefix[10] = {"15V电压信号: V", "主级位 电压: V", "副级位 电压: V",
"电机1,2电压: V", "电机3,4电压: V", "电机 1 电流: A", "电机 2 电流: A",
"电机 3 电流: A", "电机 4 电流: A", "励 磁 电 流: A"};
uchar code * code SelfCheckPrefix[4] = {"A节车端子柜 I处48路开关量盒", "A节车低压柜II处48路开关量盒",
"B节车端子柜 I处48路开关量盒", "B节车低压柜II处48路开关量盒"};
uchar code * code CheckItem[9] = {"(1) 受电弓检测", "(2) 劈相机检测", "(3) 主断路器检测", "(4) 1M-4M检测",
"(5) 励磁检测", "(6) 预备检测", "(7) 通风机-油泵-变压器检测", "(8) 制动风机-压缩机检测", "(9) 机车无流检测"};
uchar code AnalogFactor[10] = {1, 1, 1, 150, 150, 150, 150, 150, 150, 150};
uchar code CheckTitleOffset[9] = {36, 36, 35, 35, 37, 37, 30, 31, 35};
uchar code Mask[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
//****************************************************************************
void delay500ms(void)
{
uchar xdata i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
//****************************************************************************
// Watchdog Routine
//****************************************************************************
void watchdog()
{
PCON |= 0x10;
T3 = 0x00;
}
//****************************************************************************
// Graphics Special Routine
//****************************************************************************
#define end 0xF0
uchar xdata transdd1,transdd2,transdd3;
uchar xdata cmdc[9] = {0x1B,0x5B,0x00,0x00,0x3B,0x00,0x00,0x00,end};
uchar xdata cmdf[23] = {0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
0x00,0x00,0x00,0x00,end};
void mput(uchar *p) //发送字符串
{
uchar idata i=0;
while(*(p+i)!='\0')
{ S0BUF=*(p+i);
watchdog();
while(TI==0);
TI=0;
i++;
}
}
void transfer2dd(uchar ddd) //整理2位十进制,高位ASCII-》transdd1,低位ASCII-》transdd2
{
transdd1=ddd/10;
transdd2=ddd-transdd1*10;
watchdog();
transdd1=transdd1+0x30;
transdd2=transdd2+0x30;
}
void transfer3ddd(uint ddd) //整理3位十进制
{
uchar d1,d2,d3;
d1=ddd/100;
d2=ddd/10;
d3=ddd%10;
watchdog();
transdd1=d1+0x30;
transdd2=d2-d1*10+0x30;
transdd3=d3+0x30;
}
//////////////////////////////////////
uchar checklen(uchar * pp) //检查以end结束的字符串长度
{
uchar i=0;
while((*(pp+i))!=end)
{
i++;
}
watchdog();
return(i);
}
void msend(uchar * pp) //发送以end结束的字符串
{
uchar i,len;
len=checklen(pp);
for(i=0;i<len;i++)
{
S0BUF=*(pp+i);
watchdog();
while(TI==0);
TI=0;
watchdog();
}
}
void mputchar(uchar dd) //发送一个字符
{
S0BUF=dd;
while(TI==0);
TI=0;
}
///////////////////////////////////////////////
/// 字符命令模式 ///
///////////////////////////////////////////////
void clear()
{
// uchar cmdc[5]={0x1B,0x5B,0x32,0x4A,end};
cmdc[2]=0x32;
cmdc[3]=0x4A;
cmdc[4]=end;
watchdog();
msend(cmdc);
}
///////// 光标 命令
void cursor(uchar x,uchar y)
{
// uchar cmdc[9]={0x1B,0x5B,0x00,0x00,0x3B,0x00,0x00,0x48,end};
transfer2dd(x);
cmdc[2]=transdd1;
cmdc[3]=transdd2;
cmdc[4]=0x3B;
transfer2dd(y);
cmdc[5]=transdd1;
cmdc[6]=transdd2;
cmdc[7]=0x48;
cmdc[8]=end;
watchdog();
msend(cmdc);
}
void setwfc(uchar dd) //front color
{
// uchar cmdc[7]={0x1B,0x5B,0x33,0x00,0x00,0x6D,end};
transfer2dd(dd);
cmdc[2]=0x33;
cmdc[3]=transdd1;
cmdc[4]=transdd2;
cmdc[5]=0x6D;
cmdc[6]=end;
watchdog();
msend(cmdc);
}/*
void setwbc(uchar dd) //back color
{
// uchar cmdc[7]={0x1B,0x5B,0x34,0x00,0x00,0x6D,end};
transfer2dd(dd);
cmdc[2]=0x34;
cmdc[3]=transdd1;
cmdc[4]=transdd2;
cmdc[5]=0x6D;
cmdc[6]=end;
watchdog();
msend(cmdc);
}
////////////////////////////////////////////
/// 图形命令模式 ///
////////////////////////////////////////////
void mpoint(uint x,uint y)
{
// uint cmdf[11]={0x1B,0x21,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x66,end};
transfer3ddd(y);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x66;
cmdf[10]=end;
msend(cmdf);
}*/
void mline(uint x1,uint y1,uint x2,uint y2)
{
// uint cmdf[19]={0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x64,end};
watchdog();
transfer3ddd(x1);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(y1);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
transfer3ddd(x2);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=transdd3;
cmdf[13]=0x3B;
transfer3ddd(y2);
cmdf[14]=transdd1;
cmdf[15]=transdd2;
cmdf[16]=transdd3;
cmdf[17]=0x64;
cmdf[18]=end;
watchdog();
msend(cmdf);
}
void mrectangle(uint x1,uint y1,uint x2,uint y2)
{
// uint cmdf[19]={0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x65,end};
watchdog();
cmdf[0]=0x1B;
cmdf[1]=0x21;
transfer3ddd(x1);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(y1);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
transfer3ddd(x2);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=transdd3;
cmdf[13]=0x3B;
transfer3ddd(y2);
cmdf[14]=transdd1;
cmdf[15]=transdd2;
cmdf[16]=transdd3;
cmdf[17]=0x65;
cmdf[18]=end;
watchdog();
msend(cmdf);
}/*
void mcircle(uint x,uint y,uint rr)
{
// uint cmdf[15]={0x1B,0x21,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x43,end};
transfer3ddd(y);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
transfer3ddd(rr);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=transdd3;
cmdf[13]=0x43;
cmdf[14]=end;
msend(cmdf);
}
void marc(uint x1,uint y1,uint r,uint a1,uint a2)
{
// uint cmdf[23]={0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x67,end};
transfer3ddd(y1);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x1);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
transfer3ddd(r);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=transdd3;
cmdf[13]=0x3B;
transfer3ddd(a1);
cmdf[14]=transdd1;
cmdf[15]=transdd2;
cmdf[16]=transdd3;
cmdf[17]=0x3B;
transfer3ddd(a2);
cmdf[18]=transdd1;
cmdf[19]=transdd2;
cmdf[20]=transdd3;
cmdf[21]=0x67;
cmdf[22]=end;
msend(cmdf);
}
void mellipse(uint x1,uint y1,uint x2,uint y2)
{
// uint cmdf[19]={0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x63,end};
transfer3ddd(y1);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x1);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
transfer3ddd(x2);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=transdd3;
cmdf[13]=0x3B;
transfer3ddd(y2);
cmdf[14]=transdd1;
cmdf[15]=transdd2;
cmdf[16]=transdd3;
cmdf[17]=0x63;
cmdf[18]=end;
msend(cmdf);
}
void mputcharat(uint x,uint y,uint dd) //改
{
// uint cmdf[14]={0x1B,0x21,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x57,end};
transfer3ddd(y);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
// transdata(dd);
transfer2dd(dd);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=0x57;
cmdf[13]=end;
msend(cmdf);
}
void fill(uint x,uint y)
{
// uint cmdf[11]={0x1B,0x21,0x00,0x00,0x00,0x3B,0x00,0x00,0x00,0x61,end};
cmdf[0]=0x1b;
cmdf[1]=0x21;
transfer3ddd(x);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(y);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x61;
cmdf[10]=end;
msend(cmdf);
}
void mputcharat(uint x,uint y,uint dd) //改改改改改改改改改改
{
// uint cmdf[14]={0x1B,0x21,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x57,end};
watchdog();
transfer3ddd(y);
cmdf[2]=transdd1;
cmdf[3]=transdd2;
cmdf[4]=transdd3;
cmdf[5]=0x3B;
transfer3ddd(x);
cmdf[6]=transdd1;
cmdf[7]=transdd2;
cmdf[8]=transdd3;
cmdf[9]=0x3B;
// transdata(dd);
transfer2dd(dd);
cmdf[10]=transdd1;
cmdf[11]=transdd2;
cmdf[12]=0x57;
cmdf[13]=end;
watchdog();
msend(cmdf);
}
void mputwordat(uint x,uint y,uchar * wd)
{
uint mm;
// uint cmdf[14]={0x1B,0x21,0x00,0x00,0x00,0x3B,
// 0x00,0x00,0x00,0x3B,0x00,0x00,0x57,end};
watchdog();
mputchar(0x1B);
mputchar(0x21);
transfer3ddd(y);
mputchar(transdd1);
mputchar(transdd2);
mputchar(transdd3);
mputchar(0x3B);
transfer3ddd(x);
mputchar(transdd1);
mputchar(transdd2);
mputchar(transdd3);
mputchar(0x3B);
// transdata(dd);
mm=*wd;
transfer3ddd(mm);
mputchar(transdd1);
mputchar(transdd2);
mputchar(transdd3);
mputchar(0x3B);
wd++;
mm=*wd;
transfer3ddd(mm);
mputchar(transdd1);
mputchar(transdd2);
mputchar(transdd3);
mputchar(0x57);
watchdog();
}
*/
void setfigfc(uchar dd)
{
// uint cmdf[8]={0x1B,0x21,0x31,0x3B,0x00,0x00,0x73,end};
cmdf[2]=0x31;
cmdf[3]=0x3B;
transfer2dd(dd);
cmdf[4]=transdd1;
cmdf[5]=transdd2;
cmdf[6]=0x73;
cmdf[7]=end;
watchdog();
msend(cmdf);
}
void setfigbc(uchar dd)
{
// uint cmdf[8]={0x1B,0x21,0x32,0x3B,0x30,0x36,0x73,0xf0};
cmdf[2]=0x32;
cmdf[3]=0x3B;
transfer2dd(dd);
cmdf[4]=transdd1;
cmdf[5]=transdd2;
cmdf[6]=0x73;
cmdf[7]=end;
watchdog();
msend(cmdf);
}
//****************************************************************************
//****************************************************************************
// Initialization Routine
//****************************************************************************
void init_timer()
{
TMOD = 0x21;
TH0 = 0; TL0 = 0;
TL1 = 0xfa; TH1 = 0xfa;
}
void init_serial()
{
S0CON = 0x50; PCON = 0x80;
TR1 = 1;
}
void init_8279()
{
COM8279 = 0x01;
COM8279 = 0x3f;
COM8279 = 0xc2;
}
void init_can_controller()
{
CANMOD = 0x01;
P1M2 = P1M2 | 0x02;
CANSTA = 0x01;
CANADR = BTR0;
CANDAT = 0x45;
CANADR = BTR1;
CANDAT = 0x2B;
CANADR = ACR10;
CANDAT = 0x2b;
CANDAT = 0x00;
CANDAT = 0x00;
CANDAT = 0x00;
CANADR = AMR10;
CANDAT = 0x00;
CANDAT = 0xff;
CANDAT = 0xff;
CANDAT = 0xfb;
CANADR = ACFMOD;
CANDAT = 0xff;
CANADR = ACFPRIO;
CANDAT = 0xff;
CANADR = ACFEN;
CANDAT = 0x01;
CANMOD = 0x00;
}
void init_irq()
{
IT1 = 1;
IP0 = 0x02;
IP0H = 0x04;
IP1 = 0x40;
IP1H = 0x40;
IEN0 = 0x86;
IEN1 = 0x40;
}
//****************************************************************************
// Page Display Routine
//****************************************************************************
void clear_screen()
{
watchdog();
clear();
setfigbc(6);
setfigfc(15);
watchdog();
}
void init_menu()
{
uchar i;
clear_screen();
CurrentPage = MenuPage;
cursor(30, 2);
mput("请选择你要进入的页面");
watchdog();
for(i=0;i<5;i++)
{
cursor(5, 4+i*2);
mput(Menu[i]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -