3568|3

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AVR GCC flash数组读问题 [复制链接]

#include
#include "Port.h"


// 数码管是共阳极
// SEG线硬件连接方法定义(某位为 '1' 表示与数码管相对应的引脚相连)
#define         SEG_A                0x01
#define        SEG_B                0x02
#define        SEG_C                0x04
#define        SEG_D                0x08
#define        SEG_E                0x10
#define        SEG_F                0x20
#define        SEG_G                0x40
#define        SEG_Dot                0x80


// const unsigned char BitCnt[4] PROGMEM =  // 如果数据是这样定义的
const unsigned char BitCnt[4] =
{
        0,
        1,
        2,
        3
};

// const unsigned char DisplayData[] PROGMEM = // 如果数据是这样定义的
const unsigned char DisplayData[] =
{
        (SEG_A+SEG_B|SEG_C|SEG_D|SEG_E|SEG_F),                                // 0
        (SEG_B|SEG_C),                                                                                        // 1
        (SEG_A|SEG_B|SEG_D|SEG_E|SEG_G),                                        // 2
        (SEG_A|SEG_B|SEG_C|SEG_D|SEG_G),                                        // 3
        (SEG_B|SEG_C|SEG_F|SEG_G),                                                // 4
        (SEG_A|SEG_C|SEG_D|SEG_G|SEG_F),                                        // 5       
        (SEG_A|SEG_C|SEG_D|SEG_E|SEG_G|SEG_F),                                // 6       
        (SEG_A|SEG_B|SEG_C),                                                                        // 7
        (SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G),                                 // 8
        (SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G),                                // 9
        '\0',
        (SEG_A|SEG_F|SEG_G|SEG_C|SEG_D),                                        // S
        (SEG_A|SEG_F|SEG_G|SEG_E|SEG_D),                                        // E
        (SEG_F|SEG_E|SEG_D)               
};

// 显示缓冲区
unsigned char DisplayBuffer[4]=
{
        1, 2, 3, 4
};

void ShowLed(void)
{
        static unsigned char i;
        DISPLAY_BIT_CNT |= 0x0f;                                             // 消隐
         // 下面两条语句怎么处理??
        DISPLAY_LED = ~DisplayData[DisplayBuffer];      
        DISPLAY_BIT_CNT &= ~(1 << BitCnt[i++]);

        if (i >= 4)
        {
                  i = 0;
        }
}


最新回复

THS,已搞定。 代码如下: void ShowLed(void) {         static unsigned char i;         DISPLAY_BIT_CNT |= 0x0f;                                                                        // 消隐         //DISPLAY_LED = ~DisplayData[DisplayBuffer];         DISPLAY_LED = ~pgm_read_byte(DisplayData+DisplayBuffer);         //DISPLAY_BIT_CNT &= ~(1   详情 回复 发表于 2010-1-14 14:20
点赞 关注

回复
举报

95

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
通常需要copy到sram里面再做操作。
strcpy_P
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这样的语法没问题,无需读到RAM里面

你再看看是不是别的逻辑问题

比如那个i

把它声明到外面看看


 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
THS,已搞定。
代码如下:

void ShowLed(void)
{
        static unsigned char i;
        DISPLAY_BIT_CNT |= 0x0f;                                                                        // 消隐
        //DISPLAY_LED = ~DisplayData[DisplayBuffer];
        DISPLAY_LED = ~pgm_read_byte(DisplayData+DisplayBuffer);
        //DISPLAY_BIT_CNT &= ~(1 << BitCnt[i++]);
        DISPLAY_BIT_CNT &= ~(1 << pgm_read_byte(BitCnt+i));
        if (++i >= 4)
        {
                  i = 0;
        }
}
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表