需要说明嵌入式程序中的代码

Bun头

我对嵌入式编程是完全陌生的,正在检查下面的代码并试图了解其工作原理,但我确实陷入了困境。

该程序用于计数和打印从0到9的数字。

那么有人可以解释一下这句话const uint8_t吗?为什么我在这里需要一个十六进制数的数组?

#include <avr/io.h>
#include <util/delay.h>
#include "debug.h"


const uint8_t segments[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xF6};

int main(void) {
    uint8_t i=0; //s
    int g; 
    init_debug_uart0();
    /* set PORT A pins as outputs */
    DDRA = 0xFF;
    for (;;) {

        PORTA = segments[i]; 
        printf("%d\n\r",i); 
        _delay_ms(1000);

        if (i >=9) {
            fprintf(stderr , "Count Overflow\n\r"); i = 0;
            scanf("%d", &g);
        }else 
            i++;
    }
}

最后一个问题,是否有人知道有关嵌入式编程的好资料?目前,我正在学习8位IIMatto处理器,它具有32个寄存器,采用哈佛架构设计,具有1级流水线。

chux-恢复莫妮卡

const uint8_t segments[10] = {0xFC,0x60,0xDA, ...简单定义字节的恒定的10字节的数组。

代码并不需要十六进制的数组,它可能是小数。

但是考虑一下的好处

0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xF6
// versus
252,96,218,...

偶然检查发现,每个字节中设置的位数为

6,2,5,5,...

这恰好与数字0、1、2、3的7段显示中设置的段数相匹配...
对位的更详细检查将详细说明哪个位激活了哪个段。

可以采用其他方法来获得7段到数字的映射,但是以十六进制显示数据比十进制小一个步骤。


也许代码可能像(正确的段映射是TBD)。

typedef enum  {
  LED7_a       = 1 << 0,
  LED7_b       = 1 << 1,
  LED7_c       = 1 << 2,
  LED7_d       = 1 << 3,
  LED7_e       = 1 << 4,
  LED7_f       = 1 << 5,
  LED7_g       = 1 << 6,
  LED7_dp      = 1 << 7
  } LED7_Segment_t;

/* ****************************************************************************
7 Segment Pattern
 Layout
  aaa
 f   b
 f   b
  ggg
 e   c
 e   c
  ddd dp
**************************************************************************** */
const uint8_t segments[] = {
  /*'0*/ LED7_a | LED7_b | LED7_c | LED7_d | LED7_e | LED7_f         ,
  /*'1*/          LED7_b | LED7_c                                    ,
  /*'2*/ LED7_a | LED7_b |          LED7_d | LED7_e |          LED7_g,
  /*'3*/ LED7_a | LED7_b | LED7_c | LED7_d |                   LED7_g,
  /*'4*/          LED7_b | LED7_c |                   LED7_f | LED7_g,
  /*'5*/ LED7_a |          LED7_c | LED7_d |          LED7_f | LED7_g,
  /*'6*/ LED7_a |          LED7_c | LED7_d | LED7_e | LED7_f | LED7_g,
  /*'7*/ LED7_a | LED7_b | LED7_c                                    ,
  /*'8*/ LED7_a | LED7_b | LED7_c | LED7_d | LED7_e | LED7_f | LED7_g,
  /*'9*/ LED7_a | LED7_b | LED7_c | LED7_d |          LED7_f | LED7_g};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章