怎么解析汉字库.cpp文件中输入汉字HZK16.DZK-STM32-F0/F1/F2专区

查看: 8550|回复: 30
添加文件的时候老是出现这个问题!不知道哪里添加错了!在线等大神!!!
主题帖子精华
中级会员, 积分 280, 距离下一级还需 220 积分
在线时间45 小时
Build target 'CAN'
compiling USART.c...
compiling GLCD.c...
compiling main.c...
compiling stm32f10x_it.c...
compiling SL811.c...
Source\SL811\SL811.c(244): error: &#136: struct "&unnamed&" has no field "FSMC_AsynchronousWait"
Source\SL811\SL811.c(244): error: &#20: identifier "FSMC_AsynchronousWait_Disable" is undefined
compiling SL811mouse.c...
compiling system_stm32f10x.c...
compiling misc.c...
compiling stm32f10x_adc.c...
compiling stm32f10x_bkp.c...
compiling stm32f10x_can.c...
compiling stm32f10x_crc.c...
compiling stm32f10x_dac.c...
compiling stm32f10x_dbgmcu.c...
compiling stm32f10x_dma.c...
compiling stm32f10x_exti.c...
compiling stm32f10x_flash.c...
compiling stm32f10x_fsmc.c...
compiling stm32f10x_gpio.c...
compiling stm32f10x_i2c.c...
compiling stm32f10x_iwdg.c...
compiling stm32f10x_pwr.c...
compiling stm32f10x_rcc.c...
compiling stm32f10x_rtc.c...
compiling stm32f10x_sdio.c...
compiling stm32f10x_spi.c...
compiling stm32f10x_tim.c...
compiling stm32f10x_usart.c...
compiling stm32f10x_wwdg.c...
Target not created
主题帖子精华
金钱114248
在线时间853 小时
很明显,编译器已经提示你问题所在了SL811.c里面,FSMC_AsynchronousWait这个定义&在结构体的域里面,是没有这一项参数的。
你得看看你的库函数版本,是不是变了?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 76, 距离下一级还需 124 积分
在线时间0 小时
主题帖子精华
中级会员, 积分 280, 距离下一级还需 220 积分
在线时间45 小时
回复【2楼】正点原子:
---------------------------------
原子哥,那这个头文件stm32f10x_sdio.c是干嘛的?还有就是有时候在添加路径的时候为啥不添加src,但是有些工程里就添加了!!!
还有就是能否大概给说一下你们新建工程的每一个文件夹大概是干嘛的!!!
core,&obj,STM32_FWLIB(这个在添加group的时候为啥名字发生了变化!!!),SYSTEM,USER。。。。
那个你们视频上说的define&USE_STDPERIPH_DRIVER,STM32F10X_HD这两个,我看大多数的工程都没添加!!!求解释!!!
麻烦了!!!
主题帖子精华
金钱114248
在线时间853 小时
回复【4楼】正点电子:
---------------------------------
stm32f10x_sdio.c是stm32&sdio部分的驱动.
有的添加,有的不添加,是因为有的要用到sdio,有的不要用到,如果不要用到sdio,你也添加,那就是资源浪费了,占flash呢...
不同文件夹,放不同的文件,条理清晰,比如SYSTEM,放系统相关的.c文件,HARDWARE放各种硬件驱动.c文件.MALLOC放内存管理.c文件.PICTURE,放图片编解码.c文件,obj存放编译过程的一些中间文件(各种编译产生的文件,以及hex文件等),FWLIB(或STM32F10x_FWLib)存放STM32各种外设的驱动代码(即所谓的库函数)....
重点说说STM32F10x_FWLib,所谓的库函数,其实就是指这个里面的代码.这个文件夹里面还有2个子文件夹:inc和src
顾名思义,inc是指头文件,src是指源码,这样头文件和源码分别存放在这两个文件夹里面.inc我们在新建工程的时候,必须添加到头文件包含路径去,让mdk可以找到这些头文件.
然后src里面的.c文件,则是stm32各种外设的驱动,我们根据自己的需要进行添加即可,没必要全添加,前面说过,一方面可以省空间,另外一方面,可以大大提高编译速度,你不想编译一次就可以看一部电影吧?
标准的工程新建办法,是要添加"&USE_STDPERIPH_DRIVER,STM32F10X_HD的.
USE_STDPERIPH_DRIVER,是告诉编译器,我们需要使用标准库了(实际上是.c/.h文件里面的一个宏,通过这个宏决定是不是要用某些资源,比如库函数的使用)
STM32F10X_HD,则是表示我们使用的芯片是大容量的stm32,从而告诉那些.c/.h文件,使用相关代码.
另外,很重要的一个文件,常被初学者忽略,那就是:stm32f10x_conf.h
很多库函数相关的.h文件,是在这个里面被包含进来的.
所以你很多时候,只看到我们代码包含了stm32f10x.h了,事实上,由于我们定义了:USE_STDPERIPH_DRIVER,所以在stm32f10x.h里面,会包含:stm32f10x_conf.h
而stm32f10x_conf.h会包含各种外设的.h文件,如下:
#ifndef&__STM32F10x_CONF_H
#define&__STM32F10x_CONF_H
/*&Includes&------------------------------------------------------------------*/
/*&Uncomment/Comment&the&line&below&to&enable/disable&peripheral&header&file&inclusion&*/
//#include&"stm32f10x_adc.h"
//#include&"stm32f10x_bkp.h"
//#include&"stm32f10x_can.h"
//#include&"stm32f10x_cec.h"
//#include&"stm32f10x_crc.h"
//#include&"stm32f10x_dac.h"
#include&"stm32f10x_dbgmcu.h"
//#include&"stm32f10x_dma.h"
//#include&"stm32f10x_exti.h"
//#include&"stm32f10x_flash.h"
//#include&"stm32f10x_fsmc.h"
#include&"stm32f10x_gpio.h"
//#include&"stm32f10x_i2c.h"
//#include&"stm32f10x_iwdg.h"
//#include&"stm32f10x_pwr.h"
#include&"stm32f10x_rcc.h"
//#include&"stm32f10x_rtc.h"
//#include&"stm32f10x_sdio.h"
//#include&"stm32f10x_spi.h"
//#include&"stm32f10x_tim.h"
#include&"stm32f10x_usart.h"
//#include&"stm32f10x_wwdg.h"
..............
这样,我们就把这些.h文件添加到了你的工程里面,上面的代码,我们很多.h文件都是被屏蔽了,所以如果你在使用的时候,遇到提示对应外设的定义没有而出错的时候,不妨看看你的stm32f10x_conf.h里面,有没有注释掉对应外设的头文件.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
讲的很详细!
主题帖子精华
中级会员, 积分 280, 距离下一级还需 220 积分
在线时间45 小时
谢谢原子哥!我明白了!
主题帖子精华
中级会员, 积分 280, 距离下一级还需 220 积分
在线时间45 小时
回复【5楼】正点原子:
---------------------------------
谢谢原子哥!我明白了!
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【5楼】正点原子:
---------------------------------
超赞。&&买你的产品是值得的。
主题帖子精华
金钱114248
在线时间853 小时
回复【9楼】chupacabra96:
---------------------------------
谢谢支持
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 44, 距离下一级还需 6 积分
在线时间0 小时
讲得真透彻,这下总算明白了~
主题帖子精华
新手上路, 积分 44, 距离下一级还需 6 积分
在线时间0 小时
我还有个疑问,原子哥,你是怎么知道要在编译器那边添加USE_STDPERIPH_DRIVER,STM32F10X_HD这句话的?是芯片的编程手册上面写的还是哪里看到的?
主题帖子精华
金钱114248
在线时间853 小时
回复【12楼】冰QI淋:
---------------------------------
这个你看ST官方例程就知道了。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【13楼】正点原子:
---------------------------------
&想请教&一段代码就是
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|&
142
RCC_APB2Periph_GPIOE,&ENABLE);&&&&//使能&GPIOB,GPIOE&端口时钟
为什么这里是进行或运算&&&&知道这样用&&&但是&&突然想不明白来着&&&&求回
主题帖子精华
金钱114248
在线时间853 小时
回复【14楼】chupacabra96:
---------------------------------
因为可以这么写,他们不重复。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【15楼】正点原子:
---------------------------------
能否&再详细点?地址进行或运算??
主题帖子精华
金钱114248
在线时间853 小时
回复【16楼】chupacabra96:
---------------------------------
你看看这两个宏定义的&值,然后看看他们相或后的值,然后看看函数里面,是怎么配置的,然后你还不懂,再来问我。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【17楼】正点原子:
---------------------------------
回复【17楼】正点原子:
---------------------------------
看懂了&&&原来&&程序里面都提前给他赋值了&&&调用的时候判断一下&&&就知道&调用了哪些?可是这样那些写库人工作量太大了吧。。。太吊了
#ifdef&I2C_REMAP
&&&&GPIO_InitStructure.GPIO_Pin&=&&GPIO_Pin_8&|&GPIO_Pin_9;&&&像这样吗?
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【18楼】chupacabra96:
---------------------------------
#define&GPIO_Remap_SPI1&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&SPI1&Alternate&Function&mapping&*/
#define&GPIO_Remap_I2C1&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&I2C1&Alternate&Function&mapping&*/
#define&GPIO_Remap_USART1&&&&&&&&&&&((uint32_t)0x)&&/*!&&USART1&Alternate&Function&mapping&*/
#define&GPIO_Remap_USART2&&&&&&&&&&&((uint32_t)0x)&&/*!&&USART2&Alternate&Function&mapping&*/
#define&GPIO_PartialRemap_USART3&&&&((uint32_t)0x)&&/*!&&USART3&nbspartial&Alternate&Function&mapping&*/
#define&GPIO_FullRemap_USART3&&&&&&&((uint32_t)0x)&&/*!&&USART3&Full&Alternate&Function&mapping&*/
#define&GPIO_PartialRemap_TIM1&&&&&&((uint32_t)0x)&&/*!&&TIM1&nbspartial&Alternate&Function&mapping&*/
#define&GPIO_FullRemap_TIM1&&&&&&&&&((uint32_t)0x)&&/*!&&TIM1&Full&Alternate&Function&mapping&*/
#define&GPIO_PartialRemap1_TIM2&&&&&((uint32_t)0x)&&/*!&&TIM2&nbspartial1&Alternate&Function&mapping&*/
#define&GPIO_PartialRemap2_TIM2&&&&&((uint32_t)0x)&&/*!&&TIM2&nbspartial2&Alternate&Function&mapping&*/
#define&GPIO_FullRemap_TIM2&&&&&&&&&((uint32_t)0x)&&/*!&&TIM2&Full&Alternate&Function&mapping&*/
#define&GPIO_PartialRemap_TIM3&&&&&&((uint32_t)0x001A0800)&&/*!&&TIM3&nbspartial&Alternate&Function&mapping&*/
#define&GPIO_FullRemap_TIM3&&&&&&&&&((uint32_t)0x001A0C00)&&/*!&&TIM3&Full&Alternate&Function&mapping&*/
#define&GPIO_Remap_TIM4&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&TIM4&Alternate&Function&mapping&*/
#define&GPIO_Remap1_CAN1&&&&&&&&&&&&((uint32_t)0x001D4000)&&/*!&&CAN1&Alternate&Function&mapping&*/
#define&GPIO_Remap2_CAN1&&&&&&&&&&&&((uint32_t)0x001D6000)&&/*!&&CAN1&Alternate&Function&mapping&*/
#define&GPIO_Remap_PD01&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&nbspD01&Alternate&Function&mapping&*/
#define&GPIO_Remap_TIM5CH4_LSI&&&&&&((uint32_t)0x)&&/*!&&LSI&connected&to&TIM5&Channel4&input&capture&for&calibration&*/
#define&GPIO_Remap_ADC1_ETRGINJ&&&&&((uint32_t)0x)&&/*!&&ADC1&External&Trigger&Injected&Conversion&remapping&*/
#define&GPIO_Remap_ADC1_ETRGREG&&&&&((uint32_t)0x)&&/*!&&ADC1&External&Trigger&Regular&Conversion&remapping&*/
#define&GPIO_Remap_ADC2_ETRGINJ&&&&&((uint32_t)0x)&&/*!&&ADC2&External&Trigger&Injected&Conversion&remapping&*/
#define&GPIO_Remap_ADC2_ETRGREG&&&&&((uint32_t)0x)&&/*!&&ADC2&External&Trigger&Regular&Conversion&remapping&*/
#define&GPIO_Remap_ETH&&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&Ethernet&remapping&(only&for&Connectivity&line&devices)&*/
#define&GPIO_Remap_CAN2&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&CAN2&remapping&(only&for&Connectivity&line&devices)&*/
#define&GPIO_Remap_SWJ_NoJTRST&&&&&&((uint32_t)0x)&&/*!&&Full&SWJ&Enabled&(JTAG-DP&+&SW-DP)&but&without&JTRST&*/
#define&GPIO_Remap_SWJ_JTAGDisable&&((uint32_t)0x)&&/*!&&JTAG-DP&Disabled&and&SW-DP&Enabled&*/
#define&GPIO_Remap_SWJ_Disable&&&&&&((uint32_t)0x)&&/*!&&Full&SWJ&Disabled&(JTAG-DP&+&SW-DP)&*/
#define&GPIO_Remap_SPI3&&&&&&&&&&&&&((uint32_t)0x)&&/*!&&SPI3/I2S3&Alternate&Function&mapping&(only&for&Connectivity&line&devices)&*/
#define&GPIO_Remap_TIM2ITR1_PTP_SOF&((uint32_t)0x)&&/*!
每次是不是从这里面去查值?
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【19楼】chupacabra96:
---------------------------------
回复【17楼】正点原子:
---------------------------------
感觉好像不对啊?&&随便找两根引脚进行计算&&之后&找不到对应的值?
主题帖子精华
金钱114248
在线时间853 小时
回复【20楼】chupacabra96:
---------------------------------
好好看代码吧。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【21楼】正点原子:
----------------------------原子哥给点提示吧
主题帖子精华
金钱114248
在线时间853 小时
回复【22楼】chupacabra96:
---------------------------------
我比较忙,如果11月底你还没搞定,12月1号电话我,我帮你解答。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间0 小时
原子哥,请教一下
296e4e92f18b4f0ba456_955.jpg (0 Bytes, 下载次数: 0)
22:54 上传
1.宏定义方式
83ade66f52c_442.png (0 Bytes, 下载次数: 0)
22:54 上传
2.stm32f10x_conf.h文件
我发现使用两种方法的结果是一样的,原以为在宏定义里面添加USE_STDPERIPH_DRIVER之后,conf文件中会自动把相应注释去掉,但我看了,conf文件没变化,这是怎么回事呢?
主题帖子精华
金钱114248
在线时间853 小时
回复【24楼】sandseas:
---------------------------------
在编译器里面设置,相当于全局宏定义,不会体现在代码里面的。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间0 小时
回复【25楼】正点原子:
---------------------------------
原子哥的意思是在编译器里面进行宏定义作用范围要比在conf文件里定义作用范围要大,
但两种方法的结果是一样的,哪一种方法更通用一些呢,大家采用哪种方法多一些?
主题帖子精华
金钱114248
在线时间853 小时
回复【26楼】sandseas:
---------------------------------
是的
两者都常用,看你自己的实际需求了。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间0 小时
回复【27楼】正点原子:
---------------------------------
好的,谢谢了
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【23楼】正点原子:
---------------------------------太贴心了&&&我找到为什么了&&&&&谢谢啊
主题帖子精华
新手上路, 积分 33, 距离下一级还需 17 积分
在线时间2 小时
回复【14楼】chupacabra96:
---------------------------------
看到你这个问题,我也琢磨了半天,不知道以下想法对不对?
RCC_APB2Periph_GPIOB&定义的是((uint32_t)0x)&--&1000b
RCC_APB2Periph_GPIOE&定义的是((uint32_t)0x)&--&100&0000b
对应的是APB2外设时钟使能寄存器(RCC_APB2ENR)的第3位和第6位.
(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOBE)&或操作之后有两位置1,再运行void&RCC_APB2PeriphClockCmd的时候,同时将IO口B和E时钟开启。
void&RCC_APB2PeriphClockCmd(uint32_t&RCC_APB2Periph,&FunctionalState&NewState)
{
&&/*&Check&the&parameters&*/
&&assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
&&assert_param(IS_FUNCTIONAL_STATE(NewState));
&&if&(NewState&!=&DISABLE)
&&{
&&&&RCC-&APB2ENR&|=&RCC_APB2P
&&}
&&else
&&{
&&&&RCC-&APB2ENR&&=&~RCC_APB2P
&&}
}
主题帖子精华
新手上路, 积分 40, 距离下一级还需 10 积分
在线时间0 小时
回复【30楼】野子:
---------------------------------
对的,通过位运算&开启时钟
Powered by查看: 1253|回复: 3
24*24字库在mini板上更改疑问?
主题帖子精华
中级会员, 积分 228, 距离下一级还需 272 积分
在线时间0 小时
#include "fontupd.h"
#include "sys.h"
#include "fat.h"
#include "flash.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"
//以下下字段一定不要乱改!!!
//字节0~3,& 记录UNI2GBKADDR;字节4~7& ,记录UNI2GBKADDR的大小
//字节8~11, 记录FONT16ADDR ;字节12~15,记录FONT16ADDR的大小
//字节16~19,记录FONT12ADDR ;字节20~23,记录FONT12ADDR的大小
//字节32,用来存放字库是否存在的标志位,0XAA,表示存在字库;其他值,表示字库不存在!
//系统文件夹&&&
const unsigned char *folder[2]=
//系统文件定义
const unsigned char *sysfile[2]=
//"GBK16.FON",
//"GBK12.FON",
"GBK24.FON",
"UNI2GBK.SYS",&&
//字节0~3,& 记录UNI2GBKADDR;字节4~7& ,记录UNI2GBKADDR的大小
//字节8~11, 记录FONT16ADDR ;字节12~15,记录FONT16ADDR的大小
//字节16~19,记录FONT12ADDR ;字节20~23,记录FONT12ADDR的大小
//字体存放,从100K处开始
//100K,存放UNICODE2GBK的转换码&
//u32 FONT16ADDR ;//16字体存放的地址
//u32 FONT12ADDR ;//12字体存放的地址
u32 FONT24ADDR ;//24字体存放的地址
u32 UNI2GBKADDR;//UNICODE TO GBK 表存放地址&& &
//更新字体文件
//返回值:0,更新成功;
//&& 其他,错误代码.
//正点原子@ALIENTEK
#ifdef EN_UPDATE_FONT
u8 temp[512];& //零时空间
u8 Update_Font(void)
&u32 fcluster=0;&&&
&//u8 temp[512];& //零时空间& 在这里定义,会内存溢出
&u32 tempsys[2];& //临时记录文件起始位置和文件大小
&FileInfoStruct FileT//零时文件夹&& &&&&&&& &
&//得到根目录的簇号
&if(FAT32_Enable)fcluster=FirstDirC
&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_StartC&&&&& //字体文件夹簇号&&&&
&&FileTemp=F_Search(fcluster,(unsigned char *)sysfile[1],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);//打开该文件
&&while(F_Read(&FileTemp,temp))//成功读出512个字节
&&&if(i&FileTemp.F_Size)//不超过文件大小
&&&&SPI_Flash_Write(temp,i+);//从100K字节处开始写入512个数据&&
&&&&i+=512;//增加512个字节
&&&prog=(float)i/FileTemp.F_S
&&&prog*=100;
&&&if(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_S& && //UNI2GBKADDR 大小
&&SPI_Flash_Write((u8*)tempsys,0,8);//记录在地址0~7处
&&delay_ms(1000);&&&&&&
&&FONT24ADDR=FileTemp.F_Size+UNI2GBKADDR;//F24的首地址
&&FileTemp=F_Search(fcluster,(unsigned char *)sysfile[0],T_FON);//在system文件夹下查找FONT24字体文件
&&if(FileTemp.F_StartCluster==0)return 4;//FONT24字体文件丢失&
&&LCD_ShowString(20,90,"Write FONT24 to FLASH... ");&&&
&&F_Open(&FileTemp);//打开该文件
&&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_S
&&&prog*=100;
&&&if(t!=prog)
&&&&if(t&100)t=100;
&&&&LCD_ShowNum(84,110,t,3,16);//显示数值
&&}&&&&&&&&&&&&&&
&&tempsys[0]=FONT24ADDR;
&&tempsys[1]=FileTemp.F_S& && //FONT24ADDR 大小
&&SPI_Flash_Write((u8*)tempsys,8,8);//记录在地址8~15处&&
&&delay_ms(1000);&&&& &&
&& &SPI_Flash_Write(&t,16,1);//写入字库存在标志&0XAA
&LCD_ShowString(20,90,"& Font Update Successed& ");&&&&&
&delay_ms(1000);&&
&delay_ms(1000);&&
&return 0;//成功
//用这个函数得到字体地址
//在系统使用汉字支持之前,必须调用该函数
//包括FONT16ADDR,FONT12ADDR,UNI2GBKADDR;&
u8 Font_Init(void)
&u32 tempsys[2];//临时记录文件起始位置和文件大小
&u8 fontok=0;
&SPI_Flash_Read(&fontok,16,1);//读出字库标志位,看是否存在字库
&if(fontok!=0XAA)return 1;
&SPI_Flash_Read((u8*)tempsys,0,8);//读出8个字节&&
&UNI2GBKADDR=tempsys[0];&&&&&&
&SPI_Flash_Read((u8*)tempsys,8,8);//读出8个字节&&
&FONT24ADDR=tempsys[0];
&return 0;&
红色和蓝色是我参考16字体改动过的程序,下面是text.c
#include "sys.h"
#include "fontupd.h"
#include "flash.h"
#include "lcd.h"
#include "text.h"
&&&&&&&&&&&&&&&&&
//code 字符指针开始
//从字库中查找出字模
//code 字符串的开始地址,ascii码
//mat& 数据存放地址 size*2 bytes大小
//正点原子@HYW
//CHECK:09/10/30
void Get_HzMat(unsigned char *code,unsigned char *mat,u8 size)
&unsigned char qh,
&ql=*(++code);
&if(qh&0x81||ql&0x40||ql==0xff||qh==0xff)//非 常用汉字
&{&& &&&&&
&&&& for(i=0;i&(size*3);i++)*mat++=0x00;//填充满格
&&&& //结束访问
&}&&&&&&&&&
&if(ql&0x7f)ql-=0x40;//注意!
&else ql-=0x41;
&qh-=0x81;&&
&foffset=((unsigned long)190*qh+ql)*(size*3);//得到字库中的字节偏移量&&&&&
&if(size==24)
&&&SPI_Flash_Read(mat,foffset+FONT24ADDR,72);&&&&&&&&&& &&&&
//显示一个指定大小的汉字
//x,y :汉字的坐标
//font:汉字GBK码
//size:字体大小
//mode:0,正常显示,1,叠加显示&
//正点原子@HYW
//CHECK:09/10/30
void Show_Font(u16 x,u16 y,u8 *font,u8 size,u8 mode)
&u8 temp,t,t1;
&u16 y0=y;
&u8 dzk[72];
&Get_HzMat(font,dzk,size);//得到相应大小的点阵数据
&if(mode==0)//正常显示
&&&& for(t=0;t&size*3;t++)
&&&& {&& &&&&&&&&&&&&&&
&&&&&&&& temp=dzk[t];
&&&&&&&& for(t1=0;t1&8;t1++)
&&&&if(temp&0x80)LCD_DrawPoint(x,y);
&&&&&tempcolor=POINT_COLOR;
&&&&&nbspOINT_COLOR=BACK_COLOR;
&&&&&LCD_DrawPoint(x,y);
&&&&&nbspOINT_COLOR=//还原
&&&&temp&&=1;
&&&&if((y-y0)==size)
&&&&&y=y0;
&}else//叠加显示
&&&& for(t=0;t&size*3;t++)
&&&& {&& &&&&&&&&&&&&&&
&&&&& temp=dzk[t];//得到12数据&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&& for(t1=0;t1&8;t1++)
&&&&if(temp&0x80)LCD_DrawPoint(x,y);&&
&&&&temp&&=1;
&&&&if((y-y0)==size)
&&&&&y=y0;
//在指定位置开始显示一个字符串&&&&
//支持自动换行
//(x,y):起始坐标
//str& :字符串
//size :字体大小
//mode:0,非叠加方式;1,叠加方式&&&
//正点原子@HYW
//CHECK:09/10/30&&&&&
void Show_Str(u16 x,u16 y,u8*str,u8 size,u8 mode)
{&&&&&&&&&&&&& &&
&&& u8 bHz=0;&&&& //字符或者中文& &&&& &&&&&&& &&&&& &&
&&& while(*str!=0)//数据未结束
&&&&&&& if(!bHz)
&&&&&&&& if(*str&0x80)bHz=1;//中文
&&&&&&&& else&&&&&&&&&&&&& //字符
&&&&&&&& {&&&&&
&&&&&&&&&&&&&&& if(x&(LCD_W-size/2))//换行
&&&&{&&&&&&
&&&&&x=0;&&&
&&&&}&&&&&&&&&&
&&&&&&&&& if(y&(LCD_H-size))//越界返回&&&&&
&&&&&&&&& if(*str==13)//换行符号
&&&&&&&&& {&&&&&&&&
&&&&&&&&&&&&& y+=
&&&&&&&&&&&&& str++;
&&&&&&&&& }&
&&&&&&&&& else LCD_ShowChar(x,y,*str,size,mode);//有效部分写入
&&&&str++;
&&&&&&&&& x+=size/2; //字符,为全字的一半
&&&&&&&& }
&&&&&&& }else//中文
&&&&&&& {&&&&
&&&&&&&&&&& bHz=0;//有汉字库&&&
&&&&&&&&&&& if(x&(LCD_W-size))//换行
&&&&x=0;&&&
&&&&&&&& if(y&(LCD_H-size))//越界返回& &&&&&&&&&&
&&&&&&&& Show_Font(x,y,str,size,mode); //显示这个汉字,空心显示
&&&&&&&& str+=2;
&&&&&&&& x+=//下一个汉字偏移&&&&
&&&&&&& }&&&&&&
}& &&& &&&
//得到字符串的长度
//正点原子@HYW
//CHECK OK 091118
u16 my_strlen(u8*str)
&u16 len=0;
&while(*str!='\0')
//在str1后面加入str2
//正点原子@HYW
//CHECK OK 091118
void my_stradd(u8*str1,u8*str2)
&while(*str1!='\0')str1++;
&while(*str2!='\0')
&&*str1=*str2;
&*str1='\0';//加入结束符& &&
//在指定宽度的中间显示字符串
//如果字符长度超过了len,则用Show_Str显示
//len:指定要显示的宽度
//针对12*12字体!!!
void Show_Str_Mid(u16 x,u16 y,u8*str,u8 size,u8 len)
&u16 strlenth=0;
&& &strlenth=my_strlen(str);
&strlenth*=size/3;
&if(strlenth&len)Show_Str(x,y,str,size,1);
&&strlenth=(len-strlenth)/3;
&&&& Show_Str(strlenth+x,y,str,size,1);
原子哥,帮我看看哪里还需要改吧,实在是不知道怎么改了
主题帖子精华
金钱114248
在线时间853 小时
Mini板的扩展例程,就有显示24*24汉字的例子....
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
中级会员, 积分 228, 距离下一级还需 272 积分
在线时间0 小时
我看那个例程是显示了几个汉字的啊,我想要做一个24的字体库,像16的那样,毕竟7寸屏上16的字体太小了
主题帖子精华
金钱114248
在线时间853 小时
回复【3楼】 lixulongren :
---------------------------------
方法是一样的.
另外,论坛有人发过详细的字库制作方法,你可以参考下啊.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
Powered by}

我要回帖

更多关于 文件夹重命名不能汉字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信