1、设计目的
2 j8 ]- @: [: ^* m(1)掌握使用KEIL MDK5进行软件开发的具体流程;- S* n: C; J! x- Z
( S, y2 F. `( k2 o: E(2)掌握硬件电路的设计方法;7 y6 i# w4 n2 I2 G4 M. i
" s0 f8 c; k6 D0 x# V9 e
(3)掌握STM32微控制器的程序设计及代码编写方法。
* ?' G& Z/ T) v0 O* m
) B- ^5 J1 i% \9 _& j/ @
% A) ?, J2 n. X @ X( x2、设计具体要求
" g3 f) S# e( H% ?+ C& i(1)通过STM32自带的实时时钟功能获取时间信息;
4 \8 o1 R- C/ }# A8 c/ O: E# e+ H+ v2 G [) f; J
(2)在OLED显示屏上显示日期、时、分、秒等时间信息; F$ `. s' X0 E" b* L) F. C
- i( o- a$ Q" \. ^4 k
(3)通过按键可对时间信息进行修改;
6 V( v- W2 k* f- I, t" p: |2 p
(4)具有闹钟设定功能;! a0 ~ F& U4 T$ o" ^
1 Q3 I. ?7 J/ S1 c(5)加分项:自行增加其他功能。+ d$ B6 h) A, w6 k* D; ?9 S9 I
4 y3 z2 F- y4 }% c) h
9 L" `$ K) v7 ~8 v& e& u% Z3、proteus仿真图
8 ?5 S. }: G$ P* j- E R @( v4 S, `
\, f$ X5 R9 E
" D; P* h# B6 Y/ x4 t
8 L4 z5 \ k3 X. d, Y9 l s* A4、程序代码' X, ]3 v2 e& ]) |' `* P
- # include "key.h"
7 _1 N6 v( l0 m0 W - # include "sys.h". x3 e7 O# U& N1 S) B6 R, Y' q
- # include "timer.h"' E' t; F) a/ D7 i
- # include "digitaltube.h"
# p6 u5 |- u' {& K: \7 R - # include "exti.h"9 D$ X* Y; o6 p7 I) T
- # include "led.h"
# i6 f, G2 X2 s$ m# c3 E- S - int flag1 = 0;* }3 S' V" l, \- J
- int count_l = 0;
2 w$ @! K0 W5 t/ b - int count_h = 0;% w9 s( u+ J9 i3 \* W
- extern int temp;1 O4 m, y5 ~& d' J$ x
, h7 ?; v& X- ^ q' z) u- void Init (void);) W e( A- c0 b
- void Mod_Time_Check (void);
* X% J' v" z/ C
: N8 S) F& b/ B/ c- // 主函数! j( M, n# y# @! o5 W5 o7 {) l
- int main(void)
1 p! B x3 C- w3 a. c - {
4 R5 d. k7 o8 u0 j) k t) E - Init ();" X3 S4 Z3 U+ T, x& ^/ O
-
3 W4 e$ S, |9 b! l9 h4 b6 I) K - while (1): ~/ ~& {* @9 S! P& P' J1 f
- {6 q' b+ ?0 X$ w% w# {( i$ g0 h
- Mod_Time_Check ();3 X" X+ b7 ?) d3 a
- DigitalTube_DispData_H (count_h);+ X* L4 V' u6 s* C9 Z5 Z
- DigitalTube_DispData_L (count_l);
; \. t6 D( v* D }9 S2 l - }5 {8 H8 u5 a z- h& b; ?7 q
- }
+ S- C& H+ t- Z7 U( K - , |$ w( o4 v- a$ ?$ v
- // 初始化函数2 i, u# d! X" ^# h' y) {
- void Init ()
0 T1 k; a* e7 t% f R! A) @ - {* u" S7 I0 I1 s& {
- NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
( @6 u( x- O; F; u! o# n/ S( v$ s - TIM3_Int_Init(10, 884); // 根据proteus环境而设置的1ms定时
& O% [8 n& |, i- x! [ - DigitalTube_Init ();' ]9 Q, g0 f) M u. A9 W R6 V S
- LED_Init ();
5 [- M9 y/ g' l0 j Q - EXTIX_Init ();% ~1 [ U1 P3 @$ F+ `( m' v
- KEY_Init ();
) R- x5 |* T6 b - }# w2 S3 X. i) O" C8 D5 O, m
+ y' Y+ @ ?# h" ]- q$ _8 j- // 设置时间函数
/ G4 @8 l+ ?5 c - void Mod_Time_Check (), z0 h: g0 X/ Z0 A2 s# B9 O
- {% ^% @: n* _" W1 z- K9 X
- if (flag1 == 1)# K, p# \/ ]$ z- a& e" ^
- {) a/ ]+ N0 C9 W' C( |
- int i;1 Y- A7 Z1 A6 M+ ~1 y
- TIM_Cmd(TIM3, DISABLE);: t9 a. `" w, s9 A: J% `3 X3 |* g/ S
- DISP_ZERO ();6 g9 @7 v( n& u2 {. E8 a5 X0 c! Z+ o
% r& H2 F9 _3 y9 k. W9 D1 s- for (i = 0; i < 8; i++)
0 i) ~/ ~4 e/ z - {
+ \9 B7 [( `) _8 q, x: W3 a - Set_Time ();
7 U1 T0 A4 n Z* F - GPIO_Write (GPIOA, 0x00);
7 K# u# c- u }( G, r, a - DISP_Bit (temp, i);
3 a' @) s) X, O - }7 s! U" B; f! w+ D- [, I( P% u
-
; Z4 Y+ E+ B# P6 Z9 b - TIM_Cmd(TIM3, ENABLE);
! Z1 O% V! U, P8 w) h0 @, F - flag1 = 0;; I$ B* a/ ?1 A0 B8 [, P8 b
- LED0 = 1;& H6 `( [4 i' o8 o4 S) j6 z
- }: f9 ^" H4 n/ l( i
- }2 j8 f4 a) l. e: P4 G7 ~
复制代码 5 T$ X2 v2 G4 @
————————————————
, ~1 K% E4 v8 l1 w$ {2 T版权声明:十言1
3 L# M# z( C- j) ^1 b" g& @) a; G- G' r" v
|