久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5016|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

廣告屏32*64 標(biāo)準(zhǔn)hub08接口STM32驅(qū)動程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:754501 發(fā)表于 2020-5-20 19:45 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

寫的一個標(biāo)準(zhǔn)08接口的廣告屏驅(qū)動,實現(xiàn)了簡單的文字字符顯示和位移,使用的是STM32F103單片;
  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;                        //顯示字?jǐn)?shù)(ASCII數(shù),1個漢字2個)
  16. uint8_t Fresh_Flag = 0;                        //更新顯示標(biāo)志位
  17. uint8_t ConncetFlag = 0;               
  18. /*                漢字GB2312和字模關(guān)聯(lián)表                */
  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. /*                初始化顯示的數(shù)字“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. /*                接收到指令后處理顯示,開關(guān)屏等                */
  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 默認(rèn)值
  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. }
復(fù)制代碼


STM32_Master.7z

224.78 KB, 下載次數(shù): 107, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:722257 發(fā)表于 2020-10-9 11:19 | 只看該作者
有沒有接線圖,有這個程序顯示不了!
回復(fù)

使用道具 舉報

板凳
ID:911371 發(fā)表于 2022-10-14 13:16 | 只看該作者
管用不?
回復(fù)

使用道具 舉報

地板
ID:1061553 發(fā)表于 2023-4-7 18:57 | 只看該作者
希望能用
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男人的天堂亚洲 | 国产一区二区在线免费观看 | 亚洲+变态+欧美+另类+精品 | 黄色一级片在线播放 | 久久精品中文 | 日韩精品在线免费观看视频 | av香蕉| 国产片侵犯亲女视频播放 | 久久www免费人成看片高清 | 91xh98hx 在线 国产 | 久久国产精品精品国产色婷婷 | 精品视频一区二区三区在线观看 | 日韩一区二区精品 | 国产丝袜一区二区三区免费视频 | 国产97碰免费视频 | 国产精品一区网站 | 日本在线黄色 | 日韩午夜 | 日本不卡免费新一二三区 | 国产精品久久久久久久免费大片 | 日韩久久网 | 久久久久成人精品免费播放动漫 | 久草免费在线视频 | 人人人人干 | 欧美日韩精品在线免费观看 | 日韩插插| 亚洲精品乱码久久久久久9色 | 中文字幕99 | www国产成人免费观看视频 | 偷偷操视频 | 97超级碰碰| 国产在线一区二区三区 | 在线观看亚洲专区 | 中文字幕高清 | 91资源在线观看 | 日韩精品一区在线 | 91视频正在播放 | 午夜三区 | 成人国产精品久久 | 视频二区 | 在线观看免费av网 |