


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PWM调速循迹智能小车程序精编32m/*控速模块*/#defineP03 P0_3 );DisplayString(0x0, 1, DesignedBy202); Delay (300);WriteCmd(LCD_CLS);EA二 1; );Delay (50);WriteCmd(LCD_CLS);IsSelectingMode二True;wh订e (1)WriteCmd(LCD_CLS);DisplayString(0x0, 0, LineMode “);DisplayString(0x0, 1, "Next Yes);Delay (300):“);DisplayString(0x
2、0, 1, Designedby202); if(SelectedMode=Line&&AutoMode=0) flag=AreaO;elseflag=l;while (flag<5)if(AutoMode二二1);DisplaySingleChar(0x07, 1, PassTime2);DisplaySingleChar(0x08, 1, PassTime3);elseDisplaySingleChar(0x04, 1, PassTimel);DisplaySingleChar(0x05, 1, PassTime2);DisplaySingleChar (0x06,1
3、,');DisplaySingleChar(0x07, 1, PassTime3);DisplaySingleChar(0x08, 1, PassTime4);/*显示平均速度*/voidDisplayAVGSpeed(void)intSpeedl二0x30;DisplaySingleChar(0x07, 1, Speed2);DisplaySingleChar(0x08, 1, Speed3);*/ voidDisplayDistance(void)intDistance1=0x30;intDistance2=0x30;intDistance3二0x30;intDistance4=0
4、x30;if (int) (DistancelOO)<100)Distancel+二0;Distance2+=(int) (Distance*100)/10;Distance3+=(int) (Distance*100)%10;elseif (int) (DistancelOO)>100&&(int)(DistancelOO)<1000)Distancel+=(int) (Distance*100)/100;Distance2+=(int) (Distance*100)/10%10;Distance3+=(int) (Distance*100)%10;else
5、 Distancel+=(int)(Distance*100)/1000; Distance2+=(int)(Distance*100)/100%10: Distance3+=(int)(Distance*100)/10%10;Distance4+=(int) (Distance*100)%10;if (int) (DistancelOO)<1000)DisplaySingleChar(0x05, 1, Distancel);DisplaySingleChar (0x06,1,');DisplaySingleChar(0x07, 1, Distance2);DisplaySing
6、leChar(0x08, 1, Distance3);elseDisplaySingleChar(0x04, 1, Distancel);DisplaySingleChar(0x05, 1, Distance2);DisplaySingleChar(0x06, 1,');DisplaySingleChar(0x07, 1, Distance3);DisplaySingleChar(0x08, 1, Distance4);*/ voidINTInit(void)EA=1; 开总中断ITO=1; /INTO边沿触发PXO=1; /INTO优先级为高级EX1=1; 开 INTI 中断IT1二
7、1; /INT1边沿触发PX1=1; /INTI优先级为高级ClockO_Init(); /初始化时钟中断TM0D=0xll; /T0/T1 定时方式 1ETO二0x01; /开 T0 中断ETl=0x01; 开 T1 中断voidClockO_Init(void)TR0=0x01; 启动 TOTHO二ThxO; /定时初值TLO=TlxO;voidClockl_Init(void)TR1 二0x01; 启动 T1THl=0x3C; 定时初值-50ms中断一次TLl=0x0B0;/<y<y<y彳、彳*.、r、r、r、r、r、叫、r、r、叫、叫、r、"卜 叫叫、&qu
8、ot;卜 叫、"卜 叫、"卜 叫、叫、叫、"卜 叮、叫叫、*中断处理程序*>£ >r >V# >!# %T >!# >!# %T >!# %T >!# %T >!# %T >!# %T >!xl#T #T%#T> #T #T #T #T #T #T #T #T #T #T #T #T #T #T #77£x %ix £xixki>、*.、x.xx.> XaX xTx x<x"卜 “卜"、"卜卜"卜"
9、;、"卜"、"卜卜"卜.卜卜、"卜/#7x #Tx #Tx <TS#7/*外部中断0* 外部中断0有两个功能(1) 作为菜单选择的Next键(2) 作为测速的计数器*/voidSpeedINT (void) interruptO /中断 INTOif (SelectedAll=False) /如果模式和速度还没有选择完 毕,则此中断作为Next 键Next=True;if(Running=True) /如果模式和速度已经选择完毕,则 此中断作为测速中断SpeedCount+;if (ChoosingDisp 1 ay=True) /如果是
10、在选择要显示的内容Next=True;/*外部中断外部中断1有两个功能(1) 作为菜单选择的确定键/返回键(2) 控速*/voidCtrSpeedINT (void) interrupt2 /中断 INTI if (SelectedAll=False) /如果模式和速度还没有选择完 毕,则此中断作为确定键if(IsSelectingMode=True) /模式选择标志ModeSelected二True;if(IsSelectingSpeed=True) /速度选择标志SpeedSelected二True;if (Running=True) /如果模式和速度选择已经完毕,则 此中断作为控速中断i
11、f(AreaO-O) 经过第一条铁线(即起跑线),开始计 时,开始测速EXO=1;Clockl_Init ();P31二0; 过起跑线,背光灭if (Area0=l)LowSpeedArealStartTime=PassTime; /读取进入第一个低 速区的时刻if(AreaO=2)LowSpeedArealEndT ime=PassT ime: /读取离开第一个低速 区的时刻,也就是进入高速区的时刻if(AreaO=3)HighSpeedAreaEndT ime=PassTime: / / 读取离开高速区的时 刻,也就是进入第二个低速区的时刻if(AreaO=4)LowSpeedArea2E
12、ndTime=PassTime: /读取离开第二个低速去的时刻if (AutoMode=l) /自动模式PassLine+;switch(PassLine)case5 :PassLineID=l:break;caselO:PassLineID=2;break;default:PassLineID=PassLineID;break;else if (SelectedMode二二Line) /直线模式 ThxO=ThxAreaO+;TlxO=TlxAreal+;if (Area0=5)EXI二0;else /S型模式Nocurve+;Round+;if (Roundid=二1&&R
13、ound=2)Round+;Roundid=0;Back=0;Back0=0;EXI二0;IE1=O;if(AutoDisplay=True)GoToChoosingDisplay=True;if (ChoosingDisp1ay=True)SelectedShow二True;SelectedReturn二True;Selected二True;/*TO中断*TO中断用来输出方波以控制速度*/ voidTimeOINT (void) interruptl /TO 中断 if(AutoMode=l)IsTOINT*二1;switch(PassLine) case2 :PrepareDistance
14、=Distance;break;case3 :FirstDistance二Distance-PrepareDistance;break;case4 :SecondDistance二Distance-PrepareDistance-FirstDistance;break;case5 :ThirdDistance=Distance-PrepareDistance-FirstDistance-SecondDistance;break;defauIt:break;switch(PassLinelD)caseO :if(IsTOINT二二1)TR0=0x01;TH0=0xec;TL0=0x78; /5m
15、selseTR0=0x01;TH0=0xb1;TL0=0xe0; /20msbreak;easel :if (PassLine=5)FirstHigh=(int) (65536-20*FirstDistance/ (15*Count*Rate-FirstDistance)*1000);SecondHigh=(int)(65536-20*SecondDistance/ (15*Rate-SecondDistance)*1000);ThirdHigh=(int)(65536-20*FirstDistance/(15*Count*Rate-FirstDistance)*1000);TRO二0x01;
16、TH0=0xf4;TL0=0x48;break;case2 :AutoMode二0;SelectedMode二Line;Area0=Areal=0;PassTime=0;Distance=0;TR0=0x01;TH0=0xf4;TL0=0x48;Thx0=Thx1 = (FirstHigh &OxfO)>>8);Tlx0=Tlxl=(FirstHigh&0x0f);Thx2 =Thx2 = (SecondHigh&Oxf0)»8) :Tlx2=Tlx2 = (SecondHigh&OxOf);Thx3=Thx3 = (ThirdHigh &
17、amp;0xf0)»8) ; Tlx 3 =Tlx 3 = (ThirdHigh&OxOf);Thx4=Thx4=0xff;Tlx4=Tlx4=0xff;break;defauIt:break;elseif (SelectedMode二二Line)IsTOINT*二-1;if (Area0<5)if(IsTOINT=l)ClockO_Init ();elseTRO二0x01; 启动 TOTHO二Thxl; /定时初值TL0=Tlxl;elseIsT0INT=-l;elseIsT0INT2*=-l;if(IsT0INT2=l)TRO=OxO1;TH0=0xd8;TLO=OxfO; /10ms elseTR0=0x01;TH0=0xb1;TL0=0xe0; /20msBack+;if (Back二90)Back0=70;if(Nocurve<2)&&(Back0>0)&&Back!=0)if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025技术员试用期聘用合同
- 2025年塑料管材购销合同范本大全
- 2025建筑项目贷款合同模板范文
- 2025网络安全服务合同范本
- 2025标准店铺租赁合同模板
- 2025年学校食堂餐饮服务承包合同模板
- 2025年纳豆激酶项目建议书
- 2025年光学纤维面板系列项目建议书
- 2025年传动件:传动带合作协议书
- 2025年家用塑胶垫合作协议书
- Q∕GDW 12113-2021 边缘物联代理技术要求
- 电缆沟工程量计算表(土建)
- 初中数学课堂教学中应重视学生阅读理解能力的培养
- 中层干部因私出国境请假审批表
- 潍柴发动机WD615系列分解图册
- 碎石、砂出厂合格证
- 泵站水锤计算书
- 中国城市规划设计研究院交通评估收费标准
- 配件来源及报价明细表
- IQC供应商品质管理看板
- 钢结构安装专项方案(电梯井)
评论
0/150
提交评论