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

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

[复制链接]
老牛洋车 发布时间:2020-12-26 15:13
    为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:
6 g+ R) A: N8 s, h3 h9 Q9 r4 q1 b5 i ST_00.jpg % 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
  1. int main(void)
    + j8 p5 D  t9 T( Y- G* Y4 @
  2. {8 N8 |! b+ t# |! `# M9 A6 j
  3.   /* USER CODE BEGIN 1 */
    ) y$ c- T& ]1 W- S8 f7 q# C5 p$ o
  4.     uint8_t ledn,ledm,half,disp;9 ~! D$ o& K: ~1 E6 n
  5.   /* USER CODE END 1 */
    & f/ N5 w6 g/ l* a

  6. 6 @0 u0 _" }. f+ I/ a# t+ `' U
  7.   /* MCU Configuration--------------------------------------------------------*/
    6 i+ n1 V! Z- T& S4 g: D( f
  8. 0 `( _* D+ B# H8 C& p$ f7 n4 r+ Y3 w
  9.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */1 Q5 H  v: m8 p$ O7 \; N3 A1 V
  10.   HAL_Init();
    9 U7 S& d/ E3 R! l

  11. + \# M9 m1 j3 G: l' o0 q
  12.   /* USER CODE BEGIN Init */
    + P3 X  I5 X$ y; A" T( b* I
  13. 8 H# m% ]5 q5 E: u2 t
  14.   /* USER CODE END Init */
    , a+ Q% S. A% Q& |

  15. / b7 F6 }# ]5 K
  16.   /* Configure the system clock */
    9 }) W% y5 t+ O. g
  17.   SystemClock_Config();
    : G: T( \: Z+ ~/ {

  18. 6 H  g  T% k1 u) e& _* s) j+ @
  19.   /* USER CODE BEGIN SysInit */
    " e& S$ e, `" q! I
  20. $ L7 @( m. B1 o9 ~4 F1 Z' ^" W
  21.   /* USER CODE END SysInit */
    . T  W& E! \% n$ g- p, i" C
  22. 6 F" Y9 e+ N3 R0 v1 p# M( z# A; E
  23.   /* Initialize all configured peripherals */& @0 T- r; K0 j) `5 n, H+ [
  24.   MX_GPIO_Init();
    $ E% m2 ]& A, i1 n
  25.   MX_ADC1_Init();
    9 Y3 y( w: H3 ~
  26.   MX_LPUART1_UART_Init();
    , g! ~9 Q+ b- P: C6 Y, c
  27.   MX_RTC_Init();; ?) d  v- Y7 A& Z3 W- X+ S) [, c
  28.   MX_UCPD1_Init();8 j3 q; ^/ O2 C; R" M
  29.   MX_USB_PCD_Init();
    ) ?2 @0 T$ v8 l3 n, k) ?( c0 v& v2 U
  30.   MX_I2C1_Init();( [- d$ C7 \; T! ^) M& Z
  31.   MX_UART5_Init();
    , \7 r' i& S8 b. g# ~
  32.   MX_USART2_UART_Init();
    , |4 n! |7 I! V: g5 }
  33.   MX_SPI1_Init();: R6 n, N/ p) P  Y" R6 k- L4 d
  34.   MX_USART1_UART_Init();
    5 H. }& `' q  }5 O3 y% D
  35.   /* USER CODE BEGIN 2 */
    ) U" ?, e  O) G' V& B7 c! U
  36.     LCD_init();
    " L% }  h3 D0 e
  37.         display_main();
    7 O' u& M# _  P& e
  38.        
    * l6 {- Y  d1 S5 Z2 Y. x
  39.         DS1307_Init();
    * Y* T% i; R' v
  40.         year = 2020;* N; x5 \" [' V1 a! m4 k
  41.         month = 12;% m5 `8 Z6 N: p2 j0 p5 s
  42.         day = 23;: V: \6 V  A* Y4 W: i$ D0 G
  43.         hour = 14;, e! Q3 l* C5 J7 V
  44.         minute = 27;
    ; p: x+ W9 t" p1 G
  45. //        DS1307_write_date();
    5 P8 t% W) H+ }3 v% _
  46.        
    0 w) t( S' A* e. {0 M' o  v
  47.         DS1307_read_date();
    0 ~# g5 H- c2 m: S# p: N) e
  48.         display_date(year,month,day);/ B& W6 V" h5 ]* R$ I4 |7 u! F* }& X
  49.         display_time(hour,minute,second);3 u( G" c  [2 y8 H/ x
  50.         , F7 C5 B2 I+ R* a. J! U# [! h$ K0 M
  51.   /* USER CODE END 2 */- n; Y* Z; O1 h% h3 W: c+ B4 G) K

  52. / h; B- K! t7 ^2 K$ Q
  53.   /* Infinite loop */2 p! {$ x/ T# V
  54.   /* USER CODE BEGIN WHILE */0 _- j- t# j8 _: c
  55.   while (1): ^" A) g7 N0 V- @- ^& Z# E- U4 Z
  56.   {" |9 X( ?* w  K  u! y$ g
  57.     /* USER CODE END WHILE */- W" z; k6 K% `% w5 }6 e/ E! J

  58. 2 w$ d) ]7 j4 o: B; w) _
  59.     /* USER CODE BEGIN 3 */# d2 ~+ _7 U5 F# b3 g
  60.           if(ms>499){            //半秒处理开始
    1 N; n" z8 o) M8 d& ~9 ?* @
  61.               ms = 0;
    + E6 Q$ j& `' I: u, p5 s
  62.               ledn++;
    & C" n8 X0 x* B! i' a
  63.                   if(ledn>6){! z& V$ m1 w6 f5 F; [0 w) A
  64.                       ledn = 1;
    ) O+ n' v3 P+ R" z7 a- v5 i2 V8 S
  65.                           ledm++;+ O* ^& v) ?$ e' x+ d% Q4 }7 _+ q
  66.                           if(ledm>2){
    - Y3 K; k# L! t, q
  67.                               ledm = 0;, f& {6 S! I+ N/ \; h5 u* U
  68.                           }: }* x% d. F: A9 o
  69.                   }# e. E# l9 g; N" M# d# R! e
  70.                   switch (ledm){     //花样点灯开始
    & W; n: b& Y3 {% [
  71.                       case 0:
    ' f7 \& w3 g; z9 ~! K
  72.                                   if(ledn%2 == 0)- D' p( q4 h6 W7 S5 V
  73.                                       LED_On(0);! t# N. I- @* p) S, x3 H" o' @
  74.                                   else
    6 T8 Z+ \+ a& @. q2 J! |
  75.                                           LED_Off(0);  E: k1 g# ~$ M/ H
  76.                                   break;2 a6 z  A. t9 C. E" u. F3 c
  77.                           case 1:# {+ u. l' g5 @/ ^% @* @: J
  78.                                   LED_Off(0);
    1 I2 p) q' j) w* P
  79.                                   if(ledn > 0)
    / U: i8 ~* o  K2 e7 R- {
  80.                                           LED_On(ledn);
    9 h  i+ u7 r, X- B/ }
  81.                                   break;
    , x/ Q# V" ~/ |# I' V4 K
  82.                           case 2:- s9 y3 R) x! V5 Z
  83.                                   LED_On(0);, }0 q7 c- n3 |* i8 o& {# c5 F
  84.                                   if(ledn > 0)1 l4 m! v6 }( Z, {% `0 R" u: p& ]4 F
  85.                                           LED_Off(ledn);. t  r, }% ?' h/ s) A$ u; S/ K* M
  86.                                   break;
    & V; \% H: W/ t/ m$ W2 J# w% ^
  87.                           case 3:) l- [. x9 X! g+ E
  88.                                   break;, |- d% U& C  D5 }
  89.                           ' b0 [% U/ e9 ^. }, {& m" U- k) c
  90.                   }                  //花样点灯结束1 N2 P7 e' {! Z  X4 S, N( F
  91.                   half++;% ?, ?  Z: d& R& \0 k
  92.                   if(half>1){        //秒处理开始7 Z3 c, r# u* O6 @0 M7 O: q
  93.                           half = 0;
    1 Z" H! j6 D( W5 B2 {
  94.                       second++;5 n2 O; \( d. w1 E. K  w: ?' K
  95.                           
    8 _+ l7 T$ y9 @4 l
  96.                           if(second>59){ //分钟处理开始
      A8 {2 Y, @' L8 {/ o% L+ n6 C
  97.                               DS1307_read_date();
    . V" z. R$ L/ x! M3 z
  98.                                   display_date(year,month,day);* P$ x2 H1 Y$ F) U6 h
  99.                                   
    6 `  ?( V+ x/ Y$ k) C2 P* X
  100.                           }              //分钟处理结束2 I9 |8 V- a+ r1 E# x9 T
  101.                           display_time(hour,minute,second);
    2 y0 ]% S. [; `7 d( D
  102.                           printf("当前时间秒:%d\r\n",second);' e& b3 Y, b3 j
  103.                           HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);
    1 P0 m8 l' U: [
  104.                           LCD_clear_line(4);0 Q  d2 Z9 ~( u2 S9 I6 I/ W
  105.                           LCD_clear_line(5);5 Z0 L  p1 K# L: [, ^" ~7 O
  106.                           if(disp == 0)' p& z' {- f( Q
  107.                                   LCD_write_BG(50,4,"我要ST年度盛典");
    0 s8 B2 \' h8 r4 {
  108.                           else2 T$ k6 _9 y) y
  109.                                   LCD_write_BG(20,4,"ST社区 单片机开发者的家园");1 Y/ f) [# c8 V- i6 T8 X" r
  110.                           disp++;
    % `8 d' w4 Q: i% w2 I9 k
  111.                           if(disp>1)/ h  p6 q' @7 d+ h4 h
  112.                                   disp = 0;
    ( h* b5 T1 V6 R0 n! j: Y
  113.                   }                  //秒处理结束8 {2 F) g1 q- P: u9 n2 K" }  g; r
  114.           }                      //半秒处理结束4 X) }3 F+ }" l% O3 U: M! @
  115. //处理串口中断接收的数据  U7 n3 D) k% d" m3 u7 l' a
  116. /*          if(aRxID>1){
    9 m, K7 S/ |8 R/ n" W9 N
  117.                   LCD_write_value(0,2,3,0,0,aRxID);
    % p% d7 X& i' S* O- H& ^
  118.               aRxID = 0;2 E" G% \2 _& B$ J
  119.                   LCD_write_ASCII(0,3,1,aRxBuffer);
    / U2 R. k/ A5 L
  120.           }5 k& K& E; p+ |. f+ _- f
  121. */
    : ^+ s# n) c5 O0 u8 ?% v
  122. //轮询处理中断接收的数据
    ) h" k0 O' ~  Y' {
  123.       if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
    " w0 ?' h+ m& c2 B( ~1 }
  124.       {
    ; }2 e  W) [! w% z' S' J$ D' @$ p
  125.           HAL_UART_Receive(&huart2,aRxBuffer,16,100);+ f' k& z! O) z9 T% Y. G
  126.           LCD_write_ASCII(0,4,1,aRxBuffer);9 S: ~3 T! b9 f$ x
  127.                   printf("\r\n");
    * b" |! R- N( j3 e; O6 \' D4 ^
  128.                   HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
    0 E; p( M5 N3 d* s- d$ M
  129.       }
    3 T" Q7 C' H: R
  130.   }                          //主循环结束
    0 K4 |# n# q% N
  131.   /* USER CODE END 3 */7 H: p4 A; g# O
  132. }3 i" h9 [% N* w  T
复制代码
   其中还包括了花样点亮三个LED灯和串口通讯测试的代码。
( h' [. S- m( I0 t- M    下面是LCD显示屏的特写("我要ST年度盛典")' l( D) l) c3 s2 m( W3 }
ST_02.jpg
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
ST_01.jpg ' Z1 |8 Z/ g/ i2 @) `7 r
* D$ a, n+ W% h. r* H3 ~. e- b
    这是测试的动画:
; D% u0 ~  x# u! v, V ST01.gif 3 Y  H  V4 e8 h, `+ V1 [
$ v9 U3 p: l3 p
    仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。: l* r& N2 A- Z) Y8 `9 V* a' X  x
收藏 评论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:424 p, F% Q! t0 @4 O, n
这屏一看就很有历史了

5 B' @! d+ C& h! S! T0 ]192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。
zsdonline 回答时间:2020-12-29 17:55:51
嘿嘿嘿

所属标签

相似分享

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