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

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

[复制链接]
老牛洋车 发布时间:2020-12-26 15:13
    为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:
ST_00.jpg

    实验非常简单,就是每隔1秒循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"两句文字。屏幕上的日期时间是由一块DS1307日历模块提供的,单片机通过systick中断进行毫秒计数,在主循环中每秒更新一次显示并进行计秒,然后每分钟读取一次DS1307日历模块的数据并更新日期和时间。代码非常简单,下面是主函数的代码:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.     uint8_t ledn,ledm,half,disp;
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration--------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();

  9.   /* USER CODE BEGIN Init */

  10.   /* USER CODE END Init */

  11.   /* Configure the system clock */
  12.   SystemClock_Config();

  13.   /* USER CODE BEGIN SysInit */

  14.   /* USER CODE END SysInit */

  15.   /* Initialize all configured peripherals */
  16.   MX_GPIO_Init();
  17.   MX_ADC1_Init();
  18.   MX_LPUART1_UART_Init();
  19.   MX_RTC_Init();
  20.   MX_UCPD1_Init();
  21.   MX_USB_PCD_Init();
  22.   MX_I2C1_Init();
  23.   MX_UART5_Init();
  24.   MX_USART2_UART_Init();
  25.   MX_SPI1_Init();
  26.   MX_USART1_UART_Init();
  27.   /* USER CODE BEGIN 2 */
  28.     LCD_init();
  29.         display_main();
  30.        
  31.         DS1307_Init();
  32.         year = 2020;
  33.         month = 12;
  34.         day = 23;
  35.         hour = 14;
  36.         minute = 27;
  37. //        DS1307_write_date();
  38.        
  39.         DS1307_read_date();
  40.         display_date(year,month,day);
  41.         display_time(hour,minute,second);
  42.        
  43.   /* USER CODE END 2 */

  44.   /* Infinite loop */
  45.   /* USER CODE BEGIN WHILE */
  46.   while (1)
  47.   {
  48.     /* USER CODE END WHILE */

  49.     /* USER CODE BEGIN 3 */
  50.           if(ms>499){            //半秒处理开始
  51.               ms = 0;
  52.               ledn++;
  53.                   if(ledn>6){
  54.                       ledn = 1;
  55.                           ledm++;
  56.                           if(ledm>2){
  57.                               ledm = 0;
  58.                           }
  59.                   }
  60.                   switch (ledm){     //花样点灯开始
  61.                       case 0:
  62.                                   if(ledn%2 == 0)
  63.                                       LED_On(0);
  64.                                   else
  65.                                           LED_Off(0);
  66.                                   break;
  67.                           case 1:
  68.                                   LED_Off(0);
  69.                                   if(ledn > 0)
  70.                                           LED_On(ledn);
  71.                                   break;
  72.                           case 2:
  73.                                   LED_On(0);
  74.                                   if(ledn > 0)
  75.                                           LED_Off(ledn);
  76.                                   break;
  77.                           case 3:
  78.                                   break;
  79.                           
  80.                   }                  //花样点灯结束
  81.                   half++;
  82.                   if(half>1){        //秒处理开始
  83.                           half = 0;
  84.                       second++;
  85.                           
  86.                           if(second>59){ //分钟处理开始
  87.                               DS1307_read_date();
  88.                                   display_date(year,month,day);
  89.                                   
  90.                           }              //分钟处理结束
  91.                           display_time(hour,minute,second);
  92.                           printf("当前时间秒:%d\r\n",second);
  93.                           HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);
  94.                           LCD_clear_line(4);
  95.                           LCD_clear_line(5);
  96.                           if(disp == 0)
  97.                                   LCD_write_BG(50,4,"我要ST年度盛典");
  98.                           else
  99.                                   LCD_write_BG(20,4,"ST社区 单片机开发者的家园");
  100.                           disp++;
  101.                           if(disp>1)
  102.                                   disp = 0;
  103.                   }                  //秒处理结束
  104.           }                      //半秒处理结束
  105. //处理串口中断接收的数据
  106. /*          if(aRxID>1){
  107.                   LCD_write_value(0,2,3,0,0,aRxID);
  108.               aRxID = 0;
  109.                   LCD_write_ASCII(0,3,1,aRxBuffer);
  110.           }
  111. */
  112. //轮询处理中断接收的数据
  113.       if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
  114.       {
  115.           HAL_UART_Receive(&huart2,aRxBuffer,16,100);
  116.           LCD_write_ASCII(0,4,1,aRxBuffer);
  117.                   printf("\r\n");
  118.                   HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
  119.       }
  120.   }                          //主循环结束
  121.   /* USER CODE END 3 */
  122. }
复制代码
   其中还包括了花样点亮三个LED灯和串口通讯测试的代码。
    下面是LCD显示屏的特写("我要ST年度盛典")
ST_02.jpg

    这是显示"ST社区 单片机开发者的家园"的照片:
ST_01.jpg

    这是测试的动画:
ST01.gif

    仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。
收藏 评论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
这屏一看就很有历史了

192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。
zsdonline 回答时间:2020-12-29 17:55:51
嘿嘿嘿

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版