藍橋杯第五屆嵌入式程式

2021-09-11 12:39:16 字數 3056 閱讀 6123

本屆試題主要考察pwm的捕獲與輸出;難度較大;

①、庫檔案

②、中斷服務函式

u8 flag=0,count=0;

void usart2_irqhandler(void)

else if(flag==1) }

}}void tim2_irqhandler(void) //注意是定時器2

if(tim2_fre1 == 0) //如果是0,則 使其保留上乙個值,這樣做可以保證數值的穩定性

tim2_fre1_last =tim2_fre1;

ic2readvalue2=ic2readvalue1 ;

ic2_flag=1 ;

}if(tim_getitstatus(tim2, tim_it_cc3) == set)

if(tim2_fre2 == 0) //如果是0,則 使其保留上乙個值,這樣做可以保證數值的穩定性

tim2_fre2_last =tim2_fre2;

ic3readvalue2=ic3readvalue1 ;

ic3_flag=1;

}} uint16_t capture = 0;

void tim3_irqhandler(void)

else

}/* tim3_ch2 toggling with frequency = 366.2 hz */

if (tim_getitstatus(tim3, tim_it_cc2) != reset)

else }}

③、初始化

#include "stm32f10x.h"

#include #include "i2c.h"

#include "lcd.h"

#include "init.h"

void lcd_init(void)

void gpio_int(void)

void tim2_init(void)

void tim3_init(void) //為了輸出不同頻率的pwm需要設定比較輸出模式

void usart2_init(void)

void nvic_configuration(void) //不要遺漏,否則無法啟動中斷服務函式

unsigned char iic_read(unsigned char add)

void iic_write(unsigned char add,unsigned char dat)

④、主函式

#include "stm32f10x.h"

#include #include "i2c.h"

#include "lcd.h"

#include "init.h"

u32 timingdelay = 0;

void delay_ms(u32 ntime);

void key_scan(void);

void led_run(u16 run);

u8 n1,n2;

u8 string[20];

u8 rx_buff[20];

u8 receive=0;

u16 run=0xffff;

u8 qie=0;

u8 bengdi=0;

u8 pa6_out=0,pa7_out=0;

__io uint16_t ccr1_val = 1000;

__io uint16_t ccr2_val = 200;

u32 ic2readvalue1=0,ic2readvalue2=0,ic3readvalue1=0,ic3readvalue2=0;

u32 capt1=0,capt2=0;

u8 ic2_flag=0, ic3_flag=0;

u32 tim2_fre1=0,tim2_fre1_last=0,tim2_fre2=0,tim2_fre2_last=0;

int main(void)

delay_ms(5); //注意延時,否則讀取不正確

n1=iic_read(0x00);

delay_ms(5);

n2=iic_read(0x01);

sprintf((char*)string," n(1): %d ",n1);

lcd_displaystringline(line4,string);

sprintf((char*)string," n(2): %d ",n2);

lcd_displaystringline(line8,string);

while(1)

else if(rx_buff[4]-48==2)

}if(ic2_flag==1)

else

}else

if(ic3_flag==1)

else

}else

}}void key_scan(void)

else if(bengdi==1)

}while(!rb1);

} else if(rb2==0)

else if(qie==2)

} } while(!rb2);

} else if(rb3==0)

else if(qie==2)

}} while(!rb3);

} else if(rb4==0)

if(qie==2)

} } while(!rb4);

}}void led_run(u16 run) //暫存器方法,開關燈

void delay_ms(u32 ntime)

因為題目要求pwm輸出,預設輸出兩個頻率不同的倍頻,因而用到比較輸出;其中需要注意的點已在文中標註;同時因為usart與pwm共用pa2,因而涉及到usart的失能;而本次為了使led燈便於控制,特地用暫存器版本寫的,涉及位的與或運算。具體見程式。

完整程式和**

螞蟻感冒 第五屆藍橋杯

螞蟻感冒 長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只...

第五屆藍橋杯 撲克序列

問題描述 a a 2 2 3 3 4 4,一共4對撲克牌。請你把它們排成一行。要求 兩個a中間有1張牌,兩個2之間有2張牌,兩個3之間有3張牌,兩個4之間有4張牌。請填寫出所有符合要求的排列中,字典序最小的那個。例如 22aa3344 比 a2a23344 字典序小。當然,它們都不是滿足要求的答案。...

第五屆藍橋杯決賽做題報告

第五屆藍橋杯決賽做題報告 此次比賽是我本人第一次參加全國性的程式設計比賽,比賽結果 全國c c b 組二等獎。做題情況 寫了前 5題,程式設計大題可能部分測試資料沒過,最後一題,寫了乙個多小時,當時想到用寬搜,就一直寫了下去,沒有想其他的方法,結果,寫完後題目給的測試資料都沒過,此時比賽也接近了尾聲...