找回密码
 立即注册
查看: 352|回复: 4

用软件模拟I2C没问题,但用中断来做,会提示 different return types

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:36
  • 最近打卡:2025-05-03 08:39:25

6

主题

49

回帖

310

积分

中级会员

积分
310
发表于 2024-10-9 22:52:47 | 显示全部楼层 |阅读模式


用软件模拟I2C驱动OLED没有问题,但为什么换成中断后,会提示different return types。

主要是提示错误的这两个地方在用软件模拟时,没有任何问题。

而且中断服务程序是手册上的,理应不会有错的吧。 能帮忙看看吗?谢谢!


void OLED_ShowChar(u8 x,u8 y,u8 ch,u8 size)
{
        unsigned char c=0,i=0;
        c = ch - ' ';        //获取字符的偏移量
        if(x+size/2>127){x = 0; y = y+2;}//这里是判断x位置是否已经超过显示宽度,如果超过就到2页后
       
        if(size == 8)//判断是8*6的字符
        {
                OLED_Set_Pos(x,y);//设置开始位置为x,y(第一页)
                for(i=0;i<6;i++)//循环6个列数据,因为只需要一页,所以写完一页即可
                {
                        OLED_WR_Byte(F6X8[c][i],OLED_DATA);
                }
        }
        if(size == 16)//判断是16*8的字符
        {
                OLED_Set_Pos(x,y);//设置开始位置为x,y(第一页)
                for(i=0;i<8;i++)//循环8个列数据
                {
                        OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);//这里的C是偏移量,然后c*16是为了在数组里找到我们要的字符,i是数组第0-7的数据
                }
                        OLED_Set_Pos(x,y+1);        //因为这里的16*8的字符需要2页,设置第二页为开始位置
                for(i=0;i<8;i++)//这里是第二页的列数据循环
                {
                        OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);//这里出现了+8是因为我们数组的第8-15个数据
                }
        }
}




void I2C_sendData(u8 dat)
{
        I2CTXD = dat;                                //数据放入发送寄存器
        I2C_busy =1;
        I2CMSCR=0x82;                                //允许主机中断,且向I2CMSCR请求(0010)发送数据命令
        while(I2C_busy);
       
}





void OLED_WR_Byte(u8 dat,u8 cmd)
{
        I2C_Start();
        I2C_sendData(0x78);
        I2C_ACK();
        if(cmd)
                I2C_sendData(0x40);
        else
                I2C_sendData(0x00);
        I2C_ACK();
        I2C_sendData(dat);
        I2C_ACK();
        I2C_Stop();
}

截图202410092246468299.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:494
  • 最近打卡:2025-05-02 00:23:56

1

主题

114

回帖

1699

积分

金牌会员

积分
1699
发表于 2024-10-10 00:29:24 | 显示全部楼层
报错截图上面不是说了,你声明的是int OLED_ShowChar,实现确是void OLED_ShowChar,返回值类型不一致.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4851

回帖

8390

积分

超级版主

DebugLab

积分
8390
发表于 2024-10-10 08:14:39 | 显示全部楼层
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-03 00:18:42
已绑定手机

13

主题

1257

回帖

2979

积分

金牌会员

积分
2979
发表于 2024-10-10 09:19:43 | 显示全部楼层
jker*** 发表于 2024-10-10 00:29
报错截图上面不是说了,你声明的是int OLED_ShowChar,实现确是void OLED_ShowChar,返回值类型不一致. ...

应该是这个问题,声明的和定义的函数返回类型不一致。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-10-10 12:44:40 来自手机 | 显示全部楼层
应该是形参输入错误造成的吧!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 20:38 , Processed in 0.121877 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表