[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+ AVR64DD32SPI驱动LCD19264显示屏

[复制链接]
 楼主| hu9jj 发表于 2022-11-22 16:10 | 显示全部楼层 |阅读模式
<
AN, AVR, CD, IO, LCD
#申请原创#

    最初打算启用硬件SPI来驱动LCD192*64显示屏的,用扩展卡做了一个LCD的接口板,下图为扩展卡的正面:


    但最后测试发现其中的飞线有误,我又不愿意拆除重焊飞线,索性修改原来的扩展板重新去打样,好在JLC仍有免费制版,下图为扩展卡的背面:


    收到PCB板后焊上排针母座,插上LCD显示屏,将驱动程序移植过来测试,屏幕毫无反映,通过逻辑分析仪抓取各引脚的时序查看,各引脚的信号基本完整,只是时钟太高了:


    LCD192*64的时钟频率大约是100K,而逻辑分析仪上清楚地显示为1M,需要降低SPI的速度:


    打开MCC配置,但速率为灰色的无法调整降低:


    所以只好放弃硬件SPI的测试,仍然使用软件SPI来驱动。通过调整,软件SPI的速度基本上满足要求:


    这是调试过程中的照片:


    至此,LCD192*64显示屏的驱动顺利完成:


    这是在主程序中调用的代码:
  1. int main(void)
  2. {
  3.     SYSTEM_Initialize();
  4. //    USART0_Enable();
  5.     printf("Hello World\r\n");

  6.     SW0_SetDigitalInput();
  7.     SW0_SetPullUp();
  8.     SW0_EnableInterruptForFallingEdge();         //设置引脚的中断模式
  9.     PF6_SetInterruptHandler(SW0_Handler);        //指定中断处理的函数

  10.     LCD_init();                                  //LCD初始化
  11.     display_main();
  12.    
  13.     TCA0_EnableInterrupt();
  14.     Led0_SetHigh();
  15.    
  16.     while(1)
  17.     {
  18.         printf("wait=%d\r\n",wait);
  19.         Led0_Toggle();
  20.         DELAY_milliseconds(wait);
  21.     }   
  22. }


    这是LCD初始化的代码:
  1. /*********************************************
  2. * 函数名称:LCD_init(void)
  3. * 函数功能:LCD19264初始化(含引脚配置)
  4. * 入口参数:无
  5. * 出口参数:无
  6. * 备注:
  7. *********************************************/
  8. void LCD_init(void)
  9. {
  10. //    uint8_t InitDat[9] = {0xE2, 0xA3, 0xEB, 0x2F, 0xC4, 0x81, 0xB4, 0xAF, 0xA6};
  11.    
  12.     CS_SetDigitalOutput();
  13.     DC_SetDigitalOutput();
  14.     RST_SetDigitalOutput();
  15.     IO_PA4_SetDigitalOutput();    //设置SCK端口模式
  16.     IO_PA6_SetDigitalOutput();    //设置MOSI端口模式
  17.    
  18.     RST_SetLow();
  19.     DELAY_milliseconds(100);      //延时,等待LCD工作正常
  20.     RST_SetHigh();
  21.     DELAY_milliseconds(100);
  22.    
  23.     CS_SetLow();                  //选择LCD
  24.    
  25.     WriteData(0xe2,0);            //显示屏复位指令
  26.     WriteData(0xa3,0);            //设置帧速率[A0: 76fps, A1b: 95fps, A2b: 132fps, A3b: 168fps(fps: frame-per-second)]
  27.     WriteData(0xeb,0);            //设置LCD偏置比(亮度设置)
  28.     WriteData(0x2f,0);            //显示屏功耗设置
  29.     WriteData(0xc4,0);            //设置LCD映射控制c2=正向,c4=反向
  30.     WriteData(0x81,0);            //设置SEG偏置电压(对比度) 双字节指令
  31.     WriteData(0xb4,0);            //设置SEG偏置电压(对比度) 双字节指令0xb4
  32.     WriteData(0xaf,0);            //开启显示指令
  33.         WriteData(0xa6,0);            //开启正常显示

  34.     CS_SetHigh();                 //取消片选
  35. }


    这是软件模拟硬件SPI的驱动代码:
  1. /*********************************************
  2. * 函数名称:WriteData(uint8_t,data,uint8_t C)
  3. * 函数功能:向LCD19264写入命令或显示数据)
  4. * 入口参数:uint8_t date(一字节命令或显示数据)
  5. *           uint8_t C(0=写入显示数据、1=写入命令)
  6. * 出口参数:无
  7. * 备注:
  8. *********************************************/
  9. void WriteData(unsigned char data, unsigned char C)
  10. {
  11.     volatile unsigned char i,dat; //i用于循环写入8位数据,dat用于缓存数据
  12.     SCK_0();                      //拉低时钟
  13.     if(1==C)                      //判断要写入的是指令还是数据
  14.         CD_1();                   //等于1 就是数据
  15.     else
  16.         CD_0();                   //等于0 就是指令

  17.     dat=data;                     //缓存数据
  18.     for(i=0; i<8; i++)            //循环发送8位数据
  19.     {
  20.         if((dat&0x80)==0x80)      //判断最高位是否为1
  21.             SDT_1();              //1 拉高总线写入1
  22.         else
  23.             SDT_0();              //0 拉低总线写入0
  24.         SCK_1();                  //产生一个时钟
  25.         DELAY_microseconds(1);
  26.         SCK_0();                  //时钟结束

  27.         dat<<=1;                  //左移一位 准备写入下一位
  28.     }
  29. }



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
guijial511 发表于 2022-11-22 18:24 来自手机 | 显示全部楼层
这种单色的12064现在很少用了
weifeng90 发表于 2022-11-22 18:43 来自手机 | 显示全部楼层
熟悉的洞洞板,以前打个板很贵,只有用洞洞板,现在打样很便宜了。
 楼主| hu9jj 发表于 2022-11-22 21:26 | 显示全部楼层
板子的边长控制在10cm之内,每月两次的免费优惠券,不用白不用。还得感谢嘉立创造福我们这些爱好者!
elsaflower 发表于 2022-12-1 18:46 | 显示全部楼层
这个屏幕自带汉字字库的吗?              
backlugin 发表于 2022-12-1 19:44 | 显示全部楼层
杜邦线搞起来,方便多了。              
abotomson 发表于 2022-12-1 21:16 | 显示全部楼层
为什么不使用oled呢?              
 楼主| hu9jj 发表于 2022-12-2 10:51 | 显示全部楼层
abotomson 发表于 2022-12-1 21:16
为什么不使用oled呢?

没有为什么,只因为手头上有现成的LCD192*64显示屏。
 楼主| hu9jj 发表于 2022-12-2 10:54 | 显示全部楼层
elsaflower 发表于 2022-12-1 18:46
这个屏幕自带汉字字库的吗?

自带字库的话价格就上去了,普通应用通常也不需要字符全集,根据自己的需要建一个子集就行。
eefas 发表于 2022-12-2 21:20 | 显示全部楼层
LCD19264的价格挺贵的吧。
 楼主| hu9jj 发表于 2022-12-3 08:21 | 显示全部楼层
eefas 发表于 2022-12-2 21:20
LCD19264的价格挺贵的吧。

不算贵,10元左右,有黑白或蓝白两种颜色。
olivem55arlowe 发表于 2022-12-3 14:00 | 显示全部楼层
楼主还自己打了一个pcb外设呢。
 楼主| hu9jj 发表于 2022-12-3 17:21 | 显示全部楼层
olivem55arlowe 发表于 2022-12-3 14:00
楼主还自己打了一个pcb外设呢。

是的,打样了一个扩展坞,方便评测。
chenci2013 发表于 2022-12-5 21:16 | 显示全部楼层
AVR64DD32SPI 的速度支持多少?
maqianqu 发表于 2022-12-6 13:26 | 显示全部楼层
模拟iic操作起来也简单很多的。
plsbackup 发表于 2023-1-5 18:04 | 显示全部楼层
推荐oled,这个好用很多。              
cemaj 发表于 2023-1-5 18:14 | 显示全部楼层
可以实现彩色的吗?              
pentruman 发表于 2023-1-6 16:52 | 显示全部楼层
硬件spi驱动的lcd?              
lzbf 发表于 2023-1-7 10:14 | 显示全部楼层
这个的驱动的速度太慢了,影响刷屏的速度的。
robincotton 发表于 2023-1-12 14:44 | 显示全部楼层
之前驱动其他lcd也不现实,最后是电流的原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部