[AVR单片机]

帮忙看看哪里错了,数码管不亮,谢谢

[复制链接]
719|10
手机看帖
扫描二维码
随时随地手机跟帖
jiqh1976|  楼主 | 2016-11-25 20:06 | 显示全部楼层 |阅读模式
编程软件avr studio6.2,感觉是数组那一块不对,请指教,谢谢
#include <avr/io.h>
#include<avr/pgmspace.h>
#include <util/delay.h>
#define uint unsigned int
#define uchar unsigned char
#include<avr/interrupt.h>

PROGMEM const uchar flash[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int main(void)
{
       
        DDRG|=(1<<PG3);//段选
        DDRG|=(1<<PG4);//位选
        DDRB=0XFF;//数据
       
    while(1)
    {
     
            PORTG|=(1<<PG3);
               
            PORTB=pgm_read_byte(flash[9]);
            PORTG&=~(1<<PG3);
            PORTB=0XFF;
            PORTG|=(1<<PG4);
                PORTB=0xfe;
            PORTG&=~(1<<PG4);
            _delay_ms(2);
        
    }
}

相关帖子

xyz549040622| | 2016-11-25 21:40 | 显示全部楼层
1.数码管是如何驱动的呢
2.尝试都点亮试试,如果全不亮,证明是硬件的问题。然后再找软件的问题。
这么贴出一段代码,谁也没法分析的。

使用特权

评论回复
jiqh1976|  楼主 | 2016-11-26 10:04 | 显示全部楼层
如果把 PORTB=pgm_read_byte(flash[9])改成PORTB=(flash[9])数码管就亮了,谁有这方面的资料给个看看

使用特权

评论回复
jiqh1976|  楼主 | 2016-11-26 10:06 | 显示全部楼层
就是定义常量到flash区的,然后怎么使用,新手求指教

使用特权

评论回复
宇容创行| | 2016-11-26 17:15 | 显示全部楼层
先把io口调清楚吧

使用特权

评论回复
wangyy608| | 2016-11-26 17:49 | 显示全部楼层
jiqh1976 发表于 2016-11-26 10:04
如果把 PORTB=pgm_read_byte(flash[9])改成PORTB=(flash[9])数码管就亮了,谁有这方面的资料给个看看 ...

这里定义常量到FLASH直接使用就可以了,不需要pgm_read_byte,编译器会帮你完成中间过程。
pgm_read_byte(flash[9])字面上理解是读flash[9](你这里是0x6f)这个地址对应的值。显然你需要的值就是flash[9](你这里是0x6f),而不是flash中这个地址对应的值

使用特权

评论回复
jiqh1976|  楼主 | 2016-11-27 12:35 | 显示全部楼层
有点不大明白

使用特权

评论回复
jiqh1976|  楼主 | 2016-11-27 12:36 | 显示全部楼层
应该怎么写,还请指点,谢谢

使用特权

评论回复
jiqh1976|  楼主 | 2016-11-27 12:38 | 显示全部楼层
有这方面的程序发个看看也行

使用特权

评论回复
PORTB=pgm_read_byte(flash[9]);
你这个程序本来就有问题,实际情况就是PORTB=pgm_read_byte(0x6f);,
正确应该是这样的
PORTB=flash[pgm_read_byte(i)];   
其中,i对应你显示的数组单元,<16

使用特权

评论回复
风影冷雨夜| | 2016-11-28 22:45 | 显示全部楼层
要是能贴硬件电路图 更好分析

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

33

帖子

1

粉丝