你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【年度庆典二】循环显示我要ST年度盛典

[复制链接]
老牛洋车 发布时间:2020-12-26 15:13
    为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:  C! B4 g) l1 v* b6 s% J/ g* u1 X
ST_00.jpg $ z0 ]! {& L7 Z# q3 G" ?
9 {8 [' \! t  U8 B' ^
    实验非常简单,就是每隔1秒循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"两句文字。屏幕上的日期时间是由一块DS1307日历模块提供的,单片机通过systick中断进行毫秒计数,在主循环中每秒更新一次显示并进行计秒,然后每分钟读取一次DS1307日历模块的数据并更新日期和时间。代码非常简单,下面是主函数的代码:* c$ {0 ^8 g: d1 J: s8 a
  1. int main(void)
    % W  X1 ~  y0 I
  2. {( K) U. V5 d5 R& K' {
  3.   /* USER CODE BEGIN 1 */
    ; ^. e0 A4 |. w2 n9 |* b
  4.     uint8_t ledn,ledm,half,disp;2 H: \1 A* c4 n" K# E6 c9 c
  5.   /* USER CODE END 1 */
    % H1 Q1 o$ o7 V$ U. w9 b8 n) e- R
  6. ! N; q- `' l3 ?- w
  7.   /* MCU Configuration--------------------------------------------------------*/
    % S3 o# A: V2 \. s- G$ Z! G
  8. 6 u  V" G4 o" Y! e% m  R
  9.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */4 c: {4 v$ D5 @2 |5 p: L
  10.   HAL_Init();
    # B  j# t3 _* Z1 a: R

  11. ( I% l1 J- q. m/ z
  12.   /* USER CODE BEGIN Init */" b8 p  r" F' ?0 |% `/ I$ L& C

  13. , b: f+ J# q, X8 d4 e, j% _8 i
  14.   /* USER CODE END Init */& y. r' N7 |" T# e# `  Z

  15. : q0 p0 P+ G* I7 G
  16.   /* Configure the system clock */
    # j$ k2 f: o0 g% l, Z5 y/ ^5 ^: E
  17.   SystemClock_Config();
    & C' H% U% b. z4 T6 j
  18. 2 R/ O# D. T- P/ a1 q
  19.   /* USER CODE BEGIN SysInit */3 {+ F6 W% W1 o$ _( U9 w6 W
  20. " l1 V* Y5 q5 c/ E" E; i
  21.   /* USER CODE END SysInit */6 l! \# a7 z* F$ K* B7 P8 v( v. ~

  22. % C' L3 M- ^; c
  23.   /* Initialize all configured peripherals */& m! W  _/ j6 K9 g  H% n: c
  24.   MX_GPIO_Init();
    ) _4 X4 K. S- b& K& d. m- f  m
  25.   MX_ADC1_Init();
    / `9 x8 B  @: P1 B7 N& @1 E1 V6 _( ^
  26.   MX_LPUART1_UART_Init();
    4 `. w! y3 ]' c
  27.   MX_RTC_Init();
    # E: g4 t" Y$ l( v; Y) z4 l
  28.   MX_UCPD1_Init();
    ) t9 Y; R8 Q7 F" p$ [6 P
  29.   MX_USB_PCD_Init();
    , c% y- n$ t; W6 M/ M$ Z( i1 @
  30.   MX_I2C1_Init();
    ! k! I  n; j# N+ e2 x+ D1 w; T' [
  31.   MX_UART5_Init();
    - Y7 s, Y6 p( ]7 ]; u/ l9 d
  32.   MX_USART2_UART_Init();
    ' d6 Q) k9 a: M
  33.   MX_SPI1_Init();7 f3 E7 L0 X1 A9 x; J) f0 ]: ?; v
  34.   MX_USART1_UART_Init();! d: m8 t: p! ~  \' `% ?; m
  35.   /* USER CODE BEGIN 2 */# R, ?+ N5 u0 Y# j' _# C: l3 J
  36.     LCD_init();
    . s9 h7 ]* t7 w7 }- x4 l. e
  37.         display_main();
    ; L: {% s& }% p1 {  g$ Y: E
  38.         : f. f/ Q- M5 p4 @! ?* }9 T
  39.         DS1307_Init();! D8 }1 t, A; d4 N
  40.         year = 2020;& e% [. O5 Y! v
  41.         month = 12;
    " g6 I: h+ t5 h; R+ Z0 e
  42.         day = 23;
    ( o/ T4 `* ^: U
  43.         hour = 14;
    4 E: z$ _. Z; r2 |! b" q
  44.         minute = 27;
    ) F6 {- u( H+ A1 Q8 ~$ [
  45. //        DS1307_write_date();6 Q3 ]# @0 ]' R* ^; ]1 f" O2 |% g; z
  46.         ' }$ J, o2 h. b6 V
  47.         DS1307_read_date();# }6 Y/ T4 ], y+ V8 h% [
  48.         display_date(year,month,day);
    & B' ?4 Y5 v- m& w: f
  49.         display_time(hour,minute,second);
    * S2 C( d# w( W6 Z: t. I
  50.         7 X$ u" L. i8 w( n
  51.   /* USER CODE END 2 */
    - Q+ ~: x7 x' |8 e

  52. ! U% C) b3 Q9 }* f8 `1 g% i
  53.   /* Infinite loop */" ]3 d3 ~, s/ X. h) C
  54.   /* USER CODE BEGIN WHILE */
    3 W4 F. g) |- ^% J  q5 o
  55.   while (1)7 r9 t( S- X3 }5 _' _  K1 @5 t
  56.   {8 @. M, v# M0 x7 E$ O9 Q7 ^
  57.     /* USER CODE END WHILE */( Z+ ]# u/ a7 ?$ I

  58. ) Y4 _1 d6 n# ?6 x
  59.     /* USER CODE BEGIN 3 */1 |; L3 k* {, ~6 h! r1 u+ O
  60.           if(ms>499){            //半秒处理开始4 n" G, G! Q. _: F( ]
  61.               ms = 0;
    2 [/ ]( ]; l) [! ~+ X* Y/ |
  62.               ledn++;
    " t  w2 Y# I' ~. C, K
  63.                   if(ledn>6){
    * R1 \$ B; S9 z& H2 B
  64.                       ledn = 1;9 F5 M7 z! ^: Q* ]( R
  65.                           ledm++;" ~4 ]% a- R8 v+ @; ~% }
  66.                           if(ledm>2){
    7 M0 I% X1 @( V/ n% N; G
  67.                               ledm = 0;& {2 }  {0 c+ b; W8 B+ w- H
  68.                           }
    8 J5 s* q* V6 Y$ e# c. [, @
  69.                   }# d/ B, d& m: s& G  k
  70.                   switch (ledm){     //花样点灯开始: f6 Y6 e) u, i9 J7 u! P+ i% M
  71.                       case 0:
    7 ^" [  Y0 U' j5 G+ C# c+ E
  72.                                   if(ledn%2 == 0)' K. \+ _! E8 e& S+ b
  73.                                       LED_On(0);
    4 V' u( P1 T% H2 w
  74.                                   else
    0 y) M# ~* U) C. Y) r2 W
  75.                                           LED_Off(0);$ }& `: U4 h4 {% X: J% K* y
  76.                                   break;
    8 L+ T& v3 B6 w# p% w( k+ Y
  77.                           case 1:: E" F8 z) ?) ?7 u
  78.                                   LED_Off(0);( F( W. E! h0 R) y% V
  79.                                   if(ledn > 0)& r! P; s" g1 s
  80.                                           LED_On(ledn);9 [- p9 ^) w' P+ C- z- {7 |- e7 r# p
  81.                                   break;
    7 o3 {9 t3 j# H6 j. @; g
  82.                           case 2:3 T3 o- a4 |' V% x0 C; I
  83.                                   LED_On(0);4 P) _" ~+ _# Q# Q- p/ K& g
  84.                                   if(ledn > 0)
    2 s3 [% d6 r. ]7 ]: g* q1 J
  85.                                           LED_Off(ledn);
      M& Y* L+ x3 i$ b# ^' K4 k5 ]
  86.                                   break;
    & o) q. g2 ]. z$ ^# X3 ^+ Z5 O
  87.                           case 3:- s1 y6 j1 T  t  M! Q
  88.                                   break;8 J# {" N& s) E/ y% I6 @" t: a2 p
  89.                           ( K7 x4 i, J9 K
  90.                   }                  //花样点灯结束! m. ]+ f: I- @/ t, n9 O4 r2 r& v
  91.                   half++;0 n8 _- U, @8 [
  92.                   if(half>1){        //秒处理开始
    4 M& y2 a% M7 j+ x8 e  D( N- O
  93.                           half = 0;( }6 J9 E; ^  z# t, ?
  94.                       second++;1 r; f% [3 ^/ P3 l! `0 h; f
  95.                           
    4 X7 y$ e* K4 I# u! X
  96.                           if(second>59){ //分钟处理开始. N8 A! }# u' I) @/ b9 v
  97.                               DS1307_read_date();
    3 |: f, L. [4 k" h8 N& U4 A  d
  98.                                   display_date(year,month,day);
    : q: Z: ]3 H5 V; C
  99.                                   . n- u! F, V' P& m* U4 n& P
  100.                           }              //分钟处理结束7 [2 Q2 s: p2 y: P& t
  101.                           display_time(hour,minute,second);0 B  d6 C/ \0 D4 _9 e
  102.                           printf("当前时间秒:%d\r\n",second);( v4 {3 y' L( Q- T6 L" ]8 Z! B
  103.                           HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);' T1 O+ ?' L, s9 {" f
  104.                           LCD_clear_line(4);
    / N4 v2 K# Q. Y! }9 u: e
  105.                           LCD_clear_line(5);0 x- k" @1 i& e$ ^( a
  106.                           if(disp == 0)
    7 k3 G5 M' Q# e9 H, e" ?2 b
  107.                                   LCD_write_BG(50,4,"我要ST年度盛典");
    4 A6 x  f3 F; p
  108.                           else; i) r/ B3 p% u5 R9 Y
  109.                                   LCD_write_BG(20,4,"ST社区 单片机开发者的家园");4 z+ S0 z9 W6 u) v: c2 K
  110.                           disp++;5 Y& B* E" f; Z
  111.                           if(disp>1)
    2 Q2 Y' {0 `2 G$ B, V3 s9 ]# [( _
  112.                                   disp = 0;
    5 h* A5 |; q" N9 q
  113.                   }                  //秒处理结束
    % V6 a  {7 F2 \6 C2 }+ B% |9 X
  114.           }                      //半秒处理结束
    5 v/ o% Q; w! i, ^: Q. h) ~7 Z
  115. //处理串口中断接收的数据
    * W  H/ }" J: a+ b# H7 d
  116. /*          if(aRxID>1){% p% e. R( \% |+ G) L5 J: b
  117.                   LCD_write_value(0,2,3,0,0,aRxID);! |4 j$ L/ K# R! j6 h- ~0 a2 @
  118.               aRxID = 0;$ I: L, @/ \2 h4 q& I
  119.                   LCD_write_ASCII(0,3,1,aRxBuffer);3 C: d9 j; ^6 i3 I4 T
  120.           }1 f8 C8 f1 y0 W$ W! u
  121. */
    $ k3 B( j/ V/ M. C3 u
  122. //轮询处理中断接收的数据) b" S) _) M, o1 p/ v( S
  123.       if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))( @: g9 n- \6 @% r) W& c3 S
  124.       {
    ! x; t9 m6 o  F( Q- W" B/ M! k
  125.           HAL_UART_Receive(&huart2,aRxBuffer,16,100);; w* o( q" n) G2 R
  126.           LCD_write_ASCII(0,4,1,aRxBuffer);5 I, S1 R, W" P5 e0 |) d
  127.                   printf("\r\n");# u/ p/ j3 q. Z6 E9 K  h  R, |; j
  128.                   HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
    1 N+ v9 F, L7 i
  129.       }
    " v' s# Q* ~' c) _
  130.   }                          //主循环结束
    ' H  q" C3 S* V* [
  131.   /* USER CODE END 3 */
    ) m6 H1 S: z+ E
  132. }/ S: S, d; p9 O, V
