为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:
6 g+ R) A: N8 s, h3 h9 Q9 r4 q1 b5 i
% S7 N5 ^# M9 _2 B& f+ f3 `
( `7 q* U0 f: D) G/ h 实验非常简单,就是每隔1秒循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"两句文字。屏幕上的日期时间是由一块DS1307日历模块提供的,单片机通过systick中断进行毫秒计数,在主循环中每秒更新一次显示并进行计秒,然后每分钟读取一次DS1307日历模块的数据并更新日期和时间。代码非常简单,下面是主函数的代码:5 h) ]- V& N: ?; U
- int main(void)
+ j8 p5 D t9 T( Y- G* Y4 @ - {8 N8 |! b+ t# |! `# M9 A6 j
- /* USER CODE BEGIN 1 */
) y$ c- T& ]1 W- S8 f7 q# C5 p$ o - uint8_t ledn,ledm,half,disp;9 ~! D$ o& K: ~1 E6 n
- /* USER CODE END 1 */
& f/ N5 w6 g/ l* a
6 @0 u0 _" }. f+ I/ a# t+ `' U- /* MCU Configuration--------------------------------------------------------*/
6 i+ n1 V! Z- T& S4 g: D( f - 0 `( _* D+ B# H8 C& p$ f7 n4 r+ Y3 w
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */1 Q5 H v: m8 p$ O7 \; N3 A1 V
- HAL_Init();
9 U7 S& d/ E3 R! l
+ \# M9 m1 j3 G: l' o0 q- /* USER CODE BEGIN Init */
+ P3 X I5 X$ y; A" T( b* I - 8 H# m% ]5 q5 E: u2 t
- /* USER CODE END Init */
, a+ Q% S. A% Q& |
/ b7 F6 }# ]5 K- /* Configure the system clock */
9 }) W% y5 t+ O. g - SystemClock_Config();
: G: T( \: Z+ ~/ {
6 H g T% k1 u) e& _* s) j+ @- /* USER CODE BEGIN SysInit */
" e& S$ e, `" q! I - $ L7 @( m. B1 o9 ~4 F1 Z' ^" W
- /* USER CODE END SysInit */
. T W& E! \% n$ g- p, i" C - 6 F" Y9 e+ N3 R0 v1 p# M( z# A; E
- /* Initialize all configured peripherals */& @0 T- r; K0 j) `5 n, H+ [
- MX_GPIO_Init();
$ E% m2 ]& A, i1 n - MX_ADC1_Init();
9 Y3 y( w: H3 ~ - MX_LPUART1_UART_Init();
, g! ~9 Q+ b- P: C6 Y, c - MX_RTC_Init();; ?) d v- Y7 A& Z3 W- X+ S) [, c
- MX_UCPD1_Init();8 j3 q; ^/ O2 C; R" M
- MX_USB_PCD_Init();
) ?2 @0 T$ v8 l3 n, k) ?( c0 v& v2 U - MX_I2C1_Init();( [- d$ C7 \; T! ^) M& Z
- MX_UART5_Init();
, \7 r' i& S8 b. g# ~ - MX_USART2_UART_Init();
, |4 n! |7 I! V: g5 } - MX_SPI1_Init();: R6 n, N/ p) P Y" R6 k- L4 d
- MX_USART1_UART_Init();
5 H. }& `' q }5 O3 y% D - /* USER CODE BEGIN 2 */
) U" ?, e O) G' V& B7 c! U - LCD_init();
" L% } h3 D0 e - display_main();
7 O' u& M# _ P& e -
* l6 {- Y d1 S5 Z2 Y. x - DS1307_Init();
* Y* T% i; R' v - year = 2020;* N; x5 \" [' V1 a! m4 k
- month = 12;% m5 `8 Z6 N: p2 j0 p5 s
- day = 23;: V: \6 V A* Y4 W: i$ D0 G
- hour = 14;, e! Q3 l* C5 J7 V
- minute = 27;
; p: x+ W9 t" p1 G - // DS1307_write_date();
5 P8 t% W) H+ }3 v% _ -
0 w) t( S' A* e. {0 M' o v - DS1307_read_date();
0 ~# g5 H- c2 m: S# p: N) e - display_date(year,month,day);/ B& W6 V" h5 ]* R$ I4 |7 u! F* }& X
- display_time(hour,minute,second);3 u( G" c [2 y8 H/ x
- , F7 C5 B2 I+ R* a. J! U# [! h$ K0 M
- /* USER CODE END 2 */- n; Y* Z; O1 h% h3 W: c+ B4 G) K
/ h; B- K! t7 ^2 K$ Q- /* Infinite loop */2 p! {$ x/ T# V
- /* USER CODE BEGIN WHILE */0 _- j- t# j8 _: c
- while (1): ^" A) g7 N0 V- @- ^& Z# E- U4 Z
- {" |9 X( ?* w K u! y$ g
- /* USER CODE END WHILE */- W" z; k6 K% `% w5 }6 e/ E! J
2 w$ d) ]7 j4 o: B; w) _- /* USER CODE BEGIN 3 */# d2 ~+ _7 U5 F# b3 g
- if(ms>499){ //半秒处理开始
1 N; n" z8 o) M8 d& ~9 ?* @ - ms = 0;
+ E6 Q$ j& `' I: u, p5 s - ledn++;
& C" n8 X0 x* B! i' a - if(ledn>6){! z& V$ m1 w6 f5 F; [0 w) A
- ledn = 1;
) O+ n' v3 P+ R" z7 a- v5 i2 V8 S - ledm++;+ O* ^& v) ?$ e' x+ d% Q4 }7 _+ q
- if(ledm>2){
- Y3 K; k# L! t, q - ledm = 0;, f& {6 S! I+ N/ \; h5 u* U
- }: }* x% d. F: A9 o
- }# e. E# l9 g; N" M# d# R! e
- switch (ledm){ //花样点灯开始
& W; n: b& Y3 {% [ - case 0:
' f7 \& w3 g; z9 ~! K - if(ledn%2 == 0)- D' p( q4 h6 W7 S5 V
- LED_On(0);! t# N. I- @* p) S, x3 H" o' @
- else
6 T8 Z+ \+ a& @. q2 J! | - LED_Off(0); E: k1 g# ~$ M/ H
- break;2 a6 z A. t9 C. E" u. F3 c
- case 1:# {+ u. l' g5 @/ ^% @* @: J
- LED_Off(0);
1 I2 p) q' j) w* P - if(ledn > 0)
/ U: i8 ~* o K2 e7 R- { - LED_On(ledn);
9 h i+ u7 r, X- B/ } - break;
, x/ Q# V" ~/ |# I' V4 K - case 2:- s9 y3 R) x! V5 Z
- LED_On(0);, }0 q7 c- n3 |* i8 o& {# c5 F
- if(ledn > 0)1 l4 m! v6 }( Z, {% `0 R" u: p& ]4 F
- LED_Off(ledn);. t r, }% ?' h/ s) A$ u; S/ K* M
- break;
& V; \% H: W/ t/ m$ W2 J# w% ^ - case 3:) l- [. x9 X! g+ E
- break;, |- d% U& C D5 }
- ' b0 [% U/ e9 ^. }, {& m" U- k) c
- } //花样点灯结束1 N2 P7 e' {! Z X4 S, N( F
- half++;% ?, ? Z: d& R& \0 k
- if(half>1){ //秒处理开始7 Z3 c, r# u* O6 @0 M7 O: q
- half = 0;
1 Z" H! j6 D( W5 B2 { - second++;5 n2 O; \( d. w1 E. K w: ?' K
-
8 _+ l7 T$ y9 @4 l - if(second>59){ //分钟处理开始
A8 {2 Y, @' L8 {/ o% L+ n6 C - DS1307_read_date();
. V" z. R$ L/ x! M3 z - display_date(year,month,day);* P$ x2 H1 Y$ F) U6 h
-
6 ` ?( V+ x/ Y$ k) C2 P* X - } //分钟处理结束2 I9 |8 V- a+ r1 E# x9 T
- display_time(hour,minute,second);
2 y0 ]% S. [; `7 d( D - printf("当前时间秒:%d\r\n",second);' e& b3 Y, b3 j
- HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);
1 P0 m8 l' U: [ - LCD_clear_line(4);0 Q d2 Z9 ~( u2 S9 I6 I/ W
- LCD_clear_line(5);5 Z0 L p1 K# L: [, ^" ~7 O
- if(disp == 0)' p& z' {- f( Q
- LCD_write_BG(50,4,"我要ST年度盛典");
0 s8 B2 \' h8 r4 { - else2 T$ k6 _9 y) y
- LCD_write_BG(20,4,"ST社区 单片机开发者的家园");1 Y/ f) [# c8 V- i6 T8 X" r
- disp++;
% `8 d' w4 Q: i% w2 I9 k - if(disp>1)/ h p6 q' @7 d+ h4 h
- disp = 0;
( h* b5 T1 V6 R0 n! j: Y - } //秒处理结束8 {2 F) g1 q- P: u9 n2 K" } g; r
- } //半秒处理结束4 X) }3 F+ }" l% O3 U: M! @
- //处理串口中断接收的数据 U7 n3 D) k% d" m3 u7 l' a
- /* if(aRxID>1){
9 m, K7 S/ |8 R/ n" W9 N - LCD_write_value(0,2,3,0,0,aRxID);
% p% d7 X& i' S* O- H& ^ - aRxID = 0;2 E" G% \2 _& B$ J
- LCD_write_ASCII(0,3,1,aRxBuffer);
/ U2 R. k/ A5 L - }5 k& K& E; p+ |. f+ _- f
- */
: ^+ s# n) c5 O0 u8 ?% v - //轮询处理中断接收的数据
) h" k0 O' ~ Y' { - if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
" w0 ?' h+ m& c2 B( ~1 } - {
; }2 e W) [! w% z' S' J$ D' @$ p - HAL_UART_Receive(&huart2,aRxBuffer,16,100);+ f' k& z! O) z9 T% Y. G
- LCD_write_ASCII(0,4,1,aRxBuffer);9 S: ~3 T! b9 f$ x
- printf("\r\n");
* b" |! R- N( j3 e; O6 \' D4 ^ - HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
0 E; p( M5 N3 d* s- d$ M - }
3 T" Q7 C' H: R - } //主循环结束
0 K4 |# n# q% N - /* USER CODE END 3 */7 H: p4 A; g# O
- }3 i" h9 [% N* w T
复制代码 其中还包括了花样点亮三个LED灯和串口通讯测试的代码。
( h' [. S- m( I0 t- M 下面是LCD显示屏的特写("我要ST年度盛典"):' l( D) l) c3 s2 m( W3 }
6 O% B7 [8 ]6 q! k* K3 e! f) j: f* P+ L' E! {% D
这是显示"ST社区 单片机开发者的家园"的照片:6 t* ^9 C1 U0 o+ |0 V" w1 b
' Z1 |8 Z/ g/ i2 @) `7 r
* D$ a, n+ W% h. r* H3 ~. e- b
这是测试的动画:
; D% u0 ~ x# u! v, V
3 Y H V4 e8 h, `+ V1 [
$ v9 U3 p: l3 p
仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。: l* r& N2 A- Z) Y8 `9 V* a' X x
|
192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。