赞
踩
前段时间在学32,我今天自己写了下,有的记不得,比如sscanf用法(字符串中取数)(在比蓝桥杯单片机国赛前写了下mqtt,用了下这个函数,不过当时记不得了),还有sqrt(开方的)就上网搜了下,我觉得这届的国赛题考得比往届要难。也感谢蓝桥杯杯成为我的第一个比赛。
下面是运行的代码:
- #include <STC15F2K60S2.H>
- #include "smg.h"
- #include "key.h"
- #include "pcf8591.h"
- #include "csb.h"
- #include <stdio.h>
- #include <string.h>
- #include "key.h"
- #include "CSB.h"
- #include "PCF8591.h"
- #include "SMG.h"
- #include <math.h>
-
- //
- unsigned char zt=0;//状态
- unsigned char jiemian=0;//界面
- unsigned int mdd_x=1000,mdd_y=1000;//目的地
- unsigned int wz_x=0,wz_y=0;//设备
- float yxsd=0;//运行速度
- unsigned char zajl;//障碍距离
- unsigned char CS_R=10;//节省ARM
- char CS_B=0;
- bit R_B=0;//指示R_B标志
- unsigned int pl=0;//频率
- unsigned int i=0,ji=0,daoda_ji=0;//计时
- unsigned char daoda_falg=0;//到达目的地标志
- unsigned char hjguang;//环境光
- unsigned char uled=0xff;//灯
- unsigned char RxData,Serial_RxFlag=0;//串口接收数据和标志
- data char Serial_RxPacket[10];//串口接收数据包
- unsigned char str1[10];
- unsigned char smg_flag=0,data_flag=0,deng_flag=0;key_flag=0;//减速变量
- //
- void Timer1Init(void);
- void pro(unsigned char deng);
- void ckfs_pro(unsigned char *str);
- void jdq(bit a);
-
- void diplay_loop();
- void key_loop();
- void data_loop();
- void deng_loop();
-
-
- void main()
- {
- Timer1Init();
- PCA();
- while(1)
- {
- key_loop();//按键
- diplay_loop();//数码管
- data_loop();//数据
- deng_loop();//灯
- }
-
- }

key_loop()按键部分
- void key_loop()
- {
- unsigned char num;
- if(key_flag)
- return;
- else
- {
- key_flag=1;
- key_zd();
- num=key();
- if(num!=0)
- {
- switch(num)
- {
- case 1:
- if(zt==0&&(mdd_y>=0&&mdd_y<=999&&mdd_x>=0&&mdd_x<=999))
- {
- zt=2;
- }
- else if(zt==1&&zajl>30)
- {
- zt=2;
- }
- else if(zt==2)
- {
- zt=1;
- }
- break;
- case 2:
- if(zt==0)
- {
- wz_x=0;
- wz_y=0;
- ji=0;
- }
-
- break;
- case 3:
- if(++jiemian>=3)
- {
- jiemian=0;
- }
- break;
- case 4:
- R_B=~R_B;
- break;
- case 5:
- if(R_B==0&&CS_R<=20)
- {
- CS_R++;
- }
- else if(R_B==1&&CS_B<=90)
- {
- CS_B+=5;
- }
- break;
- case 6:
- if(R_B==0&&CS_R>=10)
- {
- CS_R--;
- }
- else if(R_B==1&&CS_B>=-90)
- {
- CS_B-=5;
- }
- break;
-
- }
- }
- }
- }

