設置 | 登錄 | 註冊

目前共有6篇帖子。

【成功的實驗】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歐的電阻

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。