用 AVR 对七段数进行计数

Counting number on the seven segment with AVR

我已经为我的 At-mega 32 编写了一个程序,以便用两个触觉 s 将数字从 0 增加和减少到 9 以及反转(9 到 0)可以在图片中看到。

但问题是,虽然所有的数字都通过按这些键来显示,但只有数字 4 和 7 显示不正确!?。

我的七段而不是数字 4 演示了您在第一张图片中看到的内容,而数字 7 显示了您在第二张图片中看到的内容。

如果有人可以查看我在此处共享的代码和原理图并帮助我找到问题,我将不胜感激。

非常感谢,

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

uint8_t Codes[] = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6};

uint8_t count=0;
//temp=0

void display(uint8_t digit);
void config(void);

ISR(INT0_vect)
{
  if(count<9)
  {
    count++;
    display(count);
  } 
}

ISR(INT1_vect)
{
  if(count>0)
  {
    count--;
    display(count);
  } 
}

int main(void)
{
  config();

  while(1)
  {    
  }
}

void config(void)
{
  DDRA=0xFF;
  PORTA=0;
  cbi(DDRD,2);
  cbi(DDRD,3);
  sbi(PORTD,2);
  sbi(PORTD,3);

  GICR=(1<<INT1) | (1<<INT0);
  MCUCR=0; //low level sensitivity
  GIFR=(1 << INTF1) | (INTF0);
  sei();
}

void display(uint8_t digit)
{
  PORTA=Codes[digit];}

您的代码看起来是正确的,我什至检查了 Codes[] 的模式。

模式的每一位都分配给显示器的一个特定部分:

Port bit Segment
PA7 a
PA6 b
PA5 c
PA4 d
PA3 e
PA2 f
PA1 g

你的接线错误,不幸的是原理图没有显示显示器的引脚名称。好像倒过来了。