data_loop数据计算部分
- void data_loop()
- {
- if(data_flag)
- return;
- else
- {
- data_flag=1;
- zajl=csb_cj();
- yxsd=pl*3.14*CS_R/1000+CS_B;
- if(mdd_y>=0&&mdd_y<=999&&mdd_x>=0&&mdd_x<=999)
- {
- wz_x=(unsigned int)(yxsd*mdd_x/sqrt(mdd_x*mdd_x+mdd_y*mdd_y)*0.001*ji);
- wz_y=(unsigned int)(yxsd*mdd_y/sqrt(mdd_x*mdd_x+mdd_y*mdd_y)*0.001*ji);
- }
-
- hjguang=pcf8591_read(0x01);
- //
- if(zt==1)
- {jdq(1);}
- else
- {jdq(0);}
- if(zajl<30)
- {
- zt=1;
- }
- //
- if(RxData=='?')
- {
- if(zt==0)
- {
- ckfs_pro("Idle");
- }
- else if(zt==1)
- {
- ckfs_pro("Wait");
- }
- else if(zt==2)
- {
- ckfs_pro("Busy");
- }
- RxData=0;
- }
- else if(RxData=='#')
- {
- sprintf(str1,"(%d,%d)",wz_x,wz_y);
- ckfs_pro(str1);
- RxData=0;
- }
- else if(Serial_RxFlag==1)
- {
- sscanf(Serial_RxPacket,"(%d,%d)",&mdd_x,&mdd_y);
- ckfs_pro("Got it");
- Serial_RxFlag=0;
- }
- else
- {
- ckfs_pro("Error");
- }
- //
- if(wz_x>=mdd_x&&wz_y>=mdd_y)
- {
- daoda_falg=1;
- }
- else if(wz_x<=mdd_x&&wz_y<=mdd_y)
- {
- daoda_falg=0;
- }
-
- }
-
- }

diplay_loop数码管部分
- void diplay_loop()
- {
- if(smg_flag)
- return;
- else
- {
- smg_flag=1;
- if(jiemian==0&&(zt==1||zt==2))
- {
- smg_hc(1,30);
- smg_hc(2,mdd_x/100>0?(unsigned char)(mdd_x/100)%10:20);
- smg_hc(3,mdd_x/10>0?(unsigned char)(mdd_x/10)%10:20);
- smg_hc(4,(unsigned int)(mdd_x)%10);
- smg_hc(5,20);
- smg_hc(6,mdd_y/100>0?(unsigned char)(mdd_y/100)%10:20);
- smg_hc(7,mdd_y/10>0?(unsigned char)(mdd_y/10)%10:20);
- smg_hc(8,(unsigned int)(mdd_y)%10);
- }
- if(jiemian==0&&zt==0)
- {
- smg_hc(1,30);
- smg_hc(2,wz_x/100>0?(unsigned char)(wz_x/100)%10:20);
- smg_hc(3,wz_x/10>0?(unsigned char)(wz_x/10)%10:20);
- smg_hc(4,(unsigned char)(wz_x)%10);
- smg_hc(5,20);
- smg_hc(6,wz_y/100>0?(unsigned char)(wz_y/100)%10:20);
- smg_hc(7,wz_y/10>0?(unsigned char)(wz_y/10)%10:20);
- smg_hc(8,(unsigned char)(wz_y)%10);
- }
- if(jiemian==1&&zt==1)
- {
- smg_hc(1,26);
- smg_hc(2,1);
- smg_hc(3,20);
- smg_hc(4,yxsd/1000>0?(unsigned int)(yxsd/1000)%10:20);
- smg_hc(5,yxsd/100>0?(unsigned int)(yxsd/100)%10:20);
- smg_hc(6,yxsd/10>0?(unsigned int)(yxsd/10)%10:20);
- smg_hc(7,(unsigned int)(yxsd)%10+10);
- smg_hc(8,(unsigned int)(yxsd*10)%10);
-
- }
- if(jiemian==1&&zt==0)
- {
- smg_hc(1,26);
- smg_hc(2,2);
- smg_hc(3,20);
- smg_hc(4,21);
- smg_hc(5,21);
- smg_hc(6,21);
- smg_hc(7,21);
- smg_hc(8,21);
-
- }
- if(jiemian==1&&zt==2)
- {
- smg_hc(1,26);
- smg_hc(2,3);
- smg_hc(3,20);
- smg_hc(4,zajl/10000>0?(unsigned char)(zajl/10000)%10:20);
- smg_hc(4,zajl/1000>0?(unsigned char)(zajl/1000)%10:20);
- smg_hc(5,zajl/100>0?(unsigned char)(zajl/100)%10:20);
- smg_hc(6,zajl/10>0?(unsigned char)(zajl/10)%10:20);
- smg_hc(7,(zajl)%10);
-
- }
- if(jiemian==2)
- {
- smg_hc(1,29);
- smg_hc(2,20);
- smg_hc(3,(unsigned char)(CS_R/10)%10+10);
- smg_hc(4,(unsigned char)(CS_R)%10);
- smg_hc(5,20);
- if(CS_B>=0)
- {
- smg_hc(6,CS_B/100>0?(unsigned char)(CS_B/100)%10:20);
- smg_hc(7,CS_B/10>0?(unsigned char)(CS_B/10)%10:20);
- smg_hc(8,(unsigned char)(CS_B)%10);
- }
- if(CS_B<0)
- {
- smg_hc(6,-CS_B/10>0?21:20);
- smg_hc(7,-CS_B/10>0?(unsigned char)(-CS_B/10)%10:21);
- smg_hc(8,(unsigned char)(-CS_B)%10);
- }
- }
-
- }
-
- }

