本屆試題主要考察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題,程式設計大題可能部分測試資料沒過,最後一題,寫了乙個多小時,當時想到用寬搜,就一直寫了下去,沒有想其他的方法,結果,寫完後題目給的測試資料都沒過,此時比賽也接近了尾聲...