硬件模块& h5 f. M& j- s- ^8 s+ m8 R9 _( L
单片机一块$ X; p' n; @- s
8 w% C3 Y) g7 ]9 s% p
% H( n7 i* s& }( [0 ?
4 m# M F! v8 V0 U- V- R# U# d8 L( V
& [& T/ e) U0 a* v3 HUSB转ttl接口一只
1 w- w) m/ H4 }, O' T( Z
3 O& O; g2 j0 w [1 j
0 f) f0 N6 b) e$ q3 @' W! K3 R
% v- C) H3 {4 |. S6 t
6 ~# {4 A/ D% _0 g! Z6 G
: ~, n3 v6 D$ a0 @" E% x, m) I4 ]( u! e6 H0 ]
! l" J0 P' @) t$ p! P% g手动焊接LED灯两个(分别用于开关和亮度,引脚用排针引出更方便接线)
9 N u/ a- J" g9 P7 f. ?* G; N0 D7 S$ {
# i9 t! Z$ \: n! |5 d# A/ }
7 {8 n" Q# P7 c7 P1 o
* U& N9 r1 \' [! K1 O. m
理论支持
( u$ C( V/ _% L7 c9 H0 x) |5 |7 C2 ~" m' t; ?$ c; c
: k/ R% Z5 f9 |$ J, t& Y8 P1.串口通信(最常用且最基础的通讯,这里不展开)
8 y, L L% @; ]: p( C) }
4 S# q8 `4 v. w* p: N6 A7 o/ T* ^- q, N5 r
2,PWM脉宽调制: f' E$ c; z1 \. m. ?2 ]7 Y
/ a# X) }# \ k8 f5 E+ F
4 I1 w" Q0 Z1 Z8 w/ {8 y+ V! l脉冲宽度调制脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
' @7 M& n( i) ~3 u* T2 z; D9 @, U9 [: p: u) x1 a' j' B" A, H
( [/ @- ]9 [: o) t
脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶 体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
+ {& Z( X5 j5 q* K8 m9 j" x: w$ B! l
3 w; H, h a' o* I2 q/ L- o* v! `
; f, P" R0 W7 E' l$ T; {, y& n; n程序思路' i$ P. h0 O' H, S3 f
) [2 H) w6 H" N! r8 q/ o/ ?% x
& T) N( e S& D5 k. S
开启串口接收中断,变量保存接受到的数据,数据定义标志位,主函数switch函数走不同的结果
/ r! Z6 z6 C2 [/ y9 g4 u) y8 h4 A0 K5 I; O2 B; G* ]2 m
' R a6 z2 o* V+ l' h8 `主函数代码( J h' H+ C! u: n* ]" G0 }1 w" y7 [
! m( E' I0 @( \
) I+ J5 }* G. x" v; Q" T& ~小贴士4 a1 ] p/ @! r6 s: \' @6 f
. Q- ?! K. T" ~* }: M
) k# o# W0 {5 l }# K/ C# Y/ S" \+ I
本项目使用的串口测试,如需用蓝牙测试,只需要把rx,tx脚连到对应的蓝牙引脚即可5 o' o1 {; c4 p" @
! V1 r2 Y0 H& J
5 H2 |6 X4 b7 L9 ~ `9 ^+ \测试可使用商店的串口软件即可
+ f8 p4 E" }. {0 \; w- int main(void)
' w* ?3 F: q. d1 j9 a$ ` - {
* u5 B0 r5 E9 t% J, f% n% {" Y - delay_init(); //延时函数初始化 ! H* r3 u+ l m- _" C, t
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
$ g6 z& y1 L4 t& n+ X. y! r - uart_init(9600); //串口初始化为9600
; O0 j8 o- ^# O: r; E$ W: v: O2 Z - TIM3_PWM_Init(899,0);+ [+ W& s5 Q* H5 e1 o% g( M' m& @
- TIM_SetCompare2(TIM3,1000);
) t) O' Y3 N4 @ - LED_Init();
" M! Q8 Z9 i& I - while(1)
* `0 a5 [5 C. y& _ - {
' }8 } R9 u* X9 l4 v) K# _5 W- j - switch(flag)+ ^& g" S4 T% b
- {- f7 t& Q2 K6 T( B; i# O. _
- case 0:, u) V8 v" u. u) @2 L
- GPIO_ResetBits(GPIOA,GPIO_Pin_8);
0 R4 Z& l" |0 e |# D% Q - printf("off\n"); . k" X% b* H% T
- break ;% A& G& y' @# ^0 i- t4 B& t8 J/ j; U
- case 1:
( T0 k/ q8 B H. j$ D/ @ - GPIO_SetBits(GPIOA,GPIO_Pin_8);0 ?& v/ U/ x( @5 U0 n
- printf("on\n");
+ H' w. ~# H$ f! P - break ;- ^ V; }9 g0 j, n# n8 Q% {- Q
- case 2:
! b! t; N+ {$ C/ U - TIM_SetCompare2(TIM3,1000);
3 P- U2 n. O# @+ d, I - printf("亮度1\n");
, V: }( j% T3 ^8 f - break ;
/ S5 t( \5 I' Y6 T1 N! ? - case 4:
" i4 _$ F9 B) q - TIM_SetCompare2(TIM3,800);
2 d; V. L, o8 Y0 F/ \0 _6 N - printf("亮度2\n");
# i$ b2 ]. `& K) R" A4 u2 P( Q - break;
4 @ [3 s5 U" d- c, `; V; K - case 5:
T: {% j/ V) ] - TIM_SetCompare2(TIM3,300);
0 O; y( D3 I( R - printf("亮度3\n"); + w# q0 a4 @% l' s) W- X$ x# r0 R
- break;
9 W+ ^; k3 d! h+ }: e - }
' }/ ?" H. G( g' X- t -
9 f; N' {3 G7 H3 h* o - }
, j" R0 d1 s9 r9 X% v: e! o4 @$ V7 J - }
复制代码 ————————————————
! i/ r1 p4 ~# }7 v版权声明:文某9
2 B% e9 q. W6 D6 c1 z4 y2 Z如有侵权请联系删除; S8 i& S# r& F) `4 Z
/ m% E1 A1 B* H: c; L5 {
# S# y. H0 [ x6 Y" Y y |