用 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识别七段数码显示器的数字