原程序开发环境: 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)); //警告
}
}
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 编辑
警告 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 不知怎么改
switch(CurrentPageIndex); 把;去掉
去掉 switch(CurrentPageIndex);
错误依旧 (错误 案例标签只能在开关) 理解是 case 0:Disp_R(); break; 不能放在主程序里 不知是否
iar for avr 本身带有pgmspace.h 打开查找 没有pgm_read_byte 函数
网上查找到iar for avr 的pgmspace.h 有pgm_read_byte 函数 但是 加入 编辑 错误很多 不知怎么修改?
敬请老师指导 谢谢!