Der Quellcode des Roboterautos
In diesem Tutorial wird auf Wunsch vieler Autofans, die mit den MCU-Funktionen nicht vertraut sind, kurz die Quellcodestruktur der Studio-Treiberplatine über Roboterautos erläutert. Und geben Sie zwei Beispiele für Roboterautos, um zu veranschaulichen, wie die vom Studio veröffentlichten neuen Funktionen zusammengeführt und ihre eigenen Funktionen erweitert werden können.
Sie müssen Keil 4 installieren, um den Quellcode der Treiberplatine des Studios zu ändern.
Werfen wir zunächst einen Blick auf die Architektur des Quellcodes der Treiberplatine:
Das Verzeichnis der ersten Ebene des vom Studio veröffentlichten Quellcodes sieht wahrscheinlich so aus. Wir müssen auf vier Dateien achten, die anderen Dateien können ignoriert werden.
- Der lib-Ordner oben: Dieser Ordner ist die Bibliotheksdatei der Treiberplatine, z. B. die Manipulator-Treiberfunktionsbibliothek darin.
- Quellordner: In diesem Ordner wird der gesamte C-Code der Treiberplatine abgelegt. Was wir ändern müssen, ist das Programm darin.
- Datei Motor_con.uvproj: Diese Datei ist die Projektdatei. Nachdem Keil 4 installiert wurde, ordnet das System es automatisch zu. Sie müssen nur auf dieses Symbol doppelklicken, um den Quellcode in Zukunft zu ändern.
- motor_con.hex: Diese Datei ist die von Keil 4 kompilierte Firmware, die in die Treiberplatine gebrannt werden soll.
Werfen wir einen Blick auf das sekundäre Verzeichnis. Es gibt nur eine Bibliotheksdatei im lib-Verzeichnis. Im Allgemeinen müssen Sie sich nicht darum kümmern, deshalb werden wir nicht näher darauf eingehen. Schauen Sie sich hauptsächlich den Quellordner an.
Erklären Sie separat:
Config.h: Diese Datei speichert verschiedene Initialisierungsinformationen des Roboters, einschließlich Pin-Definition, Timer-Definition, Anfangswinkel des Servos, Motorausgangsport und andere Konfigurationen. Diese Datei ist auch eine unserer am häufigsten geänderten Dateien.
main.c: Die Hauptfunktionsdatei. In dieser Datei gibt es eine main()-Funktion. Die Programmausführung der MCU beginnt mit dieser main()-Funktion.
motor.c Initialisierung von Motor und Pins.
timer.c Die Timer-Interrupt-Datei enthält die Interrupt-Implementierung jedes Timers.
uart.c Die serielle Schnittstelle unterbricht die Datei und die Kommunikation mit dem Host-Computer wird hier realisiert.
Andere Dateien mit der Endung .h: alle Header-Dateien, einschließlich der Deklarationen verschiedener Funktionen, und Interessenten können sie selbst öffnen.
Nach der Einführung der grundlegenden Dateistruktur können wir sehen, dass die Quellcodestrukturebene der Treiberplatine des Studios sehr klar ist, was für das Schreiben und Warten von Code sehr praktisch ist.
Nehmen Sie als Nächstes ein vom Studio veröffentlichtes Upgrade-Paket „Einschalten und Einschalten der Wasserlampe“ als Beispiel, um zu erklären, wie der Code zusammengeführt wird. Laden Sie zunächst das Upgrade-Paket aus dem unteren Computer-Quellcode-Release-Post des Studios herunter und entpacken Sie es, um drei Dateien zu erhalten: SelfTest.c, SelfTest.h und main.c. Laut dem Vergleich des ursprünglichen Quellprojekts kann festgestellt werden, dass es zwei weitere Dateien gibt, SelfTest.c und SelfTest.h. Gleichzeitig lautet der Originalcode in der Datei main.c:
1. Sie können dieses Programm beliebig modifizieren und auf die von Ihnen selbst entwickelten Smart-Car-Roboter und andere elektronische Produkte anwenden, es ist jedoch verboten, es zum Profit anderer zu verwenden.
2.Von WIFI Robot Network·Robot Creative Studio
3.*/
4.#include „stc_new_8051.h“
5.#include „motor.h“
6.#include „uart.h“
7.#include <stdio.h>
8.#include „type.h“
9.#include „timer.h“
10.
11.void main(void)
12.{
13.UART_init();
14./* Timer 0 ist dem Servo gewidmet, es wird nicht empfohlen, die Konfiguration zu ändern */
15.Timer0_Init();
16./* Timer 1 ist kostenlos, Benutzer können ihn flexibel nutzen */
17.Timer1_Init();
18.Motor_Init();
19. während(1)
20.{
21. ;
22. }
23.}
Code kopieren
Jetzt wird es:
- Sie können dieses Programm beliebig modifizieren und auf die von Ihnen selbst entwickelten Smart-Car-Roboter und andere elektronische Produkte anwenden, es ist jedoch verboten, es zum Profit anderer zu verwenden.
- Von WIFI Robot Network·Robot Creative Studio
- */
4.#include „stc_new_8051.h“
5.#include „motor.h“
6.#include „uart.h“
7.#include <stdio.h>
8.#include „type.h“
9.#include „timer.h“
10.#include „SelfTest.h“
- void main(void)
13.{
- TestApp_Init();
- UART_init();
18./* Timer 0 ist dem Servo gewidmet, es wird nicht empfohlen, die Konfiguration zu ändern */
19.Timer0_Init();
20./* Timer 1 ist kostenlos, Benutzer können ihn flexibel nutzen */
21.Timer1_Init();
22.Motor_Init(); 23.
- while(1)
- {
- }
- }
Code kopieren
Bitte beachten Sie den Code in den Zeilen 10 und 15 oben. Dies wird dort geändert, wo das ursprüngliche C-Programm ist.
Wenn es sich um eine Datei handelt, die zuvor nicht vorhanden war, wie z. B. SelfTest.c und SelfTest.h, können wir diese beiden Dateien gemäß den Anweisungen im Quellcode-Veröffentlichungsbeitrag im Quellordner ablegen.
Dann die ursprüngliche Datei main.c. Wir sollten uns bei der Codemigration auf den Unterschied zwischen diesen beiden Dateien beziehen.
Kopieren Sie den obigen Code im roten Teil der Datei „main.c“ an den entsprechenden Speicherort der ursprünglichen Datei „main.c“ und speichern Sie ihn.
Zu diesem Zeitpunkt wurde die neue Funktion unter Bezugnahme auf die Tipps in jedem Quellcode-Release-Beitrag transplantiert. Eigentlich ist es ganz einfach. Nachdem die Migration abgeschlossen ist, müssen Sie eine neue Firmware neu generieren, die Kompilierungsfunktion von Keil 4 verwenden, klicken, um die Datei motor_con.hex zu generieren, und dann Tutorial 5 lesen, es auf die Treiberplatine brennen, und die neuen Funktionen werden ausgeführt hinzugefügt werden!
Was soll ich also tun, wenn ich selbst neue Funktionen hinzufügen möchte? Nehmen wir als Beispiel das Hinzufügen von „P22-Port-gesteuerten Lichtern“. Angenommen, die Anweisung zum Einschalten der Lichter lautet FF040100FF und zum Ausschalten lautet FF040000FF.
Zunächst müssen Sie herausfinden, welchen Pin Sie der Funktion hinzufügen möchten. Sie können sich auf das Pin-Beschreibungsdiagramm im Treiberplatinen-Release-Beitrag beziehen und ihn selbst auswählen. Jetzt werden wir den P22-Port zur Steuerung der Lichter verwenden. Der erste Schritt besteht also darin, Pin-Definitionen in die Datei Config.h einzufügen:
1.sbit MAINLIGHT_CON=P2^2;
Code kopieren
Dies ist die Definition, dass wir die P22-Schnittstelle zum Anschluss der Scheinwerfer verwenden.
Definieren Sie dann in der Datei motor.h die Makrodefinition des Scheinwerfers, sodass wir bei bestimmten Aufrufen nicht die unintuitive Methode MAINLIGHT_CON = 1 verwenden müssen und der Code bequem zu lesen und zu verstehen ist.
1.#define MAINLIGHT_TURNON MAINLIGHT_CON=0;
2.#define MAINLIGHT_TURNOFF MAINLIGHT_CON=1;
Code kopieren
Oben in der Makrodefinition können Sie sehen, dass der MAINLIGHT_CON-Pin, also der P22-Pin, niedrig ist, wenn die Autolichter eingeschaltet sind und das Makro ausgeführt wird. Wenn zu diesem Zeitpunkt die Außentemperatur hoch ist, sind die Autolichter eingeschaltet. Wenn jedoch die Makrodefinition zum Ausschalten der Lichter ausgeführt wird, ist MAINLIGHT_CON = 1 auf einem hohen Pegel und die Lichter sind ausgeschaltet. Natürlich wird hier der Senkenstrom verwendet, und die Stromquellenmethode kann ebenfalls verwendet werden, aber die Antriebskraft ist relativ schwach und die Autolichter sind nicht so hell.
Im dritten Schritt werden wir nach Abschluss der Makrodefinition der Scheinwerfer die Arbeit der Scheinwerfer umsetzen.
Alle Aktionen der Studio-Treiberplatine werden im Interrupt der seriellen Schnittstelle ausgeführt, daher müssen wir die Datei Uart.c ändern. Öffnen Sie die Datei Uart.c und suchen Sie die Funktion void Communication_Decode(void). Diese Funktion analysiert das vom Host-Computer gesendete Datenpaket. Hier wird unsere Funktion zur Ausführung von Autolichtern hinzugefügt.
- void Communication_Decode(void)
- {
- if(Puffer[0]==0x00)
- {
- Schalter(Puffer[1])
- {
- Fall 0x01:MOTOR_GO_FORWARD; zurückkehren;
- Fall 0x02:MOTOR_GO_BACK; zurückkehren;
- Fall 0x03:MOTOR_GO_LEFT; zurückkehren;
- Fall 0x04:MOTOR_GO_RIGHT; zurückkehren;
- Fall 0x00:MOTOR_GO_STOP; zurückkehren;
- Standard: Rückkehr;
- }
- }
- sonst if(buffer[0]==0x01)
- {
- if(Puffer[2]>180)
- zurückkehren;
- Schalter(Puffer[1])
- {
- case 0x01:se_timer[0]=buffer[2]; zurückkehren;
- case 0x02:se_timer[1]=buffer[2]; zurückkehren;
- case 0x03:se_timer[2]=buffer[2]; zurückkehren;
- case 0x04:se_timer[3]=buffer[2]; zurückkehren;
- case 0x05:se_timer[4]=buffer[2]; zurückkehren;
- case 0x06:se_timer[5]=buffer[2]; zurückkehren;
- case 0x07:se_timer[6]=buffer[2]; zurückkehren;
- case 0x08:se_timer[7]=buffer[2]; zurückkehren;
- Standard: Rückkehr;
- }
- }
- else if(buffer[0]==0x04) //Lampensteuerung, die von der Senkstrommethode verwendet wird
- {
- Schalter(Puffer[1])
- {
- Fall 0x01:
- MAINLIGHT_TURNON;
- brechen;
- Fall 0x00:
- MAINLIGHT_TURNOFF;
- brechen;
- default:return;
- }
- }
- anders
- {
- zurückkehren;
- }
- }
Code kopieren
Wie aus dem Code von Zeile 32 bis Zeile 45 oben ersichtlich ist, haben wir einen weiteren Zweig im if-Zweig. Dieser Zweig wird verwendet, um festzustellen, ob das Light-On-Datenpaket des Host-Computers angekommen ist. Wenn festgestellt wird, dass das Typbit 0x04 und das Befehlsbit 0x01 ist, dann nur MAINLIGHT_TURNON; Diese Makrodefinition besteht darin, den P22-Pin herunterzuziehen, also das Licht für den Befehl FF040100FF einzuschalten. Im Gegenteil, der P22-Pin wird hochgezogen und die Autolichter gehen aus. OK, führen Sie die Kompilierung in Keil aus. Sie können die Treiber-Firmware mit den P22-Scheinwerfern generieren. Worauf warten Sie noch? Beeilen Sie sich, brennen Sie es in die Treiberplatine ein und suchen Sie etwas unter dem Bett~~~