1、设计目的 J+ G/ Y+ g3 f8 r' l
(1)掌握使用KEIL MDK5进行软件开发的具体流程;
7 M2 U! J4 M2 M
, W8 P7 o- l# h0 X" }: J# n(2)掌握硬件电路的设计方法;: m* ? X: H2 b+ k. h/ t
* u& b0 y3 w; I I. \$ r
(3)掌握STM32微控制器的程序设计及代码编写方法。
) |+ v9 x3 G) H" c9 u) q
, D2 H6 {. V3 z0 ^8 e+ O/ s$ R' |2 v% D2 g/ V
2、设计具体要求6 H* U( b5 v z6 M
(1)通过STM32自带的实时时钟功能获取时间信息;
Y0 v9 y0 H, v: f( h! V3 H H0 Y
9 M7 @% S0 ?- V M& V; H! D(2)在OLED显示屏上显示日期、时、分、秒等时间信息;- U$ g6 g) w3 V. ^- [
|0 t4 z/ ]" n% `(3)通过按键可对时间信息进行修改;
4 j8 I1 Y) \6 y) @. Y6 B" K& J/ p2 X D( u' _4 P
(4)具有闹钟设定功能;# ~$ B& D4 T) ~5 x( p8 N
+ B5 o/ P/ j! k2 K+ |, `
(5)加分项:自行增加其他功能。+ F+ \* P# {4 A
) m( }& u$ Y* E8 `1 a/ `: c$ p7 W$ O, X& V+ u# `
3、proteus仿真图2 i% A8 {! x, Q% j( \
$ ?. ]$ R8 D# U1 _! y
2 G; f l6 ?( I( D, H$ P
# d" _# F1 S5 B) L c
; `# S9 S/ D a! Y
4、程序代码% _- ?" X& t# I2 Q% ^0 x, p
- # include "key.h"
! l* I8 ?: q' f4 n - # include "sys.h"
% O7 V- j) b0 V' s q; F4 h9 {8 O - # include "timer.h"
2 s; Z! e$ [1 U3 F) P6 W8 S - # include "digitaltube.h"# t- c3 e" T1 U$ Y8 T
- # include "exti.h"
# D% P5 e( O$ S - # include "led.h"4 u5 f5 t9 K" |/ C3 ]
- int flag1 = 0;
% h0 l7 [$ B, p( s - int count_l = 0;; U1 z0 F. H; K; i2 Y
- int count_h = 0;
, G* `. F0 V) A2 d7 a# n - extern int temp;6 `, z* |! _9 ^2 Z0 M% P
$ d. z4 F5 ?" q5 {3 F: p- void Init (void);0 n2 u' i G1 Q$ Y8 T
- void Mod_Time_Check (void);2 @6 t4 [. s* b; [
- & y+ b' D, G( L. Y2 i# X9 F
- // 主函数
, l E6 F3 C0 a# V1 ] - int main(void)
& ~$ I- U; Z* O0 g' f+ [' \' E - {; V0 p+ u& n r$ Y0 O! Z3 L! e
- Init ();
) s2 a; v4 g6 P6 {6 X) x8 F - ' l3 {1 [+ E* v1 y* R9 H% [
- while (1), q6 s6 @& l- Y: ]( _
- {
( u' i% f$ j8 ?) p: A \ - Mod_Time_Check ();$ s3 `/ F7 }. @' G# p( P* O- C
- DigitalTube_DispData_H (count_h);
+ e( d& {' G+ m$ t+ X/ p' { - DigitalTube_DispData_L (count_l);6 ?. R" R i' I6 n
- }
1 Y m3 G( j. y2 M7 ?. A4 _3 R - }
9 H( b2 [4 U8 M; K5 e/ i - + w' G0 E# l( l+ [, W1 {- o6 v
- // 初始化函数
. }, n/ ?% ]' _, G - void Init ()
9 m+ F# a1 [/ B4 W! ]# e( M - {
. v6 d0 ^+ T3 C0 M9 a- o; l- x - NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
; c! F) a1 b7 c# G - TIM3_Int_Init(10, 884); // 根据proteus环境而设置的1ms定时+ E3 w( t( ^; V2 S, i6 S. N
- DigitalTube_Init ();9 U5 t; G* W- t% d5 X( \8 A
- LED_Init ();( K7 E6 A4 ]: r' o
- EXTIX_Init ();
+ M+ r7 z, A( h! T4 t. v" g0 x% U - KEY_Init ();+ Z; \ g& h. u; h( _2 b! O
- } F p4 i8 Z' m0 g3 ?5 U8 l
- " g5 n$ O% l! F4 a
- // 设置时间函数- Y; ^# K; Z0 N2 B4 J* z" z
- void Mod_Time_Check ()
# ~4 [8 @& L) E7 a2 b5 \ - {
" E0 |# ]4 R8 `5 ? - if (flag1 == 1)0 z$ @) _, `4 Y& O* H/ j
- {
W' m/ h1 p4 V% e) o' A' b( m - int i;8 m& [7 ]% ?1 t4 L- E0 H
- TIM_Cmd(TIM3, DISABLE);8 A4 [3 `$ b& V: c/ _7 Z! ]) q9 G
- DISP_ZERO ();
; F S* i+ r& \- I2 h4 X7 y$ w - / ~; m% F7 O# R" [; ~
- for (i = 0; i < 8; i++)
) n6 `3 x1 {% R+ k7 c( q2 t( F - {# T) o: O+ ^* p# e# e2 Y
- Set_Time ();
( O9 T! x$ q3 t! Q7 E/ y# v - GPIO_Write (GPIOA, 0x00);& F4 v# H8 I+ F# k, a, g
- DISP_Bit (temp, i);( n- K5 ~9 `0 p
- }" z" I) V' w/ ^$ q: _
-
$ W7 q. V0 D4 `. G- D) Q - TIM_Cmd(TIM3, ENABLE);% k7 Y' O5 a( {. x
- flag1 = 0;
' @ O5 o I' Z2 x: g; Y - LED0 = 1;* ?1 x/ E9 W7 I/ ?
- }
- ~8 z* M, e3 b' X, S3 w - }$ q* T- u( Z5 S1 j/ \1 u. ]5 w0 W$ e
复制代码 3 W. ?9 _9 \& T. d/ l% `! Q
————————————————
! V; l% k" b6 O8 A版权声明:十言1
+ D' s" b w0 Y7 {" a
- x; g; C$ ^. A5 w1 ?4 {3 V |