-1

我已经为我的 At-mega 32 编写了一个程序,以便使用您在图片中看到的两个触觉开关女巫从 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];}

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

0

您的代码看起来正确,我什至检查了Codes[].

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

端口位 部分
PA7 一个
PA6 b
PA5 C
PA4 d
PA3 e
PA2 F
PA1 G

您的接线错误,不幸的是原理图没有显示显示器的引脚名称。好像它是颠倒的。

于 2021-12-10T08:57:47.240 回答