复制代码
   其中还包括了花样点亮三个LED灯和串口通讯测试的代码。. R; c! n/ P, W/ Q* P
    下面是LCD显示屏的特写("我要ST年度盛典")% d4 D2 `" Y: M. a
ST_02.jpg
2 s- ]. Y% t) n. R# s* Q8 ]% i# T0 s% T$ p% v0 Y- y: F$ ~
    这是显示"ST社区 单片机开发者的家园"的照片:2 F. x1 t  i$ X2 M1 B3 h
ST_01.jpg
/ x) y- t8 U8 c" L! _
( B) D4 G" q+ W( E    这是测试的动画:
' q1 N* V5 y0 J7 R ST01.gif + u; z4 q, {6 o% _# S: h
( k. e8 b  Q/ V6 Q
    仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。. D7 a( Z7 g: {+ c8 ]
收藏 评论4 发布时间:2020-12-26 15:13

举报

4个回答
aaronhu-172089 回答时间:2020-12-28 09:36:00
好久沒玩這種應用了!!
yklstudent 回答时间:2020-12-29 13:42:29
这屏一看就很有历史了
老牛洋车 回答时间:2020-12-29 13:56:53
yklstudent-1794 发表于 2020-12-29 13:42
) g5 \3 w6 T/ m, E" I这屏一看就很有历史了

3 m" u" N& \- c  V# i7 C3 s! n& w192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。
zsdonline 回答时间:2020-12-29 17:55:51
嘿嘿嘿

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版