历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2018年09月29日 | STM32f4---TFTLCD显示实验代码(03)

2018-09-29 来源:eefocus

第十个要介绍的是字符显示函数LCD_ShowChar,该函数同前面OLED 模块的字符显示函数差不多,但是这里的字符显示函数多了1 个功能,就是可以以叠加方式显示,或者以非叠加方式显示。叠加方式显示多用于在显示的图片上再显示字符。非叠加方式一般用于普通的显示。

该函数实现代码如下:

//在指定位置显示一个字符

//x,y:起始坐标

//num:要显示的字符:" "--->"~"

//size:字体大小  12/16/24

//mode:叠加方式(1)还是非叠加方式(0)

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

{                    

     u8 temp,t1,t; u16 y0=y;

  u8 csize=(size/8+((size%8)?1:0))*(size/2);//得到字体一个字符对应点阵集所占的字节数

  //设置窗口        

  num=num-' ';//得到偏移后的值

  for(t=0;t

  {    

    if(size==12)temp=asc2_1206[num][t];        //调用 1206 字体

    else if(size==16)temp=asc2_1608[num][t];  //调用 1608 字体

    else if(size==24)temp=asc2_2412[num][t];  //调用 2412 字体

    else return;              //没有的字库

    for(t1=0;t1<8;t1++)

    {           

      if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);

      else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);

      temp<<=1;

      y++;

      if(y>=lcddev.height)return;    //超区域了

      if((y-y0)==size)

      {

        y=y0; x++;

        if(x>=lcddev.width)return;  //超区域了

        break;

      }

    }        

  }                 

}

在 LCD_ShowChar 函数里面,我们采用快速画点函数 LCD_Fast_DrawPoint 来画点显示字符,该函数同LCD_DrawPoint一样,只是带了颜色参数,且减少了函数调用的时间,详见本例程源码。该代码中我们用到了三个字符集点阵数据数组 asc2_2412、asc2_1206 和 asc2_1608,这几个字符集的点阵数据的提取方式,同十七章介绍的提取方法是一模一样的。详细请参考第十七章。  

最后,我们再介绍一下TFTLCD 模块的初始化函数LCD_Init,该函数先初始化STM32与TFTLCD 连接的 IO口,并配置 FSMC 控制器,然后读取 LCD 控制器的型号,根据控制 IC 的型号执行不同的初始化代码,其简化代码如下:

void LCD_Init(void)

{    

vu32 i=0;

   GPIO_InitTypeDef  GPIO_InitStructure;

FSMC_NORSRAMInitTypeDef    FSMC_NORSRAMInitStructure;

   FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;  

FSMC_NORSRAMTimingInitTypeDef  writeTiming;

 

   //  GPIO,FSMC 时钟使能

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD

|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG,  

ENABLE);//使能 PD,PE,PF,PG时钟   

   RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能 FSMC 时钟   

  

    //  GPIO 初始化设置

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;//PB15 推挽输出,控制背光

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式

   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化  //PB15 推挽输出,控制背光

  

   GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);

//PD0,1,4,5,8,9,10,14,15 AF OUT

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出

   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

   GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化   

  

   GPIO_InitStructure.GPIO_Pin = (0X1FF<<7);//PE7~15,AF OUT

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出

   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

   GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化   

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出

   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

   GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化   

 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;//PF12,FSMC_A6

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出

   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

   GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化  


推荐阅读

史海拾趣

Graseby Infrared公司的发展小趣事
检查控制线路的接线端子是否松动或腐蚀,导致接触电阻增大。
Aptiv公司的发展小趣事

随着数字化时代的到来,Aptiv积极拥抱数字化转型,通过引入先进的信息技术和管理系统,提升了企业的运营效率和市场竞争力。例如,公司向汽车行业某公司发出EDI对接邀请,计划通过EDI系统实现双方的数据共享和业务协同,从而提高了工作效率和下单准确性。这种数字化转型不仅有助于Aptiv在激烈的市场竞争中保持领先地位,还为整个电子行业的数字化转型提供了有益的借鉴和参考。

这五个故事展示了Aptiv公司在电子行业中的发展历程和成就,从技术创新到全球布局、创新合作、社会责任以及数字化转型等方面,都体现了公司的实力和担当。Aptiv以其卓越的技术实力和市场表现,成为了电子行业中一颗璀璨的明星。

ZTE高新兴(Gosuncn)公司的发展小趣事

