欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

定時器中斷使用+數碼管動態顯示

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年01月15日   【字體:

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

嗷嗷嗷  受不了了,樓上的動電轉了。。。 

 
先上圖

 

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

 
要點:中斷號計算


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

中斷優先級可以查書。

數碼管動態顯示就是用一組io口  顯示多個led數碼管   掃描頻率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()	 //動態顯示數碼管  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	//中斷函數
{	
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;
}
}	
}
}

仿真:


 

關閉窗口

相關文章