一个标准08接口的广告屏驱动,实现了简单的文字字符显示和位移,使用的是STM32F103单片;
STM32_led_Master源码.zip
(412.19 KB, 售价: 1 E币)
部分代码
- /**
- ******************************************************************************
- * @file : main.c
- * @brief : Main program body
- ******************************************************************************
- * @attention
- *
- * author: A free fish
- * If you have any questions, please contact:1961178217
- ******************************************************************************
- */
- #include "main.h"
- #include "font.h"
- unsigned char Word_Code_Buf[32*10] = {0}; //10个字的缓存空间
- uint8_t Word_num = 0; //显示字数(ASCII数,1个汉字2个)
- uint8_t Fresh_Flag = 0; //更新显示标志位
- uint8_t ConncetFlag = 0;
- /* 汉字GB2312和字模关联表 */
- WORD_CODE font_word[24] = {
- {0xB9E3,Word_Font[0]},
- {0xB8E6,Word_Font[2]},
- {0xC6C1,Word_Font[4]},
- {0xCFD4,Word_Font[6]},
- {0xCABE,Word_Font[8]},
- {0xB2E2,Word_Font[10]},
- {0xCAD4,Word_Font[12]},
- {0xD6A7,Word_Font[14]},
- {0xB3D6,Word_Font[16]},
- {0xD2C6,Word_Font[18]},
- {0xB6AF,Word_Font[20]},
- {0xB9A6,Word_Font[22]},
- {0xC4DC,Word_Font[24]},
- {0xBFC9,Word_Font[26]},
- {0xD2D4,Word_Font[28]},
- {0xD4B6,Word_Font[30]},
- {0xB3CC,Word_Font[32]},
- {0xBFD8,Word_Font[34]},
- {0xD6C6,Word_Font[36]},
- {0xB6A8,Word_Font[38]},
- {0xCAB1,Word_Font[40]},
- {0xBFAA,Word_Font[42]},
- {0xB9D8,Word_Font[44]},
- {0xB5C8,Word_Font[46]},
- };
- USER User;
- /* 初始化显示的汉字“广告屏显示测试” */
- void dis_init(void)
- {
- /* 初始化显示的数字“1961178217” */
- uint8_t dis[] = "1961178217";
- uint8_t i,j;
- uint16_t index = 0;
- memset(Word_Code_Buf,0xff,10*32);
- for(i = 0; i < 10; i ++ )
- {
- for(j = 0; j < 16; j ++)
- {
- Word_Code_Buf[index++] = Ascii_Font[dis[i] - 0x20][j];
- }
- }
- Word_num = 10;
- Fresh_Flag = 1;
- /* 初始化显示的汉字“广告屏显示测试” */
- // uint8_t i,j;
- // uint16_t index = 0;
- // memset(Word_Code_Buf,0xff,10*32);
- // for(i = 0; i < 7; i ++ )
- // {
- // for(j = 0; j < 32; j ++)
- // {
- // Word_Code_Buf[index++] = font_word[i].pdata[j];
- // }
- // }
- // Word_num = 14;
- // Fresh_Flag = 1;
- }
- /* 接收到指令后处理显示,开关屏等 */
- void Recive_Task( void )
- {
- uint32_t Seconds_Now = 0;
- uint32_t Seconds_Temp = 0;
- uint8_t i,j,l,k;
- uint8_t char_num = 0;
- uint16_t index;
-
- Seconds_Now = RTC_GetCounter();
-
-
- if( User.OFF_Flag == 1 )
- {
- Fresh_Flag = 0;
- //User.OFF_Flag = 0;
- LED08_Off();
- }
- else if(User.ON_Flag == 1 )
- {
- Fresh_Flag = 1;
- }
- if( User.OFF_Time_Flag == 1 )
- {
- User.OFF_Time.Year = user_time.Year;
- User.OFF_Time.Mon = user_time.Mon;
- User.OFF_Time.Day = user_time.Day;
-
- Seconds_Temp = GetTimeSec(User.OFF_Time);
- if( Seconds_Now >= Seconds_Temp )
- {
- User.OFF_Time_Flag = 0;
- User.OFF_Flag = 1;
- User.ON_Flag = 0;
- }
- }
- if( User.On_Time_Flag == 1 )
- {
- User.On_Time.Year = user_time.Year;
- User.On_Time.Mon = user_time.Mon;
- User.On_Time.Day = user_time.Day;
-
- Seconds_Temp = GetTimeSec(User.On_Time);
- if( Seconds_Now >= Seconds_Temp )
- {
- User.On_Time_Flag = 0;
- User.OFF_Flag = 0;
- User.ON_Flag = 1;
- }
- }
- for(i = 0; i < 4; i ++)
- {
- User.Dis_Data[i].End_Time.Year = user_time.Year;
- User.Dis_Data[i].End_Time.Mon = user_time.Mon;
- User.Dis_Data[i].End_Time.Day = user_time.Day;
-
- Seconds_Temp = GetTimeSec(User.Dis_Data[i].End_Time);
- char_num = 0;
- if( Seconds_Now >= Seconds_Temp && User.Dis_Data[i].Dis_Flag == 1 && User.Dis_Data[i].En_Flag == 1 )
- {
- User.Dis_Data[i].En_Flag = 0;
- User.Dis_Data[i].Dis_Flag = 0;
- User.OFF_Flag = 1;
- User.ON_Flag = 0;
- }
- User.Dis_Data[i].Start_Time.Year = user_time.Year;
- User.Dis_Data[i].Start_Time.Mon = user_time.Mon;
- User.Dis_Data[i].Start_Time.Day = user_time.Day;
-
- Seconds_Temp = GetTimeSec(User.Dis_Data[i].Start_Time);
- char_num = 0;
- if( Seconds_Now >= Seconds_Temp && User.Dis_Data[i].Dis_Flag == 0 && User.Dis_Data[i].En_Flag == 1)
- {
- Fresh_Flag = 0;
- index = 0;
- memset(Word_Code_Buf,0xff,10*32);
- for(j = 0; j < 20; j ++)
- {
- if( User.Dis_Data[i].Data[j] >= ' ' && User.Dis_Data[i].Data[j] <= '~') //ASCII码
- {
- for(l = 0; l < 16; l ++)
- {
- Word_Code_Buf[index++] = Ascii_Font[User.Dis_Data[i].Data[j] - 0x20][l];
-
- }
- char_num += 1;
-
- }
- else if( j <= 18 ) //汉字
- {
- for(l = 0; l < 24; l ++)
- {
- if( ( User.Dis_Data[i].Data[j] << 8 | User.Dis_Data[i].Data[j + 1]) == font_word[l].gb2312_code )
- {
- for(k = 0; k < 32; k ++)
- {
- Word_Code_Buf[index++] = font_word[l].pdata[k];
-
- }
- char_num += 2;
- }
- }
-
- }
- }
- User.Dis_Data[i].Dis_Flag = 1;
- Word_num = char_num;
- Fresh_Flag = 1;
- User.OFF_Flag = 0;
- User.ON_Flag = 1;
- }
- }
-
- }
- int main( void )
- {
- static u32 Buz_Time = 0;
- u8 i,j;
- u32 RandSum;
- u16 Cnt = 0;
- Bsp_Init();
- printf("start!\r\n");
- delay_ms(T_20S);
-
- Sim900a_Init();
- delay_ms(T_5S);
-
- dis_init();
-
- while(1)
- {
- if( ConncetFlag == 0 )
- Connect_TCP();
- if( ( OsDelayCCnt % 1000 ) == 0)
- {
- printf("RTC:%d:%d:%d %d:%d:%d\r\n",user_time.Year,\
- user_time.Mon,user_time.Day,user_time.Hour,user_time.Min,user_time.Sec);
- DbgLed_Turn();
- Bsp_Rtc_GetTime(&user_time);
- }
- Cnt ++;
- Display_Task();
- Recive_Task();
- Display();
- if( ( OsDelayCCnt % 5*1000 ) == 0)
- {
- //Send_Data();
- }
-
- }
- }
- //len1 长度 InitValue 默认值
- u32 Pub_DecAscToU32_Vice( const u8 *Src, u8 Len, u8 InitValue )
- {
- u8 i;
- u32 Result;
- if( 0 == Len )
- {
- return InitValue;
- }
- Result = 0;
- for( i = 0; i < Len; i++ )
- {
- if( *( Src + i ) >= '0' && *( Src + i ) <= '9' )
- {
- Result = 10 * Result + ( *( Src + i ) - '0' );
- }
- else
- {
- break;
- }
- }
- return Result;
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|