專注電子技術(shù)學習與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

定時器中斷使用+數(shù)碼管動態(tài)顯示

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年01月15日   【字體:

TMD  樓上在裝修,叮叮咚咚的煩死了,腦袋有點暈,也不知道代碼寫的有問題沒,反正仿真是過了 

嗷嗷嗷  受不了了,樓上的動電轉(zhuǎn)了。。。 

 
先上圖

 

 
主要用到
EA:中斷總控制 1 開啟  0關(guān)閉
ET0 :定時器0溢出中斷 1開啟  0關(guān)閉

 
要點:中斷號計算


 
公式:中斷向量=8×中斷號+3
timer0為例   中斷向量=0x0b  (11十進制)   中斷號=(11-3)/8=1
中斷函數(shù): 
void timer0_interrupt() interrupt 1  //中斷號為1

中斷優(yōu)先級可以查書。

數(shù)碼管動態(tài)顯示就是用一組io口  顯示多個led數(shù)碼管   掃描頻率1~10ms

代碼如下:

#include <reg52.h>

typedef unsigned char uint8;
typedef unsigned int uint16;

uint8 flag=0;
uint16 i=0;
sbit led1=P1^6;
sbit led2=P1^7;
sbit bee=P1^5;

code uint8 ledcode[]={
0xC0,	// 0
0xF9,	// 1
0xA4,	// 2
0xB0,	// 3
0x99,	// 4
0x92,	// 5
0x82,	// 6
0xF8,	// 7
0x80,	// 8
0x90,	// 9
0x88,	// A
0x83,	// B
0xC6,	// C
0xA1,	// D
0x86,	// E
0x8E	// F
};

uint8 table[]={0,0};

void timer0_init()
{
TMOD|=0x01;	 //工作模式1
TMOD&=0xfd;
TH0=0xdc;	 //初始值  10ms ×100=1s
TL0=0x00;
TR0=1;
}

void intr_init()
{
ET0=1;	    //timer0中斷開啟
EA=1;	//總中斷開啟
}

void frush()	 //動態(tài)顯示數(shù)碼管  10ms掃描一次
{
static uint8 k=0;
switch (k)
{
case 0 :led1=0;led2=1;P2=ledcode[table[0]]; break;	//低位
case 1 :led2=0;led1=1;P2=ledcode[table[1]]; break;	//高位
}
k++;
if(k==2)
k=0;
}

void main()
{
   timer0_init();
   intr_init();
   led1=1;
   led2=1;
   while(1);
}

void timer0_interrupt() interrupt 1	//中斷函數(shù)
{	
static uint8 sec=0;
TH0=0xdc;
TL0=0x00;
frush();
if(flag==0)
{
i++;
if(i==100 )
{
i=0;
sec++;
table[0]=sec%10;
table[1]=sec/10%10;
if (sec==60)	  //到60秒
{
bee=0;
flag=1;
}
}	
}
}

仿真:


 

關(guān)閉窗口

相關(guān)文章