[求助] 原程序开发环境: AVRStudio 改为IAR for AVR 出现7个错误 3个警告 敬请指导

wang5825   2021-3-3 18:16 楼主

原程序开发环境: AVRStudio

  现在改为IAR for AVR  出现7个错误  3个警告      

敬请老师给予指导

#include <ioavr.h> 
#include "delay.h"
#define INT8U   unsigned char
#define INT16U  unsigned int
#define _BV(bit) (1 << (bit))

//按键定义
#define K1_DOWN() ((PINB & _BV(PB1)) == 0x00)   //前翻
#define K2_DOWN() ((PINB & _BV(PB4)) == 0x00)   //后翻
#define K3_DOWN() ((PINB & _BV(PB7)) == 0x00)   //自动刷新

//总画面数及当前画面页索引
INT8U MaxPage = 7, CurrentPageIndex = 0;
//控制是否继续显示下一幅图像的标识变量
enum {FALSE,TRUE} ShowNext = FALSE;

//12864LCD显示与屏幕测试相关函数
extern void LCD_Initialize(); 
extern void Ful1_Disp_ON_OFF(INT8U k); 
extern void Disp_Checker(INT8U k); 
extern void Disp_Frame(); 
extern void Disp_R(); 
extern void Disp_Clip(); 
extern void Disp_Picture();

//-----------------------------------------------------------------
// 按键扫描
//-----------------------------------------------------------------
void Scan_KEYs()
{
    if(K3_DOWN())           //开关合上时自动刷新
    {
        ShowNext = TRUE;
        if(++CurrentPageIndex == MaxPage) CurrentPageIndex = 0;
        _delay_ms(200);
    }
    else if(K1_DOWN())                       //前翻
    {
        ShowNext = TRUE;
        if(CurrentPageIndex > 0)
          CurrentPageIndex--;
        else
          CurrentPageIndex = MaxPage-1;
    }
    else if(K2_DOWN())                       //后翻
    {
        ShowNext = TRUE;
        if(++CurrentPageIndex == MaxPage) CurrentPageIndex = 0;
    }
    PORTA = ~_BV(CurrentPageIndex);      //刷新指示LED
}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
int main()
{
    DDRA = 0xFF;  PORTA = 0xFF;      //配置端口
    DDRB = 0x00;  PORTB = 0xFF;
    DDRD = 0xFF;
    LCD_Initialize();  _delay_ms(5); //液晶初始化
    Full_Disp_ON_OFF(0);             //全屏不显示                         警告
    _delay_ms(200);
    Full_Disp_ON_OFF(1);             //全显(形成全黑色屏幕)
    while(1)
    {
        Scan_KEYs();                 //键盘扫描
        if(ShowNext == TRUE)
        {
            switch(CurrentPageIndex);  
            {
                case 0:Disp_R(); break;            //R字符平铺画面          错误
                case 1:Disp_Frame(); break;        //方框                  错误
                case 2:Ful1_Disp_ON_OFF(1); break; //全显(形成全黑色屏幕)  错误 
                case 3:Ful1_Disp_ON_OFF(0); break; //全不显(底色屏幕)      错误
                case 4:Disp_Checker(1); break;     //正显棋板               错误
                case 5:Disp_Checker(0); break;     //反显棋板               错误
                case 6:Disp_Picture();  break;     //案例文件夹下的一幅图片  错误
            }
            ShowNext = FALSE;                                            //警告
        }
    }
}
//-----------------------------------------------------------------
// 显示案例文件夹下的一幅图片(代码与上一函数相同,区别仅在于使用了不同的点阵数组)
//-----------------------------------------------------------------
void Disp_Picture()
{
    INT8U i,j;
    Write_Command(LINE);         //设置显示起始行地址
    for(i=0; i<8; i++)           //全屏共输出8页
    {
        Write_Command(PAGE+i);    //选择第i页
        Write_Command(COL_H4);    //设置列地址高4位
        Write_Command(COL_L4);    //设置列地址低4位
        //用pgm_read_byte从程序Flash空间中读取点阵数据
        for(j=0; j<128; j++)      //每页显示128列,列地址自动递增
            Write_Data(pgm_read_byte(ICONs_Picture+i * 128+j));    //警告
    }
}

 

回复评论 (10)

错误呢?

默认摸鱼,再摸鱼。2022、9、28
点赞  2021-3-3 22:05

 

case 0:Disp_R(); break; //R字符平铺画面                                      错误  

case 1:Disp_Frame(); break; //方框                                                错误    

case 2:Ful1_Disp_ON_OFF(1); break; //全显(形成全黑色屏幕) 错误 

case 3:Ful1_Disp_ON_OFF(0); break; //全不显(底色屏幕)        错误    

case 4:Disp_Checker(1); break; //正显棋板                                    错误       

case 5:Disp_Checker(0); break; //反显棋板                                     错误

case 6:Disp_Picture(); break; //案例文件夹下的一幅图片                错误   

Error[Pe121]: a case label may only be used within a switch

错误[Pe121]:案例标签只能在开关

 

本帖最后由 wang5825 于 2021-3-4 11:30 编辑
点赞  2021-3-3 22:28

警告     Full_Disp_ON_OFF(0); //全屏不显示

            Warning[Pe223]: function "Full_Disp_ON_OFF" declared implicitly

            警告[Pe223]:函数“Full\u Disp\u ON\u OFF”隐式声明为

警告     ShowNext = FALSE;

           Warning[Pe111]: statement is unreachable   

            警告[Pe111]:语句无法访问

警告    Write_Data(pgm_read_byte(ICONs_Picture+i * 128+j));

            Warning[Pe223]: function "pgm_read_byte" declared implicitly 

            警告[Pe223]:隐式声明函数“pgm\u read\u byte”

            查找到函数  pgmspace.h  打开 没有 pgm_read_byte  不知怎么改

点赞  2021-3-3 22:39

switch(CurrentPageIndex); 把;去掉

点赞 (1) 2021-3-4 08:44

去掉      switch(CurrentPageIndex); 

     错误依旧     (错误  案例标签只能在开关)   理解是   case 0:Disp_R(); break;  不能放在主程序里   不知是否 

点赞 (1) 2021-3-4 09:10

楼主的问题解决了吗

玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2021-3-4 09:53

谢谢    初学者  问题没有解决! 

    原想在别人的程序中  学习  但是学习过程中  问题很多  网上查找  很多问题没有答案

点赞  2021-3-4 10:03

iar for avr  本身带有pgmspace.h  打开查找 没有pgm_read_byte  函数

    网上查找到iar for avr 的pgmspace.h   有pgm_read_byte  函数   但是 加入   编辑  错误很多  不知怎么修改?

   敬请老师指导   谢谢!

点赞  2021-3-4 10:10

switch(CurrentPageIndex); 把;去掉 是让你去掉分号,而不是去掉switch(CurrentPageIndex) 。。。

点赞  2021-3-4 20:49

非常感谢 指导!  

       现在只有一个错误  pgm_read_byte 函数

      iar for avr  本身带有pgmspace.h  打开查找 没有pgm_read_byte  函数

 

点赞  2021-3-4 22:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复