用 AVR 计算七段数字

Posted

技术标签:

【中文标题】用 AVR 计算七段数字【英文标题】:Counting number on the seven segment with AVR 【发布时间】:2022-01-13 19:11:13 【问题描述】:

我为我的 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];

【问题讨论】:

请检查显示器的所有部分是否连接到正确的端口引脚。看起来好像你的显示器是自下而上的,段“a”应该连接到 PA7。 -- 其他数字可能只是偶然看起来是正确的。 我检查了连接,它们与我的程序代码匹配。我觉得我的代码中存在一些导致问题的问题。 您的代码看起来正确,我什至检查了Codes[] 的模式。段“a”为 PA7,“b”为 PA6,依此类推,直到“g”为 PA1。不幸的是,显示部分没有显示引脚名称。 如果将Codes[]更改为0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0, 0, 0 ,您可以检查接线是否正确,并查看每个计数是否仅点亮一个段。顺序应该是“a”、“b”,以此类推到“g”。最后三个零只是为了使数组足够大。将段与this image 进行比较。 太好了,我们解决了您的问题。请通过tour 了解本站的运作方式,我建议标记我的答案。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于用 AVR 计算七段数字的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 和 Python 识别数字

使用 OpenCV 和 Python 识别数字

数字图像处理 使用opencv+python识别七段数码显示器的数字

怎么只用2个输入端控制数字七段数码管显示1~4?译码器用7448。可另外加门电路

对于七段数码数字模型进行改进:一个关键的数字1的问题

带有strftime的python Tkinter中的七段数字时钟与系统时间