本设计
; Y; u! G9 m Y: p STM32电子钟万年历Proteus仿真_LCD1602液晶屏 (仿真+原理图+PCB+源码+参考报告) 仿真:protues 8.9 程序编译器:keil 5 编程语言:C语言 编号C0003 基本功能:, p5 a% ?1 I2 {- d
1.具有显示年、月、日、时、分、秒功能; 2.能计算并显示星期; 3.能手动调整时间; 4.具有闹钟功能(LED)。
C5 B- r4 g/ q" J$ h8 _& a
仿真图(提供源文件): 原理图(提供源文件): PCB(提供源文件):
7 o# |4 Z6 M6 N% {, }3 N
程序(提供源文件源码): ; Z/ w G# [& G3 `
2 G) k8 {$ ~; l6 g C
以下为部分程序: - int main(void)' ?! v0 l: f7 C1 n
- {6 c/ [5 x& O( `, t v& c/ a& ~) p; o
- bool i = 0;- k* |0 L4 j9 }. g
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */8 s8 C$ y: O. i. K3 w4 i: R5 q$ U
- HAL_Init();
3 n. B2 d6 y/ ] - /* Configure the system clock */
. p3 u! q& S4 }+ b8 D: @( ^ - SystemClock_Config();8 K& Y5 j) f5 U
- delay_init(10); //初始化延时函数$ ^# |- U/ z- i1 ~0 N
- TIM3_Init(2400-1, 72-1); // 10ms
6 {! |5 E% h9 G4 ? - MX_RTC_Init();
5 E8 C; N3 l3 H - Key_Init();
( [* g8 ^ u5 {: q - Beep_Init();
& S' q r* U x4 y - LCD_Init();) Q F1 Y! E( D3 c- u* L
- sAlrm_g.Alm_Hour = 0;0 [9 z# l1 Q7 P+ Z( J1 M( d
- sAlrm_g.Alm_Min = 0;- B7 q( u7 F; `7 E; b
- sAlrm_g.Alm_Sec = 10;
( X: p- u; y" `7 d& a/ X - while(1)' c3 n7 ]) M& m" ~
- { K4 F1 W; h% s; ~! l+ n
- switch(set_mode)
r8 e5 `% A( j - {
( c+ H0 R) D1 P, {4 Y/ E - case 0:$ v: O! c; m- Q, J$ Z( i! C! k
- HAL_RTC_GetDate(&hrtc, &sDate_g, RTC_FORMAT_BIN);; O! u8 U+ y- V' s7 y8 f9 k0 ?" X
- HAL_RTC_GetTime(&hrtc, &sTime_g, RTC_FORMAT_BIN);
+ n7 \. E& D- E) z - Conv_Disp_Data(0);& W( i, w& j8 t0 C2 e2 p
- LCD_write_string(0, 0, (char*)temp_line_one);$ S/ o# b: E5 M- K& `/ \
- LCD_write_string(0, 1, (char*)temp_line_two);& b b' F% _/ W; Q8 }
- break;: S" V3 F1 L/ C( F4 G7 c
- case 1:( {8 X* v; m+ b& N
- Conv_Disp_Data(i*1);
) X+ h: E3 g& t( }7 U0 x7 r4 S3 K - i = !i;
. o- U8 R f0 m' T9 X% f( }5 v - LCD_write_string(0, 0, (char*)temp_line_one);
, z4 z" C% y d0 X& ^0 h - break;
% I. q; f: ~' h/ e- C/ ^: B+ [( w - case 2:
( K( I' O/ g6 l% R5 D0 i; u - Conv_Disp_Data(i*2);
. D) O- @9 n1 K- U, K. F - i = !i;5 L0 b" b7 K; u0 `" q* R
- LCD_write_string(0, 0, (char*)temp_line_one);
7 }5 Z& J% W/ C2 ^+ T5 |: A/ b) S/ c - break;7 L8 l% X. n3 O& c a* K( f4 ]
- case 3:
1 ~% n# E9 l, @# T) a% F) v$ a/ k - Conv_Disp_Data(i*3);. E/ v. o; P6 J# D: U
- i = !i;$ E1 h6 c+ J4 t6 U& w; E
- LCD_write_string(0, 0, (char*)temp_line_one);- Y( {8 ?7 U2 K' ?- L
- break;
, N8 k9 L6 S* v2 {/ J& y8 C d! N - case 4:
$ ^# E. ], q# ~' y O - Conv_Disp_Data(i*4); y/ g8 i$ [- V& j, o
- i = !i;
- D; }2 K' R' F - LCD_write_string(0, 0, (char*)temp_line_one);. a( z9 ~/ i4 p" s
- break;: p1 W# ?9 k* R' W3 _' G" @
- case 5:& a: J% i& D- R- M! f
- Conv_Disp_Data(i*5);
: P3 k/ D& Q. p( O0 v - i = !i;5 d; B9 q5 K1 l! T
- LCD_write_string(0, 0, (char*)temp_line_one);* u4 W1 u) `# c" r: H
- break;
+ i8 o( D' k. u/ \( } - case 6:2 K2 l. o- G& g0 W$ U
- Conv_Disp_Data(i*6);* S" f% L9 U/ E) o. o |9 _# u. N
- i = !i;% G* _* S7 t7 w* g0 c$ L
- LCD_write_string(0, 0, (char*)temp_line_one);
5 ]/ V# A" n/ D" Z" d& ? - break; - u7 N9 N {8 O( ^9 }- ~ D
- case 7:
% V0 U0 [; H4 s; S4 W; T, N - Conv_Disp_Data(i*7);
5 W$ q# W; O8 c* m$ f& n+ H: H - i = !i;0 @3 r* y7 H1 a V
- LCD_write_string(0, 1, (char*)temp_line_two);
# m3 n8 X, r X W6 u& x6 A4 g - break; 2 p+ N" ^+ ~9 A, q1 }1 {9 ]2 f2 d
- case 8:
/ M! S8 ?6 F! [' x% d' c; b8 q" R - Conv_Disp_Data(i*8);
/ U$ `2 l' P% @; J - i = !i;
2 P; Y' K7 _8 j! ?, ?4 e' H - LCD_write_string(0, 1, (char*)temp_line_two);/ T0 t; N/ y4 q/ Z: u
- break;
* j5 `3 _2 B9 p* V - case 9:; ~0 t+ L# x2 {
- Conv_Disp_Data(i*9);
" v+ a+ R4 c( x5 W% X1 j - i = !i;
: M* |2 w- p% \$ c& W3 j - LCD_write_string(0, 1, (char*)temp_line_two);- W5 x5 x: N" o4 e' D
- break;
! k% z4 I6 O1 n. E3 u) T6 V - default:
6 o# q' t W _4 E% j - break; " i4 k- W% e* O: W- T. W
- } 9 _2 T) \6 L5 Y& p$ x$ H
- if( (sTime_g.Hours == sAlrm_g.Alm_Hour) && (sTime_g.Minutes == sAlrm_g.Alm_Min) && (sTime_g.Seconds == sAlrm_g.Alm_Sec) )
+ f% Z' `4 j4 \ - {/ B( K9 Q9 ^( K2 X1 B* u) V5 h
- for(uint8_t j = 0; j < 10; j++)
0 W) W, a9 N6 E - {& ], U& C0 }% R" L: W4 m3 x! M' [% {
- LED2_TOG();7 V% \6 v0 h6 d" \: A* f o
- HAL_Delay(300);: E9 i, Y' N D) @+ |: a5 d
- }
7 d& ?% [8 u) @/ t- ^ - }0 @7 j& I% Z" {! R& H0 U6 V! S8 e) k
- HAL_Delay(100);. A4 P: y" ^0 V x$ Z) ~) i0 ]" i! v
- }
4 s; J$ }( T, D9 B0 O9 w - }
复制代码资料清单:
; d6 `, F+ ~ |8 ?6 R& w |