全部资料(压缩包)下载:
自动往返小车程序0411定稿.rar
(142.65 KB, 下载次数: 93)
还是吐槽下电设赛题出的不严谨,我们做的B题,轴流风机这个坑啊,买了好多个,最后发现都不好用,主要是响应太慢,从通电到满速需要10s。关键我们还在西南地区,顺丰都要一天多才能到。换了无刷电机(无刷确实比轴流风机好控制的多)+桨。
回到正题吧,这个是01年的题,用的主控是51,然后L298N做电机驱动。加了超声波控制小车和墙壁的距离,当时做的只是简单控制,没加PID。使用nokia5110显示速度和时间,51单片机用这个显示屏还是比较方便的,换了STM32之后用OLED更舒服
主程序如下:
- #include <reg52.h>
- #include <init.h>
- #include <interrupt.h>
- #include <turn.h>
- #include <control.h>
- #include <delay.h>
- //#include <speed.h>
- #include <nokia_5110.h>
- #include <display.h>
- #include <ultrasonic.h>
- //#include <uart.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- typedef unsigned char BYTE;
- sbit light=P3^7; //探头中
- sbit enle1=P2^0;//使能端左,前轮
- sbit enle2=P2^1;//左后
- sbit enri1=P2^2;//使能端右,前轮
- sbit enri2=P2^3;//右后
- sbit Trig=P2^6;// 定义HC-SR04发送端
- sbit Echo=P2^7;//定义HC-SR04接收端
- uchar right;//pwm右边
- uchar left;//pwm左边
- uchar pwm_time;
- uint timer;//总计时,单位是10ms
- uchar time_c;//timec -- timecounter
- uchar line_counter;//计量通过黑线数目
- uchar black;//标记是否通过黑线
- uchar circle;//计量轮圈转动圈数
- uint w_hole;//wheel hole 计量轮子洞洞数目
- uint distance;
- uint usonic_time,usonic_flag=0;
- float usonic_s;
- //BYTE bu_F[3];
- //BYTE wan,qian,bai,shi,ge;
- /*************
- 主函数
- **************/
- void main()
- {
- init();
- straight_full();
- // time_display();
- // delay_ms(500);
- // distance_display();
- // delay_ms(500);
- while(1){
- time_display(timer,0);
- // time_display(timer,3);
- // time_display(timer,2);
- distance =circle*20.72+w_hole*1.18;
- distance_display();
- // lenth();
- // zitai();
- control();
- zitai();
- }
- }
- /*void T0_timer0 () interrupt 1 //定时器0,PWM,记录时间
- {
- //pwm();
- timer++;
-
- TH0=(65536-10000)/256;//1ms???? 12M
- TL0=(65536-10000)%256; //????
- }*/
复制代码
|