- #include "sys.h"
0 y2 H% ]4 s# E: t4 w: v - #include "delay.h"2 a) N" z% r' @
- #include "led.h"
1 B. h, q8 C& [6 { - #include "pwm.h"9 d: ?7 D% q" {4 A4 J5 o1 Q4 U
- #include "key.h"0 L0 e5 w Q6 T% y! t- C) n
- #include "myiic.h"0 |; F* J: u- T- t8 v$ U
- #include "oled.h"
+ |9 p1 Y- z- g# t& y; l - #include "tim.h"& N+ k+ K7 h* ^8 g8 p
- #include "adc.h"
9 G4 K3 E& j# T8 Q8 y9 g2 M
4 R/ m& Y/ H& [- extern u8 TIM5CH1_CAPTURE_STA; //输入捕获状态 & N' X6 N: f5 J- u! N; `+ _4 ~6 ]
- extern u32 TIM5CH1_CAPTURE_VAL; //输入捕获值
: P1 J0 g9 M8 y0 O# K* r1 M5 _
; W* N$ o, p; I/ k# e- E4 R
$ o1 }% R& Z: Y4 {- int main(void); k6 M& m8 E- H0 L6 X7 q
- {
: E( c8 l. v |( D3 b - u16 led0pwmval=500,led0pwmval1=500,led=0; $ Y2 s4 [# M e# o1 y5 w1 c- l" H( I
- u16 Autoreload=500-1;
$ t9 b; W: x/ ^1 A) W2 x4 i- y; Z - float temp; ! W9 ~6 {7 E% f$ J
- u8 dir=1;
# O& \) [; l7 ?9 M2 ^0 e0 N0 c" T - u8 key; //保存键值% J" ^! ]" {' ?: n' ^
- u8 i=0;" i* i: v% K/ R
- u16 adcx; z3 q, N5 a t& \
- float adcpower;
, C0 J3 ~* ?. x* o% @ j - 3 q& n# @8 J8 J7 B" T2 H( p+ }
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
3 \, Y1 L3 M" @ - % U5 f' d' q3 @/ i
# M$ r- w) f! r7 u: \9 h# g- delay_init(168); //初始化延时函数* y4 A6 i9 S3 P! q( h! t( x, f. r
- LED_Init(); //初始化LED端口 8 W; x ]6 ^! S' [8 N3 C. N, t8 O% L
- KEY_Init(); //初始化与按键连接的硬件接口
* w9 H z4 n# ~: w/ E# I* P' x- l - IIC_Init(); //IIC初始化
/ w- |$ W5 Q3 T1 X" u8 q; E0 P+ l - OLED_Init(); //初始化OLED( T" ?4 o! Z0 c8 b8 ]1 S
- Adc_Init(); //初始化ADC
) A7 u% K9 K' o" u, R
& u, @, c6 i0 Q: C8 k- TIM14_PWM_Init(500-1,42-1); //84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz. + N& x5 f. F, q
- TIM13_PWM_Init(500-1,42-1);
) s$ { S& a* Y3 ?& X - TIM11_PWM_Init(500-1,84-1);2 Y- j1 z! k. D- B; k* Q7 r6 n
- TIM10_PWM_Init(500-1,84-1); # _# X: O4 b2 Y. l8 V
( q! B1 ~- p7 ^- while(1)
9 P, e. Y X2 p* w1 m) H - {
# B- a2 }" c6 s - delay_ms(10); 7 h, Y* l; H5 o0 M( M. Y) K: Y; `
- key=KEY_Scan(0); //得到键值
$ W8 _1 Q7 `# _ G* X5 G - OLED_GN();
2 N& |1 e, b# m" \' F9 A - if(key)
/ q* L& R" k% B, @4 J+ Z6 W$ C - { 6 S& W* I/ \4 q/ [+ a9 V# o1 [
5 S6 w+ i0 w) k1 C& q& K- do{ key=KEY_Scan(0); / z$ l/ Z* B' Y/ {: e, N
- switch(key)2 A, G; X+ e1 H9 N. N6 w
- {
# T! t6 p( ^. l) t3 k - case KEY0_PRES: i=1;break;
( u# t: M/ V7 N. C$ `' O1 c8 } - case KEY2_PRES: i=2;break;% Z5 C; r7 Z3 |; S" t7 ?
- case WKUP_PRES: dir=!dir;break;+ K- M) E _3 q i& x
- case KEY1_PRES: " K( ]; h) @8 s% Y1 z; G& `
- { if(dir)
2 _5 @: W. `0 b: c _ - {
- l4 a4 F/ K% Y, `5 Z1 g - led0pwmval=led0pwmval-20;
: H6 q2 F* N$ B9 } - if(led0pwmval<Autoreload)TIM_SetCompare1(TIM11,led0pwmval); //占空比增加
_5 t7 X9 r# }" F' Z* s: G; y - }. O& I+ u% O8 e$ R# a$ H! c% E
- else if(!dir)
' I- S4 }" y1 i - {7 G! l6 K% M2 {4 M b
- led0pwmval=led0pwmval+20;
# V6 e) ~* t7 f. A3 |2 _ - if(led0pwmval>0)TIM_SetCompare1(TIM11,led0pwmval); //占空比减小
# R7 O, V5 ]! F0 i, e - }
6 {- O5 U; w' L1 ] q6 k - break;
3 W- Z. K( w/ x+ E& }$ t - }) @& `% N9 h! ^* d( s2 v0 k/ j- }
- }2 P& _9 G! H1 e2 z: d
- }while(i==0);
/ L. @* X. y8 R2 Z: k -
) }' g j1 _1 ~7 J; W8 V/ o - do{key=KEY_Scan(0); + H# ~" A# z1 e9 E) k2 Z: \
- switch(key)
! r( D+ n* d' j5 a - {
d) |8 p& o: N( _ - case KEY0_PRES: i=0; break;
- K g: M% k; m" W. M) b - case KEY2_PRES: i=2;break;
4 u7 S5 f w: R P6 e. F+ a - case WKUP_PRES:dir=!dir;break;
) A0 V6 ?; Y" X( _ - case KEY1_PRES:
( G P- o9 t/ D9 A& b, C0 ~ - {if(dir)
0 G3 D7 @! ^" f" k- Q! m - { led=led+20;
3 ?, q) p- e0 E2 `! `2 W - led0pwmval1=led0pwmval1-20;; C* d% n, p3 a8 T) ~) f4 ]
- if(led0pwmval1<Autoreload)TIM_SetCompare1(TIM14,led0pwmval1); //修改比较值,修改占空比
8 ~( U5 @: O9 D' P& S - /////////////////////////////////////////////////////////////////////////////////////////////- Q6 T4 B9 X% c; u6 F' i
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
3 p7 h1 @+ L; K/ L$ y; ? - adcpower=(float)adcx*(3.3/4096)*10;1 {; R3 ~, g D, e
- OLED_FloatNum(53,0, adcpower);
4 y5 C+ w2 g. q1 Y3 w - if(led<Autoreload)temp=(float)led*100/Autoreload; //占空比
9 f2 T! e' g* L# a# k7 T" Z' [4 E/ e - OLED_FloatNum(60,19, temp); , w" u! e+ c; f4 j
- temp=(float)1000/Autoreload; //频率计算0 k5 `: ]+ e8 V! R
- OLED_FloatNum(45,21, temp);
- U- d% N( f, @5 {$ ? - }% c% a! b( Y* @, s
- else if(!dir)
2 @( \7 }8 g1 ]# v% Q: z3 K0 ^! m - {led=led-20;
' i: D* g, n* V& k9 d - led0pwmval1=led0pwmval1+20;) t% d* W+ p% k4 B( {
- if(led0pwmval1>0)TIM_SetCompare1(TIM14,led0pwmval1); //修改比较值,修改占空比
! L. V1 C) R/ h% ?$ Z5 n - ///////////////////////////////////////////////////////////////////////////////////////////// 6 J# F0 v( d& i: ^) E* j) g
- adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
# T; @ k* G# k. W6 X+ P5 a; i* ] - adcpower=(float)adcx*(3.3/4096)*10;/ O* L* s) r* Q" {
- OLED_FloatNum(53,0, adcpower);
0 t' W H! ~7 f9 z8 _ - temp=(float)led*100/Autoreload; //占空比 l) m9 v6 z* K8 x! ], q6 i [
- if(led>0)OLED_FloatNum(60,19, temp);
g* b. c4 J) \ g$ p+ r - temp=(float)1000/Autoreload; //频率计算& Q# i' e! w4 D1 R! J0 d
- OLED_FloatNum(45,21, temp);
( f# i7 H- Y7 D: N. w, y D. U - }
# b& \! f1 M- s; C4 u - break;
, S: L# I& Y7 V9 U - }$ H' g6 {5 }* t0 @, Z w
-
" T* P8 h1 [' V# l - }
1 q6 Q3 p& W8 w1 e6 ?6 ]( o - } while(i==1);
0 _2 x0 M, @/ ]* c* O& n, k% A4 ` - ////////////////////////////////////////////////////////////////////////////////////////// f# G. t* ]6 `- t$ Y
- do{ key=KEY_Scan(0);
% U5 y$ H5 a% ?; Z: e; C& P - switch(key)
" ?# |' X ]' m* h! K( p - {
2 I' C, r6 X% k: j - case KEY0_PRES: i=0;break;
* P4 [ {! r [3 P9 d3 O/ r8 @( @' R - case KEY2_PRES: i=1;break;( B4 C* p* H. G2 M( o5 ^
- case WKUP_PRES: dir=!dir;break;/ {& M. Q: }) }4 ^% @8 M
- case KEY1_PRES:
" J9 a0 ?. g% A6 ? - if(dir)7 q6 B* `+ G( Z- h( L
- {Autoreload=Autoreload+100;
0 F' \ E) L) ]; _) C5 a k9 \ - if(Autoreload<=1000)TIM_SetAutoreload(TIM14, Autoreload); //修改重装载值,改变频率; m8 S2 p1 i1 F" R7 A" X5 t
- /////////////////////////////////////////////////////////////////////////
' m; R2 K2 u: k1 [: d3 ~ - adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均
1 v: n3 J$ j5 y/ R - adcpower=(float)adcx*(3.3/4096)*10;7 p( ~- [4 m0 y- H" n9 C
- OLED_FloatNum(53,0, adcpower);4 s- z2 X- e* o- M) p
- temp=(float)led*100/Autoreload; //占空比
) Q8 `+ r7 Q6 I8 z7 y# | - OLED_FloatNum(60,19, temp); $ u( C3 c% U6 }# e
- temp=(float)1000/Autoreload; //频率计算! p5 W \1 |9 ]7 Z6 [. S) r
- OLED_FloatNum(45,21, temp); - V2 X1 G8 _/ I" P( I
- }: h1 A( z- s$ f3 ?1 D2 \% T1 }/ \
- else if(!dir)
. R9 N; y$ W3 u - {Autoreload=Autoreload-100;
4 A. q9 J' K4 o+ f; {- X! N% B - if(Autoreload>0)TIM_SetAutoreload(TIM14, Autoreload); //修改重装载值,修改频率
4 _# H6 W) y$ b0 y. b) o8 `+ R2 \ - ////////////////////////////////////////////////////////////////////////////////////
3 H6 B8 \0 V: {; b) g2 P - adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均# ?: q H$ \ r7 d
- adcpower=(float)adcx*(3.3/4096)*10;
$ M' ?) J; [' D3 t2 M, h9 f0 [% j - OLED_FloatNum(53,0, adcpower);
9 ]& U" p ]* M4 V" }% } - temp=(float)led*100/Autoreload; //占空比1 |* G6 I" ?0 U) E$ L" I. B! B
- OLED_FloatNum(60,19, temp);
/ _' Y0 U( Z3 W- A+ }; f/ u - temp=(float)1000/Autoreload; //频率计算% a3 z Q9 T0 f+ n& E( b! X
- OLED_FloatNum(45,21, temp);
{( t. x& t' f7 o - //////////////////////////////////////////////////////////////////////// + h! ?+ B9 A" b w, @
- }2 o8 {% n# s' @' W
- break;# B+ A. Y l( X; ]; h1 |; ~3 F
- }+ Q* _0 V: ^* s& v
- % k" f v! \! ^2 H
- * h4 E% _6 p2 n: |7 s
- } while(i==2);
& L% N4 w' {) w1 x6 _$ ^ - }else delay_ms(10); $ a4 P- d3 i& }+ _& s1 u- `
- }' J) b- `0 a3 ^! K! r4 t9 J
- }
复制代码 1 H( m4 c O9 z4 E6 S+ D5 l; {
1 ~' D1 J; P1 u/ Q1 |1 f1 y |