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

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

[复制链接]
老牛洋车 发布时间:2020-12-26 15:13
    为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:2 O3 O: K# P2 X: ?
ST_00.jpg
( W8 K) @; ?4 V- i( \" l* ~: C3 X, Y: a* y. x/ u
    实验非常简单,就是每隔1秒循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"两句文字。屏幕上的日期时间是由一块DS1307日历模块提供的,单片机通过systick中断进行毫秒计数,在主循环中每秒更新一次显示并进行计秒,然后每分钟读取一次DS1307日历模块的数据并更新日期和时间。代码非常简单,下面是主函数的代码:
, k% N: U  R- H7 i$ c1 B
  1. int main(void)
    4 c' }  a5 B0 r3 F( M2 ^& v; d/ _
  2. {9 R* k2 L/ I3 i2 r
  3.   /* USER CODE BEGIN 1 */
    : y3 y; H' o5 N8 v. o5 h+ w# i* s
  4.     uint8_t ledn,ledm,half,disp;
    8 y8 G8 p" b5 {* b, L
  5.   /* USER CODE END 1 */9 N5 ^3 q2 D0 d" C+ P5 F9 r8 r
  6. 1 f# m, T' h( X8 H7 }
  7.   /* MCU Configuration--------------------------------------------------------*/. `- r) c# [9 f8 r" C5 Z5 }

  8. ' B& L% Q& C' h8 V! q5 d
  9.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */, d4 Q4 @: Q& y) B+ N4 B; s3 S: Q/ x
  10.   HAL_Init();
    5 }3 R( `* S2 w0 ]: `
  11. " z5 x# J8 ]; d# |9 L, q
  12.   /* USER CODE BEGIN Init */
    9 V4 R0 d# J/ J2 h( d0 z2 d
  13. % X7 A$ B7 E  m6 G- ]
  14.   /* USER CODE END Init */
    % L8 g1 i2 |# t: T! i$ w$ T& z! {: y
  15. ' N! H. }. r, ?/ C; H, W$ u+ F
  16.   /* Configure the system clock */
    2 |( O, V& @7 t% B
  17.   SystemClock_Config();
    / a1 z3 j8 D! |

  18. ) A" n! E, Z( J9 G. M
  19.   /* USER CODE BEGIN SysInit */
      z% n. r* X0 s9 O( a* v

  20. 0 k% u8 N$ N( b& G8 O
  21.   /* USER CODE END SysInit */
    ; J$ S% w( _' M5 i8 S2 m9 s+ y

  22. 9 M+ P+ C& L# X+ a. _5 C" X9 L, C
  23.   /* Initialize all configured peripherals */4 ^& V3 [  m# {' W8 j0 A
  24.   MX_GPIO_Init();
    3 ?/ z- K$ L/ F& ~9 w
  25.   MX_ADC1_Init();
    4 \9 o1 V6 P1 b  ?
  26.   MX_LPUART1_UART_Init();" A$ K. N; d# ~& E
  27.   MX_RTC_Init();% Q8 z' Z0 i, [" }
  28.   MX_UCPD1_Init();
    1 E7 [6 A$ w5 F5 x2 q* ]( _
  29.   MX_USB_PCD_Init();
    - B  _: U- K6 h3 v
  30.   MX_I2C1_Init();
    9 l8 Y, ^: c/ p3 H# c. g  d1 o
  31.   MX_UART5_Init();$ A& i/ u& X9 {# r+ ]
  32.   MX_USART2_UART_Init();. {- Y  @, a- T; M
  33.   MX_SPI1_Init();, Y; g! Y2 ]" @1 q; _2 ]! F
  34.   MX_USART1_UART_Init();) r* @9 X3 A# y1 c. U% ?6 K' m- v
  35.   /* USER CODE BEGIN 2 */' l3 S2 ^" t4 {3 f
  36.     LCD_init();
    ; y9 Q6 t- \3 K3 h
  37.         display_main();9 R7 o! j& M  M# j
  38.        
    7 P& y6 |$ z$ C: B# f; U0 F
  39.         DS1307_Init();1 E% d2 |' C6 B* g# o" p+ D/ u2 \6 E
  40.         year = 2020;$ L3 g  ^- m% U8 C( j
  41.         month = 12;& X; T/ Z8 f5 K4 V9 m  L
  42.         day = 23;
    : U' R0 K1 _3 k
  43.         hour = 14;
    7 C9 ?8 z8 H! E' ^" D" q& Z- e
  44.         minute = 27;# U8 Z6 Q, }. P/ Q1 C
  45. //        DS1307_write_date();2 G& J* J; p" k' N* i6 I
  46.        
    ) j7 N' |( M  `8 r! t' v; c' f
  47.         DS1307_read_date();
    1 |1 \3 i& U% R; W" G% R$ n
  48.         display_date(year,month,day);
    * J" O# \' q1 ^* V- P, {
  49.         display_time(hour,minute,second);
      k6 C# T5 U/ s: I2 }
  50.        
    2 \5 g! m: t3 w& H4 V( @" W, F& t
  51.   /* USER CODE END 2 */) v: ~: _" A6 M! Y6 b. K& b

  52. 9 y' z5 N  K. x" X
  53.   /* Infinite loop */
    + ]- [8 o5 H8 D3 {! F4 H; ?7 e
  54.   /* USER CODE BEGIN WHILE */* E* ?0 U$ y% v4 r, U) v2 Q
  55.   while (1)
    2 X+ R2 n3 g, V6 G, K: o
  56.   {" y. a+ d8 W8 a' `6 E, w
  57.     /* USER CODE END WHILE */
    ; u/ Q+ E+ R3 c) z7 K

  58. % c1 l. e% W, S/ d
  59.     /* USER CODE BEGIN 3 */0 y) N4 q+ V. R
  60.           if(ms>499){            //半秒处理开始/ y* Y, x2 \& O* j1 b) x
  61.               ms = 0;
    6 H6 v" y8 ~. D1 p7 E% f* h* O
  62.               ledn++;% E# v; \: k( V% k
  63.                   if(ledn>6){" R( P& m$ f, Y" [" u/ G
  64.                       ledn = 1;: C" \3 G( n; \0 v3 g4 S/ c9 C& S
  65.                           ledm++;$ g9 P* r# D1 Z# S6 \3 D
  66.                           if(ledm>2){7 K* d  ?* [- P" d; ~
  67.                               ledm = 0;
    9 B# O  J$ _3 q# A" K+ n$ m
  68.                           }
    ; S; S9 _! j  N) s1 F
  69.                   }5 }! S& i) h, _8 T/ S5 H
  70.                   switch (ledm){     //花样点灯开始
    + e+ d% M9 u* j! k; \
  71.                       case 0:( ~" @) N* p+ M: I; ^
  72.                                   if(ledn%2 == 0). u* y5 ]& @+ X- M# J; X1 r
  73.                                       LED_On(0);8 i5 a( x& B( V
  74.                                   else
    0 \' W3 N- t6 X6 {, K0 M- ~4 J  q
  75.                                           LED_Off(0);: Q2 z. v8 [! S2 c, \
  76.                                   break;
    & e' F8 B/ z1 @' e! R, j
  77.                           case 1:# K9 n9 K) J8 k# o  d! S' k
  78.                                   LED_Off(0);4 l8 [6 m1 p/ @; K* M
  79.                                   if(ledn > 0)
    3 m$ q* K; V* n/ Q
  80.                                           LED_On(ledn);
    . h/ X: Q9 d! q% v2 I# \4 g5 ?1 {0 ^" O' e
  81.                                   break;
    ( f0 J& p- ], l; p
  82.                           case 2:
    $ G% d( r3 C/ g  S, @+ Z* `
  83.                                   LED_On(0);+ ^( G* o* n2 a9 F. k/ b# Z
  84.                                   if(ledn > 0)" r3 c8 t- \, h0 C4 ?4 V
  85.                                           LED_Off(ledn);
    0 m( z8 Q- ^; W% K4 z4 C7 K& R) G6 a
  86.                                   break;' z# j6 L9 i4 Q$ y! {
  87.                           case 3:
    ! ], ?+ q3 w$ D) Q% D, {
  88.                                   break;
    8 d* r$ u$ U$ \0 y) A; I6 g  ~" r& l
  89.                           6 ^$ C2 S  J! B; b$ A
  90.                   }                  //花样点灯结束
    " R1 E! n1 u* N' w6 Y5 M! l
  91.                   half++;
    / D8 O1 S- n0 I  t& p) J
  92.                   if(half>1){        //秒处理开始& p3 [, m' h( g  p3 |9 I
  93.                           half = 0;  I6 z: R. U' N+ `$ S9 f, N
  94.                       second++;0 G* U* Y0 A3 H' ?# r1 a: Z* C6 B
  95.                           
    / ]3 i' e0 N$ y  r5 \, @
  96.                           if(second>59){ //分钟处理开始8 ^% N! v' h! q& X
  97.                               DS1307_read_date();
    ! F$ @3 R$ q2 y$ k
  98.                                   display_date(year,month,day);
    * G* v- y4 Q% }& G
  99.                                   
    ; B7 o+ A4 @1 [# Y
  100.                           }              //分钟处理结束
    8 J% D2 F9 Y1 T0 F  Q$ G' T7 V
  101.                           display_time(hour,minute,second);( S: F: M; V, t* G
  102.                           printf("当前时间秒:%d\r\n",second);
    / g# H" H' t. ?" C/ k- Q1 s
  103.                           HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);4 O" w5 w. d# {
  104.                           LCD_clear_line(4);
      q( G' n- p6 p" v" Z7 v6 D
  105.                           LCD_clear_line(5);1 U4 }) R( ^/ i2 \- `* Z. j4 n4 O
  106.                           if(disp == 0)( A2 l8 s9 @" D- t. p
  107.                                   LCD_write_BG(50,4,"我要ST年度盛典");
    3 h" f3 S' {8 P: p& ~1 Q6 w; ?
  108.                           else
    . p1 v3 ?: n+ n9 s. }! b
  109.                                   LCD_write_BG(20,4,"ST社区 单片机开发者的家园");
    2 l* Z9 I5 @% y+ U3 {( V! o
  110.                           disp++;" A- c0 O- O1 Z( y
  111.                           if(disp>1)* H  N: d( w& Y
  112.                                   disp = 0;
    7 `) m; S, u. R$ R( I! z
  113.                   }                  //秒处理结束! r8 @, G/ h6 ]" z, U
  114.           }                      //半秒处理结束- N& _" W: E/ c1 c$ U0 r: P
  115. //处理串口中断接收的数据
    $ h9 B6 D& E8 S, r, @: p% O9 ~- t/ F. I
  116. /*          if(aRxID>1){
    * {* |  H! U2 t5 ^9 @
  117.                   LCD_write_value(0,2,3,0,0,aRxID);
    & R4 H0 a' @: J1 G" ?9 r/ U
  118.               aRxID = 0;
    : D9 ?& ^2 N1 e
  119.                   LCD_write_ASCII(0,3,1,aRxBuffer);' r/ X+ X8 f# U6 P: n9 K6 s. ]
  120.           }" Q# d# [, F' b; _2 {
  121. */2 C: `2 m( d( P; |
  122. //轮询处理中断接收的数据
    & n! l8 A! H) F9 n$ R
  123.       if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
    ! L. y+ _! b* c. [
  124.       {
    ( H6 Z  U0 w2 F. `  ?) D
  125.           HAL_UART_Receive(&huart2,aRxBuffer,16,100);
    # s  Y8 _. `; Y/ Y4 q
  126.           LCD_write_ASCII(0,4,1,aRxBuffer);
    % O3 O) I8 Q: N3 C( P3 P4 p# G
  127.                   printf("\r\n");
    ' Q) Y. P  x. ?; o, A4 e3 a( `
  128.                   HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
    # L5 U) |; M8 \  c
  129.       }
    / ?/ n* z/ o/ Q7 X2 [
  130.   }                          //主循环结束
    2 S5 _" \. t& E. J+ I2 m9 C1 ~
  131.   /* USER CODE END 3 */  Z! n9 @/ F# |( O
  132. }; R4 ?/ N; }: c# T; M) R
复制代码
   其中还包括了花样点亮三个LED灯和串口通讯测试的代码。
7 e7 ]  H! ^1 `5 a0 r; q4 N3 O    下面是LCD显示屏的特写("我要ST年度盛典"):
' h3 l. i# {( X3 x# n: S$ E ST_02.jpg 2 Y' b$ O8 E  T5 c

- [  _, |+ p/ w4 v    这是显示"ST社区 单片机开发者的家园"的照片:
& r% @  W2 Y8 V7 g ST_01.jpg ! U+ @' F: W1 y* i) ?' ~

8 y% ?6 d7 T3 @4 a* x( F    这是测试的动画:- c3 |, ^2 @% e) P3 G
ST01.gif 3 @- b( v+ W: x+ c/ u# ^& s! U" d
: L+ d! [) F5 _
    仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。
; V2 n+ @- W  p  ?, [0 p/ R9 R
赞 收藏 评论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( b- ~- \7 A; a( ^( D
这屏一看就很有历史了
( h: H( m+ C, f0 |% p& P* ~$ b
192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。
zsdonline 回答时间:2020-12-29 17:55:51
嘿嘿嘿
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版