Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
以下为主函数内容:
- #include "GPIO.h"
- #include "usart.h"
- #include "config.h"
- #include "adc.h"
- #include "delay.h"
- #define Mz P24 //左转电机端口
- #define Mf P25 //右转电机端口
- #define LED1 P20 //左转LED灯控制端口
- #define LED2 P21 //右转LED灯控制端口
- #define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn)
- u16 ADC1=0,ADC2=0;
- void GPIO_Init_init() //GPIO初始化设置
- {
- GPIO_InitTypeDef GPIO_Init;
- GPIO_Init.Mode = GPIO_OUT_PP;
- GPIO_Init.Pin = P30|P31;
- GPIO_Inilize(GPIO_P3, &GPIO_Init);
- GPIO_Init.Mode = GPIO_OUT_PP;
- GPIO_Init.Pin = P20|P21;
- GPIO_Inilize(GPIO_P2, &GPIO_Init);
- }
- void COM1_Init() //串口1初始化设置
- {
- COMx_InitDefine COM1_InitDefine;
- COM1_InitDefine.UART_Mode = UART_8bit_BRTx; //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
- COM1_InitDefine.UART_BRT_Use = BRT_Timer2; //使用波特率, BRT_Timer1,BRT_Timer2
- COM1_InitDefine.UART_BaudRate = 115200ul; //波特率, ENABLE,DISABLE
- COM1_InitDefine.Morecommunicate = DISABLE; //多机通讯允许, ENABLE,DISABLE
- COM1_InitDefine.UART_RxEnable = ENABLE; //允许接收, ENABLE,DISABLE
- COM1_InitDefine.BaudRateDouble = ENABLE; //波特率加倍, ENABLE,DISABLE
- COM1_InitDefine.UART_Interrupt = ENABLE; //中断控制, ENABLE,DISABLE
- COM1_InitDefine.UART_Polity = PolityHigh; //优先级, PolityLow,PolityHigh
- COM1_InitDefine.UART_P_SW = UART1_SW_P30_P31; //切换端口, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17(必须使用内部时钟)
- COM1_InitDefine.UART_RXD_TXD_Short = DISABLE; //内部短路RXD与TXD, 做中继, ENABLE,DISABLE
- USART_Configuration(USART1, &COM1_InitDefine);
- //PrintString1("STC15F2K60S2 UART1 Test Prgramme!\r\n"); //SUART1发送一个字符串
- }
- void ADC_Init() //ADC10-11初始化
- {
- ADC_InitTypeDef ADC_InitType;
- ADC_InitType.ADC_Px = ADC_P10|ADC_P11; //设置要做ADC的IO, ADC_P10 ~ ADC_P17,ADC_P1_All
- ADC_InitType.ADC_Speed = ADC_180T; //ADC速度 ADC_90T,ADC_180T,ADC_360T,ADC_540T
- ADC_InitType.ADC_Power = ENABLE; //ADC功率允许/关闭 ENABLE,DISABLE
- ADC_InitType.ADC_AdjResult = ADC_RES_H8L2; //ADC结果调整, ADC_RES_H2L8,ADC_RES_H8L2
- ADC_InitType.ADC_Polity = PolityHigh; //优先级设置 PolityHigh,PolityLow
- ADC_InitType.ADC_Interrupt = DISABLE; //中断允许 ENABLE,DISABLE
- ADC_Inilize(&ADC_InitType);
- P1n_pure_input(0x03);
- }
- void main()
- {
- u8 i = 0;
- Mz = Mf = 1;
- GPIO_Init_init(); //GPIO初始化
- COM1_Init(); //串口初始化
- ADC_Init(); //ADC初始化
- ADC_PowerControl(ENABLE); //使能内部工作电源ADC
- EA = 1; //打开总中断
- while(1)
- {
- delay_ms(10);
- ADC1 = Get_ADC10bitResult(ADC_CH0)/10; //读ADC0值;除以误差系数10
- ADC2 = Get_ADC10bitResult(ADC_CH1)/10; //读ADC1值;除以误差系数10
- // TX1_write2buff(ADC1);
- if(ADC1 == 1024 || ADC2 == 1024)
- {
- PrintString1("1024\r\n");
- continue;
- }
- if(ADC1 > ADC2)
- {
- if(i == 2)
- {
- Mz = 1;
- Mf = 1;
- delay_ms(200);
- i = 1;
- }
- Mz = 0;
- Mf = 1;
- LED1 = 0;
- LED2 = 1;
- PrintString1("左侧\r\n");
- }
- else if(ADC1 < ADC2)
- {
- if(i == 1)
- {
- Mz = 1;
- Mf = 1;
- delay_ms(200);
- i = 2;
- }
- PrintString1("右侧\r\n");
- Mz = 1;
- Mf = 0;
- LED1 = 1;
- LED2 = 0;
-
- }
- else
- {
- if(i != 0)
- {
- Mz = 1;
- Mf = 1;
- delay_ms(200);
- i = 0;
- }
- Mz = 1;
- Mf = 1;
- LED1 = 1;
- LED2 = 1;
- PrintString1(".");
- }
-
- }
- }
复制代码
全部资料51hei下载地址(程序+PCB+原理图):
PCB工程文件.7z
(3.91 MB, 下载次数: 126)
|