为了参与2020年ST年度盛典活动,特地用最近获得的STM32L552ZE-Q开发板制作了循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"的小实验,下面是实验过程的照片,用于显示的是LCD19264显示屏:
实验非常简单,就是每隔1秒循环显示"我要ST年度盛典"和"ST社区 单片机开发者的家园"两句文字。屏幕上的日期时间是由一块DS1307日历模块提供的,单片机通过systick中断进行毫秒计数,在主循环中每秒更新一次显示并进行计秒,然后每分钟读取一次DS1307日历模块的数据并更新日期和时间。代码非常简单,下面是主函数的代码:
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- uint8_t ledn,ledm,half,disp;
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_ADC1_Init();
- MX_LPUART1_UART_Init();
- MX_RTC_Init();
- MX_UCPD1_Init();
- MX_USB_PCD_Init();
- MX_I2C1_Init();
- MX_UART5_Init();
- MX_USART2_UART_Init();
- MX_SPI1_Init();
- MX_USART1_UART_Init();
- /* USER CODE BEGIN 2 */
- LCD_init();
- display_main();
-
- DS1307_Init();
- year = 2020;
- month = 12;
- day = 23;
- hour = 14;
- minute = 27;
- // DS1307_write_date();
-
- DS1307_read_date();
- display_date(year,month,day);
- display_time(hour,minute,second);
-
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- if(ms>499){ //半秒处理开始
- ms = 0;
- ledn++;
- if(ledn>6){
- ledn = 1;
- ledm++;
- if(ledm>2){
- ledm = 0;
- }
- }
- switch (ledm){ //花样点灯开始
- case 0:
- if(ledn%2 == 0)
- LED_On(0);
- else
- LED_Off(0);
- break;
- case 1:
- LED_Off(0);
- if(ledn > 0)
- LED_On(ledn);
- break;
- case 2:
- LED_On(0);
- if(ledn > 0)
- LED_Off(ledn);
- break;
- case 3:
- break;
-
- } //花样点灯结束
- half++;
- if(half>1){ //秒处理开始
- half = 0;
- second++;
-
- if(second>59){ //分钟处理开始
- DS1307_read_date();
- display_date(year,month,day);
-
- } //分钟处理结束
- display_time(hour,minute,second);
- printf("当前时间秒:%d\r\n",second);
- HAL_UART_Transmit(&huart2,aTxBuffer, 16, 100);
- LCD_clear_line(4);
- LCD_clear_line(5);
- if(disp == 0)
- LCD_write_BG(50,4,"我要ST年度盛典");
- else
- LCD_write_BG(20,4,"ST社区 单片机开发者的家园");
- disp++;
- if(disp>1)
- disp = 0;
- } //秒处理结束
- } //半秒处理结束
- //处理串口中断接收的数据
- /* if(aRxID>1){
- LCD_write_value(0,2,3,0,0,aRxID);
- aRxID = 0;
- LCD_write_ASCII(0,3,1,aRxBuffer);
- }
- */
- //轮询处理中断接收的数据
- if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
- {
- HAL_UART_Receive(&huart2,aRxBuffer,16,100);
- LCD_write_ASCII(0,4,1,aRxBuffer);
- printf("\r\n");
- HAL_UART_Transmit(&huart2,aRxBuffer, 16, 100);
- }
- } //主循环结束
- /* USER CODE END 3 */
- }
复制代码 其中还包括了花样点亮三个LED灯和串口通讯测试的代码。
下面是LCD显示屏的特写("我要ST年度盛典"):
这是显示"ST社区 单片机开发者的家园"的照片:
这是测试的动画:
仓促应战,没有进一步做流水显示的效果,只是简单地循环显示而已,见笑了。
|
192*64点阵的屏,主要是性价比好,某宝才11元,买来不久。