📄 综合编程.c
字号:
break; //返回
}
case 10: //6 //说明按下了数字6键
{ShowPort= LedShowData[6]; //数码管显示数字6
break; //返回
}
case 6: //7 //说明按下了数字7键
{ShowPort= LedShowData[7]; //数码管显示数字7
break; //返回
}
case 14: //8 //说明按下了数字8键
{ShowPort= LedShowData[8]; //数码管显示数字8
break; //返回
}
case 64: //9 //说明按下了数字9键
{ShowPort= LedShowData[9]; //数码管显示数字9
break; //返回
}
case 72: //0/30 //说明按下0/30键
{ShowPort= LedShowData[0]; //数码管显示数字0
break; //返回
}
case 68: //10+ //说明按下10+键
{//在这里填写你自己的代码 //根据你的功能写代码
break; //返回
}
case 76: //20+ //说明按下了20+键
{//在这里填写你自己的代码 //根据你的功能写代码
break; //返回
}
case 36: //CH- //说明按下了CH-键
{//在这里填写你自己的代码 //根据你的功能写代码
break; //返回
}
case 40: //CH+ //说明按下了CH+键
{//在这里填写你自己的代码 //根据你的功能写代码
break; //返回
}
}
}
RecvData=0; //将接收到的数据清零
CountData=0; //将接收计数器清零
HeardData=0; //将接收高低数据变量清零
return; //返回
}
AddData=0; //将定时器计数器清零
ET0=1; //打开定时器中断
}
void ComBreak() interrupt 4 //定义串口通信子程序
{unsigned char RecvData; //定义串口数据接收变量
if(RI==1) //判断是否接收数据
{ RecvData=SBUF; //将接收到的数据放入暂时变量
if(RecvData<10) //判断接收到的数据是否小于10
{
ShowPort=LedShowData[RecvData]; //将接收到的数据通过数码管显示出来
ControlCar(RecvData); //将串口数据置于小于状态
}
SBUF=RecvData; //向电脑返回当前接收到的数据
RI=0; //清除接收中断标志位
}
if(TI==1) //判断是否是发送中断
{
TI=0; //清除发送中断标志位
}
}
void main(void) //主程序入口
{
bit ExeFlag=0; //定义可执行标志位变量
RecvData=0; //将接收变量数值初始化
CountData=0; //将计数器变量数值初始化
AddData=0; //将定时器计数器初始化
HeardData=0; //将高低计数器初始化
LedFlash=1000; //对闪灯数据进行初始化
TMOD=0x01; //选择定时器0为两个16位定时器
TH0=0xFF; //对定时器进行计数值进行初始化
TL0=0x19; //同上,时间大约为25uS
TR0=1; //同意开始定时器0
EX1=1; //同意开启外部中断1
IT1=1; //设定外部中断1为低边缘触发类型
ET0=0;
SCON=80; //设置串口模式为8位数据
TMOD=33; //设置定时/计数器模式
TH1=0xFD; //给定时器1高八位初始化初值
TL1=0xFD; //给定时器1低八位初始化初值
TR1=1; //开启定时器1
ES=1; //开启串口通信功能
REN=1; //开启接收中断标志
EA=1; //总中断开启
ControlCar(1); //将小车置于前进状态
ShowPort=LedShowData[0]; //数码管显示数字0
while(1) //程序主循环
{
while(LedFlash--) //闪灯总延时
{
if(RL1==1) //判断光敏电阻的状态
{ RightLed=0; //将前方右侧指示灯点亮
LeftLed=0; //将前方左侧指示灯点亮
}
else //在光敏电阻为不通的状态下
{
RightLed=1; //将前方右侧指示灯熄灭
LeftLed=1; //将前方左侧指示灯熄灭
}
if(IR1==0) //判断延时期间是否有红外信号输入
{ExeFlag=1; //将可执行标志位置1
}
if(S1==0) //判断是否有S1按下
{
ControlCar(8); //将小车置于停止状态
RunFlag==1; //改变小车运行状态标志位
S1State=!S1State; //改变S1按键标志位
goto NextRun; //跳转到NextRun标签
}
if(S2==0) //判断是否有S2按下
{
ControlCar(1); //将小车置于前进状态
RunFlag==0; //改变小车运行状态标志位
S2State=!S2State; //改变S2按键标志位
goto NextRun; //跳转到NextRun标签
}
FontIRState=FontIR; //前方红外指示灯显示正前方红外探头状态
LeftIRState=LeftIR; //左侧红外指示灯显示前方左侧红外探头状态
RightIRState=RightIR; //右侧红外指示灯显示前主右侧红外探头状态
if(FontIR==0 || LeftIR==1 || RightIR==1) //判断正前方,前左侧,前右侧红外探头状态
{ControlCar(2); //改变小车状态为后退
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
ControlCar(3); //改变小车左转状态
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
Delay(); //调用延时子程序
SB1=!SB1; //将蜂鸣器取反
ControlCar(1); //改变小车为前进状态
SB1=1; //关闭蜂鸣器声音
}
if(B1==0) //判断是否有话筒信号输入
{ if(RunFlag==0) //判断小车当前的运行标志位
{ ControlCar(8); //将小车置于停止状态
RunFlag=1; //改变小车运行标志位
}
else
{ ControlCar(1); //将小车置于前进状态
RunFlag=0; //改变小车运行标志位
}
B1State=!B1State; //将话筒信号指示灯取反
}
}
NextRun: //跳转标签
if(RunFlag==0) //判断运行标志位
{
RunStopState=!RunStopState; //改变小车运行停止状态标志位
}
else
{
RunStopState=1; //将运行停止状态标志位置1
}
LedFlash=1000; //运行闪动时间重设定
if(ExeFlag==0) //判断可执行标志位
{
EX1=1; //开启外部中断1
TR1=1; //开启定时/计数器1
}
ExeFlag=0; //可执行标志位置0
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -