查看: 1463|回复: 1

【瑞萨RA2系列开发板体验】SPI12864显示屏的驱动

[复制链接]

93

主题

136

帖子

8万

积分

管理员

11111

Rank: 9Rank: 9Rank: 9

积分
84476
QQ
发表于 2022-5-31 09:25:25 | 显示全部楼层 |阅读模式

【瑞萨RA2系列开发板体验】SPI12864显示屏的驱动

作者:马先生  


一、如我上一篇文章进行新建工程。
https://sq.ramcu.cn/forum.php?mod=viewthread&tid=131

二、本次使用我的SPI屏



屏与开发板的对应关系如下:
cs ---P301
RST ---P302
A0 ---P201
SDIN---P401
SCLK---P400

模拟SPI软件函数如下

  1. /*写指令到LCD模块*/
  2. void w_com_st12864(int data1)   
  3. {
  4.         char i;
  5.         cs=0;
  6.         rs=0;
  7.         for(i=0;i<8;i++)
  8.         {
  9.                 sclk=0;
  10.                 IF(data1&0x80) sid=1;
  11.                 else sid=0;
  12.                 sclk=1;
  13.                 data1<<=1;
  14.         }
  15.         cs=1;
  16. }

  17. /*写数据到LCD模块*/
  18. void w_data_st12864(int data1)
  19. {
  20.         char i;
  21.         cs=0;
  22.         rs=1;
  23.         for(i=0;i<8;i++)
  24.         {
  25.                 sclk=0;
  26.                 if(data1&0x80) sid=1;
  27.                 else sid=0;
  28.                 sclk=1;
  29.                 data1<<=1;
  30.         }
  31.         cs=1;
  32. }

复制代码


屏幕初始化函数
  1. /*LCD模块初始化*/
  2. void lcd_init_st12864()
  3. {
  4.         cs=0;
  5.           reset=0;        /*低电平复位*/
  6.           delay_st12864(500);
  7.           reset=1;                    /*复位完毕*/
  8.           delay_st12864(200);        
  9.         w_com_st12864(0xe2);  //软复位                          //1110 0010
  10.         delay_st12864(50);
  11.         w_com_st12864(0x2c);  //*升压步聚1                      //0010 1100
  12.         delay_st12864(50);        
  13.         w_com_st12864(0x2e);  //*升压步聚2                       //0010 1110
  14.         delay_st12864(50);
  15.         w_com_st12864(0x2f);  //*升压步聚3                       //0010 1111
  16.         delay_st12864(50);
  17.         w_com_st12864(0x25);  //*粗调对比度,可设置范围0x20~0x27   一开始显示字体,后马上白屏,调大后好了
  18.         w_com_st12864(0x81);  //*微调对比度
  19.         w_com_st12864(0x28);  //*0x28,微调对比度的值,可设置范围0x00~0x3f
  20.         w_com_st12864(0xa2);  //*1/9偏压比(bias)
  21.         w_com_st12864(0xc0);  //*行扫描顺序:从上到下0上下8下上
  22.         w_com_st12864(0xa1);  //*列扫描顺序:从左到右0左右1右左
  23.         w_com_st12864(0x40);  //*起始行:第一行开始//40第一行
  24.         w_com_st12864(0xaf);  /*开显示*/

  25. }
复制代码


显示中文字符函数,可以闪烁
  1. //显示16x16点阵图像、汉字。111111111111111111111111111111111111111
  2. //括号里的参数分别是(页,列,闪烁与否,反显与否,数据指针)
  3. void display_blink_16x16_st12864(uchar page,uchar column,uchar blink,uchar reverse,uchar *dp)
  4. {
  5.         uchar i,j,k,*data_temp;
  6.         if(blink==0)//判断闪烁
  7.         {
  8.                 data_temp=dp;//赋值
  9.                 for(j=0;j<2;j++)
  10.                 {
  11.                         lcd_address_st12864(page+j,column);//设置起始行
  12.                         for (i=0;i<16;i++)//输出16个字节循环
  13.                         {        
  14.                                 if(reverse==1)//判断是否反显
  15.                                 {
  16.                                         w_data_st12864(~*data_temp);  //数据取反后写入数据
  17.                                 }
  18.                                 else
  19.                                 {
  20.                                         w_data_st12864(*data_temp);    //写入数据
  21.                                 }
  22.                                 data_temp++;                          //字节自动+1
  23.                         }
  24.                 }
  25.         }
  26.         else
  27.         {
  28.                 for(k=0;k<10;k++)//闪烁
  29.                 {
  30.                         data_temp=dp;                                //赋值
  31.                         for(j=0;j<2;j++)                             //0上半字 1下半字
  32.                         {
  33.                                 lcd_address_st12864(page+j,column);          //设置起始行
  34.                                 for (i=0;i<16;i++)                   //输出16个字节循环
  35.                                 {        
  36.                                         w_data_st12864(~*data_temp);  //数据取反后写入数据
  37.                                         data_temp++;                 //字节自动+1
  38.                                 }
  39.                         }
  40.                         delay_st12864(2000);
  41.                         data_temp=dp;                                 //赋值
  42.                         for(j=0;j<2;j++)                              //0上半字 1下半字
  43.                         {
  44.                                 lcd_address_st12864(page+j,column);           //设置起始行
  45.                                 for (i=0;i<16;i++)                    //输出16个字节循环
  46.                                 {        
  47.                                         w_data_st12864(*data_temp);    //数据取反后写入数据
  48.                                         data_temp++;                  //字节自动+1
  49.                                 }
  50.                         }
  51.                         delay_st12864(2000);

  52.                    }
  53.         }
  54. }
复制代码



回复

使用道具 举报

3

主题

195

帖子

1218

积分

金牌会员

Rank: 6Rank: 6

积分
1218
发表于 2023-3-14 11:29:31 | 显示全部楼层

不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 93帖子:136精华:9

lugl

主题: 52帖子:150精华:1

xujiwei263

主题: 18帖子:87精华:0

Juggernaut

主题: 12帖子:118精华:0

books咦

主题: 11帖子:11精华:2
快速回复 返回顶部 返回列表