找回密码
 注册

QQ登录

只需一步,快速开始

搜索

led显示屏32*64 标准hub08接口STM32驱动程序源码

[复制链接]
山海致远 发表于 2020-5-22 00:59:46 | 显示全部楼层 |阅读模式
一个标准08接口的广告屏驱动,实现了简单的文字字符显示和位移,使用的是STM32F103单片;
STM32_led_Master源码.zip (412.19 KB, 售价: 1 E币)
214258zealnj0hee7y6044.png

部分代码
  1. /**
  2.   ******************************************************************************
  3.   * @file           : main.c
  4.   * @brief          : Main program body
  5.   ******************************************************************************
  6.   * @attention
  7.   *
  8.   *         author: A free fish
  9.   *  If you have any questions, please contact:1961178217
  10.   ******************************************************************************
  11.   */
  12. #include "main.h"
  13. #include "font.h"


  14. unsigned char Word_Code_Buf[32*10] = {0};                //10个字的缓存空间
  15. uint8_t Word_num = 0;                        //显示字数(ASCII数,1个汉字2个)
  16. uint8_t Fresh_Flag = 0;                        //更新显示标志位
  17. uint8_t ConncetFlag = 0;               
  18. /*                汉字GB2312和字模关联表                */
  19. WORD_CODE font_word[24] = {
  20. {0xB9E3,Word_Font[0]},
  21. {0xB8E6,Word_Font[2]},
  22. {0xC6C1,Word_Font[4]},
  23. {0xCFD4,Word_Font[6]},
  24. {0xCABE,Word_Font[8]},
  25. {0xB2E2,Word_Font[10]},
  26. {0xCAD4,Word_Font[12]},
  27. {0xD6A7,Word_Font[14]},
  28. {0xB3D6,Word_Font[16]},
  29. {0xD2C6,Word_Font[18]},
  30. {0xB6AF,Word_Font[20]},
  31. {0xB9A6,Word_Font[22]},
  32. {0xC4DC,Word_Font[24]},
  33. {0xBFC9,Word_Font[26]},
  34. {0xD2D4,Word_Font[28]},
  35. {0xD4B6,Word_Font[30]},
  36. {0xB3CC,Word_Font[32]},
  37. {0xBFD8,Word_Font[34]},
  38. {0xD6C6,Word_Font[36]},
  39. {0xB6A8,Word_Font[38]},
  40. {0xCAB1,Word_Font[40]},
  41. {0xBFAA,Word_Font[42]},
  42. {0xB9D8,Word_Font[44]},
  43. {0xB5C8,Word_Font[46]},
  44. };
  45. USER User;
  46. /*                初始化显示的汉字“广告屏显示测试”                */
  47. void dis_init(void)
  48. {
  49. /*                初始化显示的数字“1961178217”                */
  50.         uint8_t dis[] = "1961178217";
  51.         uint8_t i,j;
  52.         uint16_t index = 0;
  53.         memset(Word_Code_Buf,0xff,10*32);
  54.         for(i = 0; i < 10; i ++ )
  55.         {
  56.                 for(j = 0; j < 16; j ++)
  57.                 {
  58.                         Word_Code_Buf[index++] = Ascii_Font[dis[i] - 0x20][j];
  59.                 }
  60.         }
  61.         Word_num = 10;
  62.         Fresh_Flag = 1;
  63. /*                初始化显示的汉字“广告屏显示测试”                */
  64. //        uint8_t i,j;
  65. //        uint16_t index = 0;
  66. //        memset(Word_Code_Buf,0xff,10*32);
  67. //        for(i = 0; i < 7; i ++ )
  68. //        {
  69. //                for(j = 0; j < 32; j ++)
  70. //                {
  71. //                        Word_Code_Buf[index++] = font_word[i].pdata[j];
  72. //                }
  73. //        }
  74. //        Word_num = 14;
  75. //        Fresh_Flag = 1;
  76. }
  77. /*                接收到指令后处理显示,开关屏等                */
  78. void Recive_Task( void )
  79. {
  80.         uint32_t Seconds_Now = 0;
  81.         uint32_t Seconds_Temp = 0;
  82.         uint8_t i,j,l,k;
  83.         uint8_t char_num = 0;
  84.         uint16_t index;
  85.         
  86.         Seconds_Now = RTC_GetCounter();
  87.         
  88.         
  89.         if( User.OFF_Flag == 1 )
  90.         {
  91.                 Fresh_Flag = 0;
  92.                 //User.OFF_Flag = 0;
  93.                 LED08_Off();
  94.         }
  95.         else if(User.ON_Flag == 1 )
  96.         {
  97.                 Fresh_Flag = 1;
  98.         }
  99.         if( User.OFF_Time_Flag == 1 )
  100.         {
  101.                 User.OFF_Time.Year = user_time.Year;
  102.                 User.OFF_Time.Mon = user_time.Mon;
  103.                 User.OFF_Time.Day = user_time.Day;
  104.                
  105.                 Seconds_Temp = GetTimeSec(User.OFF_Time);
  106.                 if( Seconds_Now >= Seconds_Temp )
  107.                 {
  108.                         User.OFF_Time_Flag = 0;
  109.                         User.OFF_Flag = 1;
  110.                         User.ON_Flag = 0;
  111.                 }
  112.         }
  113.         if( User.On_Time_Flag == 1 )
  114.         {
  115.                 User.On_Time.Year = user_time.Year;
  116.                 User.On_Time.Mon = user_time.Mon;
  117.                 User.On_Time.Day = user_time.Day;
  118.                
  119.                 Seconds_Temp = GetTimeSec(User.On_Time);
  120.                 if( Seconds_Now >= Seconds_Temp )
  121.                 {
  122.                         User.On_Time_Flag  = 0;
  123.                         User.OFF_Flag = 0;
  124.                         User.ON_Flag = 1;
  125.                 }
  126.         }
  127.         for(i = 0; i < 4; i ++)
  128.         {
  129.                 User.Dis_Data[i].End_Time.Year = user_time.Year;
  130.                 User.Dis_Data[i].End_Time.Mon = user_time.Mon;
  131.                 User.Dis_Data[i].End_Time.Day = user_time.Day;
  132.                
  133.                 Seconds_Temp = GetTimeSec(User.Dis_Data[i].End_Time);
  134.                 char_num = 0;
  135.                 if( Seconds_Now >= Seconds_Temp && User.Dis_Data[i].Dis_Flag == 1 && User.Dis_Data[i].En_Flag == 1 )
  136.                 {
  137.                         User.Dis_Data[i].En_Flag = 0;
  138.                         User.Dis_Data[i].Dis_Flag = 0;
  139.                         User.OFF_Flag = 1;
  140.                         User.ON_Flag = 0;
  141.                 }
  142.                 User.Dis_Data[i].Start_Time.Year = user_time.Year;
  143.                 User.Dis_Data[i].Start_Time.Mon = user_time.Mon;
  144.                 User.Dis_Data[i].Start_Time.Day = user_time.Day;
  145.                
  146.                 Seconds_Temp = GetTimeSec(User.Dis_Data[i].Start_Time);
  147.                 char_num = 0;
  148.                 if( Seconds_Now >= Seconds_Temp && User.Dis_Data[i].Dis_Flag == 0 && User.Dis_Data[i].En_Flag == 1)
  149.                 {
  150.                         Fresh_Flag = 0;
  151.                         index = 0;
  152.                         memset(Word_Code_Buf,0xff,10*32);
  153.                         for(j = 0; j < 20; j ++)
  154.                         {
  155.                                 if( User.Dis_Data[i].Data[j] >= ' ' && User.Dis_Data[i].Data[j] <= '~')        //ASCII码
  156.                                 {
  157.                                         for(l = 0; l < 16; l ++)
  158.                                         {
  159.                                                 Word_Code_Buf[index++] = Ascii_Font[User.Dis_Data[i].Data[j] - 0x20][l];
  160.                                                 
  161.                                         }
  162.                                         char_num += 1;
  163.                                        
  164.                                 }
  165.                                 else if( j <= 18 )                //汉字
  166.                                 {
  167.                                         for(l = 0; l < 24; l ++)
  168.                                         {
  169.                                                 if( ( User.Dis_Data[i].Data[j] << 8 | User.Dis_Data[i].Data[j + 1]) ==  font_word[l].gb2312_code )
  170.                                                 {
  171.                                                         for(k = 0; k < 32; k ++)
  172.                                                         {
  173.                                                                 Word_Code_Buf[index++] = font_word[l].pdata[k];
  174.                                                                
  175.                                                         }
  176.                                                         char_num += 2;
  177.                                                 }
  178.                                         }
  179.                                        
  180.                                 }
  181.                         }
  182.                         User.Dis_Data[i].Dis_Flag = 1;
  183.                         Word_num = char_num;
  184.                         Fresh_Flag = 1;
  185.                         User.OFF_Flag = 0;
  186.                         User.ON_Flag = 1;
  187.                 }
  188.         }
  189.         
  190. }
  191. int main( void )
  192. {
  193.         static u32 Buz_Time = 0;
  194.         u8 i,j;
  195.         u32 RandSum;
  196.         u16 Cnt = 0;
  197.         Bsp_Init();
  198.         printf("start!\r\n");
  199.         delay_ms(T_20S);
  200.         
  201.         Sim900a_Init();
  202.         delay_ms(T_5S);
  203.         

  204.         dis_init();
  205.         
  206.         while(1)
  207.         {
  208.                 if( ConncetFlag == 0 )
  209.                         Connect_TCP();
  210.                 if( ( OsDelayCCnt % 1000 ) == 0)
  211.                 {
  212.                         printf("RTC:%d:%d:%d %d:%d:%d\r\n",user_time.Year,\
  213.                         user_time.Mon,user_time.Day,user_time.Hour,user_time.Min,user_time.Sec);
  214.                         DbgLed_Turn();
  215.                         Bsp_Rtc_GetTime(&user_time);
  216.                 }
  217.                 Cnt ++;
  218.                 Display_Task();
  219.                 Recive_Task();
  220.                 Display();
  221.                 if( ( OsDelayCCnt % 5*1000 ) == 0)
  222.                 {
  223.                         //Send_Data();
  224.                 }
  225.                
  226.         }
  227. }


  228. //len1 长度 InitValue 默认值
  229. u32 Pub_DecAscToU32_Vice( const u8  *Src, u8 Len, u8 InitValue )
  230. {
  231.     u8 i;
  232.     u32 Result;

  233.     if( 0 == Len )
  234.     {
  235.         return InitValue;
  236.     }

  237.     Result = 0;

  238.     for( i = 0; i < Len; i++ )
  239.     {
  240.         if( *( Src + i ) >= '0' && *( Src + i ) <= '9' )
  241.         {
  242.             Result = 10 * Result + ( *( Src + i ) - '0' );
  243.         }
  244.         else
  245.         {
  246.             break;
  247.         }

  248.     }


  249.     return Result;

  250. }
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-27 12:32

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表