#defineCmd
0x00 0x00 0x01 0x01 0x00 0x38 0x0C 0x08 0x01 0x06 P1_7
//低电平选择命令 //跃变到低电平时执行命令
#define Enable #defineDisable #define True #defineFalse
#define LCD_Init #define LCD_CloseCtr
//初始化模式 //关显示 //清屏幕 //显示光标 //忙信号
#define LCD_DispCtr #define LCD_CLS #define LCD_EnterSet #define Busy
//开显示及光标设置
/*-------------------------- 测速/测距/测时模块 -------------------------------*/ #define CircleLength
/*-------------------------------- 控速模块 -----------------------------------*/ #define P03 #define P04 #define P01 #define P02 #define P31 #define P33
/*------------------------------ 菜单选择模块 ---------------------------------*/ #define Line #define Curve #define Normal #define Low #define High
/*********************************************************************************\\ **
/*------------------------------- LCD模块 -------------------------------------*/ void LCDInit(void);
//LCD初始化 //设置写命令模式 //设置读命令模式 //设置写数据模式 //写命令 //写数据 //执行命令 //定位显示地址
void SetWriteCmd(void); void SetReadCmd(void); void SetWriteData(void); void WriteCmd(char cmd); void ExecuteCmd(void);
全局函数声明区
**
\\*********************************************************************************/
0x00 0x01 0x00 0x01 0x02
//0代表直线模式 //1代表S型模式 //0 代表正常速度 //1 代表低速 //2 代表高速
P0_3 P0_4 P0_1 P0_2 P3_3
//后电机 //后电机 //前电机 //前电机 //控制液晶背光
0.132
//小车转一轮的长度为.132m
P0_5
void WriteData(char ddata); void SetXY(char x,char y);
void DisplaySingleChar(char x,char y,char cchar); void DisplayString(char x,char y,char *str); void Delay(unsignedint time); bit IsBusy(void);
void DelayUs(unsignedint time); void DisplayTime(void);
//显示单个字符 //显示一段字符串 //延时主程序 //延时子程序 //判断忙标志函数 //显示时间 //显示平均速度 //显示路程
void DisplayAVGSpeed(void); void DisplayDistance(void);
/*-------------------------- 测速/测距/测时模块 -------------------------------*/
//所有中断初始化
//测速中断 //计算速度和距离
void INTInit(void); void SpeedINT(void);
void ComputeTime(void);
void ComputeSpeedANDDistance(void);
/*-------------------------------- 控速模块 -----------------------------------*/ void CtrSpeedINT(void); void Time0INT(void); void Time1INT(void);
//控速单位时间中断
//时钟中断初始化 //时钟中断初始化
//控速中断
void Clock0_Init(void); void CtrSpeed(void);
void Clock1_Init(void);
/********************************************************************************\\ **
float SpeedCount = 0; float Speed = 0.0;
//测速计数脉冲
//T1中断时间计时 //小车行走的时间
//判断T1是否已经响应中断
全局变量区
**
\\********************************************************************************/
float Distance = 0.0; char Time1INTCount=0; float PassTime=0.00; short IsT0INT=1; bit IsT1INT; short IsT0INT2=1;
char Thx[5]={0xf4,0xf4,0xc5,0xf4,0xff}; char Tlx[5]={0x48,0x48,0x68,0x48,0xff}; char Thx0=0xd8; char Tlx0=0xf0; char Thx1=0xb1; char Tlx1=0xe0;
//3ms,3ms,15ms,3ms
//20ms
short Round=0; short Back=0; short Back0=0; bit Backid; bit Stop=0;
char Area0=0; char Area1=0;
char LowSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime; char LowSpeedArea1PassTime=0; char HighSpeedAreaPassTime=0; char LowSpeedArea2PassTime=0; char ReadyToGo=4;
char flag; bit Roundid=0; char Nocurve=0; char ChangeFlag; char Mode;
bit Running; bit SelectedAll;
bit IsSelectingMode; bit IsSelectingSpeed; bit ModeSelected; char SelectedMode=10; bit Next;
bit SpeedSelected; char SelectedSpeed;
bit ChoosingDisplay; bit SelectedShow; bit SelectedReturn; bit Selected; bit ReturnSelection;
bit AVGSpeedShow; bit TotalDistanceShow;
bit ReturnMain;
//区域变量
//第一个低速区通过时间 //高速区通过时间 //第二个低速区通过时间 //倒计时
//模式和速度是否选择完毕标志//模式选择标志 //速度选择标志 //已经被选择的模式标志 //模式选择是否完毕标志 //Next键标志
//已经被选中的速度方案标志 //速度选择是否完毕标志 //人工选择菜单开始标志 //显示选择标志 //返回选择标志 //确定/返回键选择标志 //返回键启用标志 //平均速度显示标志 //总路程显示标志 //返回主菜单标志
bit AutoDisplay;
bit AutoMode=0; char PassLineID=0; char PassLine=0;
//自动显示标志 //人工选择标志
bit GoToChoosingDisplay;
float PrepareDistance; float FirstDistance; float SecondDistance; float ThirdDistance; int FirstHigh; int SecondHigh; int ThirdHigh; float Rate=1.25; float Count=4;
/********************************************************************************\\ **
/*-------------------------------- void main() {
Delay(40); LCDInit();
//延时等待LCD启动 //初始化LCD
P02=0; P03=0; P04=0; P31=1;
//单片机复位,背光开
P01=0;
主函数 ------------------------------------*/
全局函数实现区
**
\\********************************************************************************/
//5ms时的速度 //时间的倍数
DisplayString(0x0,0,\); DisplayString(0x0,1,\); Delay(300); WriteCmd(LCD_CLS);
//开总中断 //开INT0中断 //INTO边沿触发 //INT1边沿触发
EA=1; EX0=1; IT0=1; EX1=1; IT1=1;
//开INT1中断
SelectedAll=False;
/*------------------------------ 模式选择 ---------------------------------*/
//开始模式和速度选择
DisplayString(0x0,0,\); DisplayString(0x0,1,\); Delay(50); WriteCmd(LCD_CLS);
IsSelectingMode=True; while(1) {
WriteCmd(LCD_CLS);
DisplayString(0x0,0,\);
DisplayString(0x0,1,\);
Delay(300);
while (1)
{ if (Next==True)
break;
if (ModeSelected==True)
{
SelectedMode=Line; break; }
}
if (ModeSelected==True)
{
IsSelectingMode=False; break;
}
if (Next==True)
{ Next=False; WriteCmd(LCD_CLS);
DisplayString(0x0,0,\); DisplayString(0x0,1,\);
Delay(300);
while(1)
//延时消除抖动
//不断检测中断,直到按确定键或是NEXT键
//如果按Next键则直接跳出
//如果按确定键则设置模式为Line并跳出
//如果什么键都没有按下,那么一直显示等待//按下了确定键,退出模式选择
//按下了Next键,显示下一个菜单项
//延时消除抖动
//不断检测中断,直到按确定键或是Next键