deng_loop灯
- void deng_loop()
- {
- if(deng_flag)
- return;
- else
- {
- deng_flag=0;
- if(zt==0)
- {
- uled|=0x01;
- }
- else if(zt==1)
- {
- uled^=0x01;
- }
- else if(zt==2)
- {
- uled&=~0x01;
- }
- //
- if(hjguang>62)
- {
- uled|=0x02;
- }
- else
- {
- uled&=~0x02;
- }
- //
- if(daoda_falg==1&&daoda_ji<3000)
- {
- uled&=~0x04;
- }
- else
- {
- uled|=0x04;
- }
- if(daoda_ji>3000)
- {daoda_ji=0;}
- }
- }

调用函数
- void jdq(bit a)//继电器
- {
- static unsigned char flag=1;
-
- if(a==1&&flag==1)
- {
-
- P2=(P2&0x1f)|0xa0;
- P04=1;
- P06=0;
- P2&=0x1f;
- flag=0;
-
-
- }
- else if(flag==0&&a==0)
- {
-
- P2=(P2&0x1f)|0xa0;
- P04=0;
- P06=0;
- P2&=0x1f;
- flag=1;
- }
- }
- void pro(unsigned char deng)//灯
- {
- P2=(P2&0x1f)|0x80;
- P0=deng;
- P2=0x1f;
- }
-
- void ckfs_pro(unsigned char *str)//串口发送
- {
- while(*str!='\0')
- {
- SBUF=*str;
- while(TI==0);
- TI=0;
- str++;
- }
- }

定时,中断和串口
-
- void Timer1Init(void)//定时器及串口,方便,所以放一起了
- {
- 1000微秒@12.000MHz
- AUXR=0x00;
- AUXR |= 0x40;
- TMOD &= 0x0F;
- TL1 = 0xCD; //设置定时初值
- TH1 = 0xD4; //设置定时初值
- TF1 = 0;
- TR1 = 1;
- ET1=1;
-
- //4800bps@12.000MHz
- SCON = 0x50;
- AUXR |= 0x01;
- AUXR |= 0x04;
- T2L = 0x8F;
- T2H = 0xFD;
- AUXR |= 0x10;
- ES=1;
- //计数
- TMOD =(TMOD&0xf0)|0x05;
- TL0 = 0x00;
- TH0 = 0x00;
- TF0 = 0;
- TR0 = 1;
-
- EA=1;
- }
-
- void Uart1_Isr() interrupt 4//串口接收
- {
- static char pRxPacket=0,RxState=0;
- if (RI)
- {
- RI = 0;
- RxData=SBUF;
-
- if (RxState == 0)
- {
- if ((RxData == '(') && Serial_RxFlag == 0)
- {
- RxState = 1;
- pRxPacket = 0;
- Serial_RxPacket[pRxPacket] = RxData;
- pRxPacket ++;
- }
- }
- else if(RxState == 1)
- {
- if (RxData == ')')
- {
- Serial_RxPacket[pRxPacket] = RxData;
- pRxPacket ++;
- Serial_RxPacket[pRxPacket] = '\0';
- RxState = 0;
- Serial_RxFlag = 1;
- }
- else
- {
- Serial_RxPacket[pRxPacket] = RxData;
- pRxPacket ++;
- }
- }
-
-
-
- }
-
- }
- //
- void Timer1_Iur() interrupt 3
- {
- if(++smg_flag==200)smg_flag=0;
- if(++data_flag==300)data_flag=0;
- if(++deng_flag==100)deng_flag=0;
- if(++key_flag==20)key_flag=0;
- if(daoda_falg==1)
- {
- daoda_ji++;
- }
- if(++i>999)//算频率
- {
- i=0;
- pl=TH0*256+TL0;
- TH0=0;
- TL0=0;
- }
- if(zt==2)
- ji++;
- smg_zd();//扫描数码管
- pro(uled);//扫描灯
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。