1. 程式人生 > >藍橋杯嵌入式比賽經驗分享

藍橋杯嵌入式比賽經驗分享

比了兩屆藍橋杯,最後以國二收場,也算心滿意足!

不說名次了,國賽的名次說出來丟人(國二4個大專的我排最後)

 

一.我的藍橋杯

我複習藍橋杯,是1月份開始的,由於中間還要搞"畢業設計" "大學生創新創業作品展示""網際網路+創新創業大賽""幫朋友做畢業設計 ""搞一些小專案賺錢""考掉計算機四級"……初賽複習時間40天左右,國賽複習時間7天主要原因感覺國一沒戲)。沒時間複習的同學,不要太緊張!

 

二.教程

一家叫做"大科"的淘寶店的資料不錯,為了獲獎錢還是要花的!

 

三.我的程式

我寫的第7屆決賽的程式:連結:https://pan.baidu.com/s/1WU3doeiucjEMnyLQ5wH2lw

提取碼:cm4f

在初賽前一個星期寫的,為了滿足5小時完成程式的要求,程式寫的不怎麼樣!還望見諒。

 

四.比賽的時候,你有可能會遇到幾個問題:

1.是邊寫程式邊測試,還是寫完程式再測試(我選擇後者)

2.是自己建立工程,還是使用官方提供的例程工程(我選擇後者)

3.比賽開始才寫程式碼,還是先偷偷的寫(我選擇後者)

4.遇到解決不了的問題怎麼辦(千差萬別)

(一)iic出錯(微控制器賽項)

(二)開發板損壞(有的時候損壞的很詭異,你是相信自己,還是相信開發板。一次機會哦!)

(三)電腦電源出問題,沒有儲存檔案(在我同一考場有人有過)

(四)遇到自己沒有預案的題型(比如第九屆考的長按與短按)

(五)選擇題太多不會的

(六)外設改變(如第九屆AD按鍵,資料與實際上使用的電阻不同)

……解決好了省一等獎,解決不好省三等獎

 

五.學習"大科"寫下的學習筆記

PWM大項

兩路PWM

樣式

輸出

檢測

不同頻率/佔空比

不同佔空比

不同頻率/佔空比

不同頻率

使用檔案

OCInactive

PWM_Output

InputCapture

InputCapture

修改

 

 

 

 

不足

 

 

 

 

 

管腳

定時器

通道

PA1

TIM2

CH2

PA2

TIM2

CH3

PA3

TIM2

CH4

PA4

ADC

IN4

PA5

ADC

IN5

PA6

TIM3

CH1

PA7

TIM3

CH2

 

AD大項

 

AD按鍵

AD變位器

兩路AD

光敏電阻

使用檔案

AnalogWatchdog

AnalogWatchdog

RegSimul_DualMode

AnalogWatchdog

修改

       

通道

5

8

4/5

4

通道數

1

1

2

4?

不足之處

       

注意點

--0

100--1

400--2

800--3

1200--4

1600--5

2000--6

2400--7

3000--?

 

接PA5

第9屆的比例不是這個了

 

接PA4/PA5

接PA4

讀取格式

u16 Get_ADCs(u8 channel)

{

    u16 ADC_Val = 0;

    ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_239Cycles5);

    ADC_SoftwareStartConvCmd(ADC1,ENABLE);

    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

    ADC_Val = ADC_GetConversionValue(ADC1);

    ADC_ClearFlag(ADC1, ADC_FLAG_EOC);

    ADC_SoftwareStartConvCmd(ADC1, DISABLE);

    return ADC_Val;

}

 

IIC大項

樣式

AT24C02

三軸感測器

位置

0xA0/0xA1

0x38/0x39

不足

 

在於初始化寫資料

LIS302DL_Write(CTRL_REG1,0x47);

//DR=0,加速度的採集頻率為 200Hz;

//PD=1,LIS302DL工作在普通功耗模式;

//FS=0,最大測量範圍為 2g(2.3g),靈敏度為 18mg/LSB(16.2),受溫度影響為 0.01%, 在0加速度時.飄移為 40mg;

//STP=0,STM=0,表示 LIS302DL 工作在普通模式,即非自檢模式;

//Zen=1,表示使能 Z 軸方向加速度採集;

//Yen=1,表示使能 Y 軸方向加速度採集;

