前面我们介绍过数码,七段数码管的本质是7个LED灯,也就是说和流水灯的操作方法没有两样,一般来说单数码管的使用仅仅是出学者学习过程中的一个测试性的程序,实用性并不大,但可以锻炼我们对字节数组的理解,以及单片机多管脚组合输出的理解。 这里我们使用的是ATMEGA16,外加了一个排阻。我们看到,PB7没有信号的变化,那是因为我们在设定字节数组是的编码决定了这我们没有给这个管脚输出过高电平。 我们可以把代码中的十六进制换成二进制,那样更加明显,如下代码 十六进制编码:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
unsigned char cseg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int main()
{
unsigned char i=0;
DDRB=0xFF;
while (1)
{
PORTB=cseg[i];
i=(i+1)%10;
_delay_ms(400);
}
return 0;
}
二进制编码:
unsigned char cseg[10]={0b00111111,0b00000110,0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b01111111,0b01101111};
int main()
{
unsigned char i=0;
DDRB=0xFF;
while (1)
{
PORTB=cseg[i];
i=(i+1)%10;
_delay_ms(400);
}
return 0;
}
从二进制的编码我们更容易看到哪个管脚输出的是高电平,点亮的是七段数码管的哪一段。
|