目前共有6篇帖子。 内容转换:不转换▼
 
点击 回复
956 5
【成功的实验】AVR单片机驱动2位【共阴】数码管
一派护法 十九级
1楼 发表于:2013-1-24 11:56

电路的连接:

1.数码管的段选全部接到PA口。(直接用导线连接,不用接电阻和三极管什么的)

2.数码管的位选接到PB0和PB1口。(仍然是直接用导线连接,哈哈这就是AVR单片机的优点)

一派护法 十九级
2楼 发表于:2013-1-24 11:56

程序如下:

#include <iom16v.h>
#include <macros.h>
unsigned char const Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码表
unsigned char int_time; //记录中断次数
unsigned char second; //秒
void delay(unsigned int k)
{
 unsigned int i,j;
 for (i=0;i<k;i++)
  for (j=0;j<1140;j++);
}
void DisplaySecond(unsigned char k)
{
 //显示十位
 PORTB=~BIT(0);
 PORTA=~Tab[k/10];
 delay(6);
 close_led();
 
 //显示个位
 PORTB=~BIT(1);
 PORTA=~Tab[k%10]+0x80;
 delay(6);
 close_led();
}
//关闭所有数码管
void close_led()
{
 //共阴要用0x00
 PORTA=0x00;
 PORTB=0x00;
}
//主函数
void main()
{
 //由于PD上有蜂鸣器,所以改用PB
 DDRA=0xff;
 DDRB=0xff;
 PORTA=0xff;
 PORTB=0xff;
 
 TCNT1H=0xF9; //设置初值的高8位
 TCNT1L=0xE6; //设置初值的低8位
 TCCR1A=0x00;
 TCCR1B=0x04; //定时器TC1 256分频
 TIMSK=0x04; //开TC1中断
 SREG=0x80; //开全局中断
 
 int_time=0; //中断次数初始化
 second=0; //秒初始化
 
 while (1)
 {
  DisplaySecond(second); //调用秒的显示子程序
 }
}

//定时器T0的中断服务程序
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr()
{
 TCNT1H=0xF9; //重装定时器初值高8位
 TCNT1L=0xE6; //重装定时器初值低8位
 
 int_time++; //每来一次中断,中断次数int_time自加1
 if (int_time==20) //够20次中断,即1秒钟进行一次检测结果采样
 {
  int_time=0; //中断次数清0
  second++; //秒加1
  if (second==100)
   second=0; //秒等于60就返回0
 }
}

一派护法 十九级
3楼 发表于:2013-1-24 12:00

虽然一开始是用的共阳数码管的段码表,但使用时取了反,就相当于在使用共阴数码管的段码表。

unsigned char const Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //共阳数码管段码表

PORTA=~Tab[k/10]; //取反了

 

可以直接在Tab数组中写共阴数码管的段码表,但我是复制的共阳数码管的段码表,懒得改,所以就直接在Tab[k/10]前面加~取反。

 

另外关闭数码管要用0x00,而不是0xff。0xff是共阳的才用的。

//关闭所有数码管
void close_led()
{
 //共阴要用0x00
 PORTA=0x00;
 PORTB=0x00;
}
每显示完一个数码管完成后要关闭所有数码管,否则就会出现红影

一派护法 十九级
4楼 发表于:2013-1-24 12:00

if (second==100)
   second=0; //秒等于60就返回0

这里的注释写错了,是等于100就返回0

一派护法 十九级
5楼 发表于:2013-1-24 13:08
因为是动态扫描,所以不管多少个数码管,功耗都相同(包括电流)
一派护法 十九级
6楼 发表于:2014-10-1 08:41
不过我还是建议在段选上串联200欧的电阻

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:956 回复数:5
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2014-10-1 08:41
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。