//Xen=1,表示使能 X 軸方向加速度採集;

LIS302DL_Write(CTRL_REG2,0x00);

//SIM=0,表示 SPI 口為 4 匯流排;(這個要先看cs決定)

//BOOT=0,表示不要重新整理儲存器的內容,為普通模式;

//FDS=0,表示禁用高通濾器;

//HP_FF_W_U2=0, 禁用自由落體/喚醒高通濾波器 2;

//HP_FF_W_U1=0, 禁用自由落體/喚醒高通濾波器 1;

//HP_coeff2=0,HP_coeff1=0,DR=0, 表示自由落體/喚醒高通濾波器的輸出截止頻率為 2Hz;

LIS302DL_Write(CTRL_REG3,0xC1);

//IHL=1,表示在中斷髮生時,中斷腳(INT1 和 INT2)輸出低電平;

//PP_OD=1,表示中斷腳開漏輸出;

//I2CFG2=0,I2CFG1=0,I2CFG0=0,表示 INT2 腳輸出低電平;

//I1CFG2=0,I1CFG1=0,I1CFG0=1,表示 INT1 腳是根據自由落體/喚醒 1 暫存器的輸出而發生變化;

LIS302DL_Write(FF_WU_THS_1,0x28);    

//DCRM=0,表示在不再有中斷髮生時,持續時間計數器會被複位到初值;

//THS0~THS6,用來設定自由落體/喚醒的下限值--720mg;        

LIS302DL_Write(FF_WU_DURATION_1,40);    

//當 DR=1 時,加速度的採集頻率為 ;    

LIS302DL_Write(FF_WU_CFG_1,0x10);    

//AOI=1,表示所有中斷事件相或後輸出;

//LIR=0,表示將中斷請求不鎖存;

//ZHIE=0,表示在 Z 輸出暫存器的值大於 Z 軸的設定值時,將不會使能 Z 軸中斷;

//ZLIE=1,表示在 Z 輸出暫存器的值小於 Z 軸的設定值時,將不使能中斷請求;

//YHIE=0,表示在 Y 輸出暫存器的值大於 Y 軸的設定值時,將不會使能 Y 軸中斷;

//YLIE=1,表示在 Y 輸出暫存器的值小於 Y 軸的設定值時,將不會使能 Y 軸中斷;

//XHIE=1,表示在 X 輸出暫存器的值大於 X 軸的設定值時,將不會使能 X 軸中斷;

//XLIE=0,表示在 X 輸出暫存器的值小於 X 軸的設定值時,將不會使能 X 軸中斷;

    

 

其他

溫度感測器

呼叫檔案

官方檔案ds18b20

注意點

ds18b20_read()後8位小數只要前3位

z = (ds18b20_read()& 0x07FF);

x = z/16.;

數碼管

呼叫檔案

 

注意點

 

溫溼度感測器

呼叫檔案

官方檔案dht11

注意點

dht11_read();32位資料只要每個16位前8位

前8位溼度, 後8位溫度

LED

呼叫檔案

IOToggle

注意點

 

串列埠

呼叫檔案

Interrupt/IrDA

注意點

 

按鍵

呼叫檔案

 

注意點

 

RTC

呼叫檔案

初始化:LSI_Calib

其他: Calendar

注意點

 

蜂鳴器

呼叫檔案

JTAG_Remap

注意點

 
   

 

濾波演算法

u16 Get_Filter(u8 channel)

{

    u16 tmp;

    u8 i = 0,j = 0;

    for(i=0; i<ADC_BUFF_LEN; i++){

        adc_buff[i] = Get_ADCs(channel);

    }

    for(i=0; i<=ADC_BUFF_LEN/2; i++){

        for(j=0; j<    ADC_BUFF_LEN-i-1; j++){

            if(adc_buff[j+1] < adc_buff[j]){

                tmp = adc_buff[j+1];

                adc_buff[j+1] = adc_buff[j];

                adc_buff[j] = tmp;

            }

        }

    }

    if(ADC_BUFF_LEN % 2 == 0){

    return(adc_buff[ADC_BUFF_LEN/2-1] + adc_buff[ADC_BUFF_LEN/2])/2;

    }else{

    return(adc_buff[ADC_BUFF_LEN/2]);

    }

}

 

希望諸位在藍橋杯比賽中取得好成績!