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

📄 main.c

📁 keil打开-51单片机LCD显示程序 LCD控制模块使用深圳剑拓的串口转VGA模块
💻 C
📖 第 1 页 / 共 4 页
字号:
// 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 + -