目前共有6篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:港澳繁體▼
 
點擊 回復
995 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)
 

本帖信息

點擊數:995 回複數:5
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2014-10-1 08:41
 
©2010-2025 Purasbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。