随着自动驾驶技术的日益成熟,Aptiv开始加快全球布局的步伐。公司不仅在多个国家和地区设立了生产基地和研发中心,还与众多知名汽车厂商建立了紧密的合作关系。通过提供先进的自动驾驶解决方案和技术支持,Aptiv成功赢得了众多客户的信赖和认可,进一步扩大了在全球市场的份额。

Big-Sun Electronics Co Ltd公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,Big-Sun Electronics Co Ltd公司积极实施多元化战略。公司不仅继续深耕电子芯片领域,还逐步拓展至智能家居、物联网等新兴领域。通过产业转型和升级,Big-Sun成功实现了业务的多元化发展,为公司的可持续发展奠定了坚实基础。

Bogen Communications Inc公司的发展小趣事

在追求经济效益的同时,Bogen Communications Inc公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,努力降低产品对环境的影响。同时,公司还积极参与公益事业和慈善活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上这些故事都是基于电子行业常见的发展模式而虚构的示例,旨在为您展示一个电子行业公司可能经历的不同发展阶段和挑战。如果您需要更具体、更详细的信息关于Bogen Communications Inc公司的发展故事,建议您查阅相关的行业报告、公司年报或新闻报道。

HOPERF公司的发展小趣事

凭借卓越的产品性能和完善的解决方案,HOPERF的产品在多个领域得到了广泛应用。从户外运动、电子导航到工业测量、环境监测,再到医疗健康、智能家居等领域,HOPERF的产品几乎覆盖了人们生活的方方面面。公司不仅提供标准化的产品,还根据客户的实际需求提供个性化定制服务,极大地满足了市场的多样化需求。这种灵活多变的市场策略使得HOPERF在全球市场上迅速拓展,赢得了大量品牌客户的青睐和合作。

以上五个故事展示了HOPERF公司在电子行业中的发展历程和成就,充分体现了其在技术创新、产业链整合、全球化布局、质量控制以及市场拓展等方面的综合实力。

问答坊 | AI 解惑

帮我看看12864的读数据操作写得对不对

void LcdWriteData(unsigned char data) { CheckBusy();           //忙检查 DDRB=0xff;             //数据端口设置为输出 SET_RD;     ...…

查看全部问答>

寻找负载电路的设计

我有一个电路板,输出为直流24V,3A左右。现在想设计一个电路充当电路板负载的电路,实际应用中的负载为电磁阀和继电器。请教大师们有没有合适的电路推荐或者给点建议,先谢过。…

查看全部问答>

基于LPC和GPS的汽车防盗系统

想用NXP LPC1000来设计一个基于LPC1114和GPS的汽车防盗系统。…

查看全部问答>

求教debug 调试程序出现 has exited with code 0 (0x0).

第一次在开发板上测试就遇到这种奇怪问题... build 已经成功,在PPC2003模拟器上也运行正常,但是接到开发板上就出现问题,程序无法打开。 用网线联调 发现output 内容如下: Load module: /FlashDrv/My_PJtest/My_PJtest-armv4i-IngenicMedia (M ...…

查看全部问答>

1602a与计算器

怎样将万年历与计算器和为一体用液晶1602a单独的程序已编制好。…

查看全部问答>

关于KEIL的错误提示

我编译完程序后点击错误提示,正常情况下光标会跳到错误行哈,可我点击错误提示后跳出对话框说路径未找到,例如:“F:\\开发\\主程序\\D未能找到”。请教高手这个错误是怎么发生的啊?该如何改正啊?…

查看全部问答>

ST将在9月份在全国10个城市举办STM32的技术研讨会!最新消息

ST将在9月份在全国10个城市举办STM32的技术研讨会,这次研讨会的一个主要目的是对大家在使用STM32过程中的一些疑问进行解答和澄清。目前我们正在准备一些技术方面的文档,为了更广泛的满足大家的要求,在这里我请大家提出一些建议,包括:-你 ...…

查看全部问答>

请教音频输出用普通模拟电缆最远能传多远?

请教大家个问题,音频输出用普通模拟电缆最远能传多远?谢谢!…

查看全部问答>

msp430+拓普微液晶屏问题。

430能直接驱动拓普微LM320240型号的液晶屏吗?能的话怎么驱动呀,望能解答。。。谢谢!…

查看全部问答>

LPC1700 RTC应用

LPC1700 自带RTC,可以产生两种中断,一种是年、月、日、时、分、秒、周、一年中的第几天等的增值中断;另外一种是当前时间与报警时间相同时报警。   RTC的寄存器不多,定义如下:   // 中断位置寄存器(ILR-0x4002 4000)#define ...…

查看全部问答>