can收发程序.zip
(19.01 MB, 售价: 5 E币)
部分源码,完整源码见附件。
- #ifdef EN_UPDATE_FONT
- u8 temp[512]; //零时空间
- u8 Update_Font(void)
- {
- u32 fcluster=0;
- u32 i;
- //u8 temp[512]; //零时空间 在这里定义,会内存溢出
- u32 tempsys[2]; //临时记录文件起始位置和文件大小
- float prog;
- u8 t;
- FileInfoStruct FileTemp;//零时文件夹
- //得到根目录的簇号
- if(FAT32_Enable)fcluster=FirstDirClust;
- else fcluster=0;
- FileTemp=F_Search(fcluster,(unsigned char *)folder[0],T_FILE);//查找system文件夹
- if(FileTemp.F_StartCluster==0)return 1; //系统文件夹丢失
- {
- //先查找字体
- FileTemp=F_Search(FileTemp.F_StartCluster,(unsigned char *)folder[1],T_FILE);//在system文件夹下查找FONT文件夹
- if(FileTemp.F_StartCluster==0)return 2;//字体文件夹丢失
- fcluster=FileTemp.F_StartCluster; //字体文件夹簇号
- FileTemp=F_Search(fcluster,(unsigned char *)sysfile[2],T_SYS);//在system文件夹下查找SYS文件
- if(FileTemp.F_StartCluster==0)return 3;//FONT12字体文件丢失
- //LCD_ShowString(20,90,"Write UNI2GBK to FLASH...");
- //LCD_ShowString(108,110,"%");
- F_Open(&FileTemp);//打开该文件
- i=0;
- while(F_Read(&FileTemp,temp))//成功读出512个字节
- {
- if(i<FileTemp.F_Size)//不超过文件大小
- {
- SPI_Flash_Write(temp,i+100000,512);//从100K字节处开始写入512个数据
- i+=512;//增加512个字节
- }
- prog=(float)i/FileTemp.F_Size;
- prog*=100;
- if(t!=prog)
- {
- t=prog;
- if(t>100)t=100;
- //LCD_ShowNum(84,110,t,3,16);//显示数值
- }
- }
- UNI2GBKADDR=100000;//UNI2GBKADDR从100K处开始写入.
- tempsys[0]=UNI2GBKADDR;
- tempsys[1]=FileTemp.F_Size; //UNI2GBKADDR 大小
- SPI_Flash_Write((u8*)tempsys,0,8);//记录在地址0~7处
- delay_ms(1000);
- //printf("UNI2GBK写入FLASH完毕!\n");
- //printf("写入数据长度:%d\n",FileTemp.F_Size);
- //printf("UNI2GBKSADDR:%d\n\n",UNI2GBKADDR);
-
- FONT16ADDR=FileTemp.F_Size+UNI2GBKADDR;//F16的首地址
- FileTemp=F_Search(fcluster,(unsigned char *)sysfile[0],T_FON);//在system文件夹下查找FONT16字体文件
- if(FileTemp.F_StartCluster==0)return 4;//FONT16字体文件丢失
-
- //LCD_ShowString(20,90,"Write FONT16 to FLASH... ");
- //printf("开始FONT16写入FLASH...\n");
- F_Open(&FileTemp);//打开该文件
- i=0;
- while(F_Read(&FileTemp,temp))//成功读出512个字节
- {
- if(i<FileTemp.F_Size)//不超过文件大小
- {
- SPI_Flash_Write(temp,i+FONT16ADDR,512);//从0开始写入512个数据
- i+=512;//增加512个字节
- }
- prog=(float)i/FileTemp.F_Size;
- prog*=100;
- if(t!=prog)
- {
- t=prog;
- if(t>100)t=100;
- //LCD_ShowNum(84,110,t,3,16);//显示数值
- }
- }
- tempsys[0]=FONT16ADDR;
- tempsys[1]=FileTemp.F_Size; //FONT16ADDR 大小
- SPI_Flash_Write((u8*)tempsys,8,8);//记录在地址8~15处
-
- delay_ms(1000);
- //printf("FONT16写入FLASH完毕!\n");
- //printf("写入数据长度:%d\n",FileTemp.F_Size);
- FONT24ADDR=FileTemp.F_Size+FONT16ADDR;//F16的首地址
- //printf("FONT16SADDR:%d\n\n",FONT16ADDR);
- //LCD_ShowString(20,60,"Write FONT12 to FLASH... ");
- //FONT12暂时不加入
-
- FileTemp=F_Search(fcluster,(unsigned char *)sysfile[1],T_FON);//在system文件夹下查找FONT12字体文件
- if(FileTemp.F_StartCluster==0)return 5;//FONT12字体文件丢失
- //printf("开始FONT12写入FLASH...\n");
- F_Open(&FileTemp);//打开该文件
- i=0;
- while(F_Read(&FileTemp,temp))//成功读出512个字节
- {
- if(i<FileTemp.F_Size)//不超过文件大小
- {
- SPI_Flash_Write(temp,i+FONT24ADDR,512);//从0开始写入512个数据
- i+=512;//增加512个字节
- }
- prog=(float)i/FileTemp.F_Size;
- prog*=100;
- if(t!=prog)
- {
- t=prog;
- if(t>100)t=100;
- //LCD_ShowNum(84,80,t,3,16);//显示数值
- }
- }
- tempsys[0]=FONT24ADDR;
- tempsys[1]=FileTemp.F_Size; //FONT16ADDR 大小
- SPI_Flash_Write((u8*)tempsys,16,8);//记录在地址16~23处
- //printf("FONT12写入FLASH完毕!\n");
- // printf("写入数据长度:%d\n",FileTemp.F_Size);
- // printf("FONT12SADDR:%d\n\n",FONT12ADDR); */
- }
- t=0XAA;
- SPI_Flash_Write(&t,24,1);//写入字库存在标志 0XAA
- //LCD_ShowString(20,90," Font Update Successed ");
- delay_ms(1000);
- delay_ms(1000);
- return 0;//成功
- }
- #endif
- //用这个函数得到字体地址
- //在系统使用汉字支持之前,必须调用该函数
- //包括FONT16ADDR,FONT12ADDR,UNI2GBKADDR;
- u8 Font_Init(void)
- {
- u32 tempsys[2];//临时记录文件起始位置和文件大小
- u8 fontok=0;
- SPI_Flash_Read(&fontok,24,1);//读出字库标志位,看是否存在字库
- if(fontok!=0XAA)return 1;
- SPI_Flash_Read((u8*)tempsys,0,8);//读出8个字节
- UNI2GBKADDR=tempsys[0];
- //printf("tempsysgbk[0]:%d\n",tempsys[0]);
- //printf("tempsysgbk[1]:%d\n",tempsys[1]);
- SPI_Flash_Read((u8*)tempsys,8,8);//读出8个字节
- //printf("tempsysf16[0]:%d\n",tempsys[0]);
- //printf("tempsysf16[1]:%d\n",tempsys[1]);
- FONT16ADDR=tempsys[0];
-
- SPI_Flash_Read((u8*)tempsys,16,8);//读出8个字节
- //printf("tempsysf12[0]:%d\n",tempsys[0]);
- //printf("tempsysf12[1]:%d\n",tempsys[1]);
- FONT24ADDR=tempsys[0];
- return 0;
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|
|