一. 简介
4 s1 H4 o& ]; x7 w( W2 t在前面几篇文章中,将这个项目的各个部分都做了简单的介绍,今天在这里作为一个完整版分享给大家使用。喜欢的话,可以自行获取。4 e4 E; J. w0 s
6 B, F u. W' v. ~- V* O演示视频% @8 D/ O: o7 |9 q3 c) |6 i
观看过演示视频的话,这是一个很好的课设,或者作为初学者入门实践一个首选。
4 m/ ~3 {; H1 T* r3 v
2 d, O8 o* ?$ K6 F4 v* x1 P! J! h8 A
二. 项目框架介绍
4 r# z/ D: @( L/ L' L- F本项目没有使用RTOS操作系统,是一个裸机程序,使用的是一个前后台的框架。中断回调函数用来查询各个状态是否发生并做好标记,然后在main函数中进行相应的处理。2 B+ U; k) c7 v
$ a- @# C2 l* r: X+ {( l* @# ~
在进入到main函数之后,是对各个硬件部分进行初始化,并进行开机动画的加载,这也是一个标准的流程。* g5 [3 b& m; F' f
% L0 v, V) `8 P! C$ A; F X; Q- uart_init(115200);% r& v' G2 B/ M( t6 }% o p
- delay_init();
/ c: K l8 U- b9 D/ } - LCD_Init();
' h& o+ P! s1 W3 q4 X. e - TIM4Init(); //延时
4 e% |* N' _ r1 y - InfraredInit();$ O: w5 |: H4 |5 ]6 I
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/ `' h) y# K3 L
- LCDDMAFullOn(BackGround);: z. d; m1 V7 `; y* |( @/ ]) L
- Boot_Animation(); //开机动画0 K9 O& B* K+ s m8 L, Y$ A6 R
- LCDDMAFullOn(BackGround);
复制代码 8 `3 l. B: L C+ j0 J
然后就是根据当前的模式进入到不同的if语句中执行相应的函数,默认为主界面,在里面是一个while循环语句。通过按键的值执行相应的操作,在每一次操作完后,要将按键的状态复位。SelectUp和SelectDown分别为光标的上下移动,切换状态的时候,利用break即可跳出。
, t @* Y) W- l) D# b+ u其他的每一个状态的实现过程都是这样的写法,非常方便扩展。% M K& b, \ ?- q% g- _
9 [0 _ t% }, l) u) w
- if(CurrMode == Main) //主界面
3 L U. Y$ }3 | - {
- I8 X6 k2 L2 X6 B' b - LCDDMAFullOn(BackGround);: U% A, S3 F/ f+ i+ `% f3 M$ z; T! e. _
- MainInterface();: X+ B8 z" g5 f& m8 v( c
- while(1)
0 S: u; r; | G0 @* v, ?1 P; h/ A - {
" n. L- a4 g. N9 Q2 m* v - if(KEYState == KEYLEFT)3 Q; d, `; t. e. r4 q
- {
! l) P% ^ Z: Q6 S& w- g4 H0 @ - SelectUp();
@/ h* U! z0 j - KEYState = KEYNONE;
/ T' d# A1 c/ {& D1 ?' }5 P! M - }8 o" A7 N' L L9 \9 g
- else if(KEYState == KEYRIGHT)
Y4 S" Y; ^" T4 T+ M3 U" \6 V - {+ m$ c7 }' x6 \
- SelectDown(); 3 w& b+ g( o# _
- KEYState = KEYNONE;. g' A7 H/ q0 X' I3 b P9 s
- }/ E9 ~+ P' u3 w2 E5 M8 T/ o
- else if(KEYState == KEYUP)
N" ]1 S, _% c' _! V+ ~) k - {1 m6 J3 Z! ~% P5 W- h- P2 @
- CurrMode = (enum State)(CurrIndex + 1);# c( B" j+ n& Y
- if(CurrMode == 3)' y; d" }! v" J; Q
- CurrMode = Photo;
/ g: Q. K. V. Y8 E# ^ - KEYState = KEYNONE;, x# j9 i3 ~0 r @
- break;) p2 B4 U, q% S) }* G
- }) X R: M) X: k6 f4 Q0 |& S
- }# B- m$ f b" Q0 |! |
- }
复制代码 + w8 m6 ~. h& H2 t
2 I4 ?3 y, J, c. {# M) c5 O& ]+ H5 B
- J, m5 A7 u8 Z. D
% S; ~* ` t9 ?1 _ |