資源簡介
基于ATmega16單片機,利用單片機的定時器實現(xiàn)秒表功能。通過按鍵實現(xiàn)開始計時和復位功能。有PROTEUS7.5的原理圖。

代碼片段和文件信息
#include?
#include?
#define??uchar?unsigned?char
#define??uint??unsigned?int
uchar?const?SEG7[10]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};
uchar?const?ACT[8]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f};
uchar?num1=0num2=0flag;
//=========================
void?delay_ms(uint?k)//延時函數(shù)
{??uint?ij;
???for(i=0;i ???{
?????for(j=0;j<1140;j++);
???}
}
//======================
void?show(uint?juint?k)//數(shù)碼管顯示函數(shù)
{???
????PORTB=0xff;
PORTA=SEG7[j];
PORTB=ACT[k];
delay_ms(1);
}
//=======================
void?show_mark(uint?juint?k)//數(shù)碼管顯示小數(shù)點函數(shù)
{
????PORTB=0xff;
????PORTA=SEG7[j]|0x80;
PORTB=ACT[k];
delay_ms(1);
}
//=========================
void?port_init()//端口初始化函數(shù)
{
????PORTA?=?0x00;//段選
????DDRA??=?0xFF;
????PORTB?=?0xFF;//位選
????DDRB??=?0xFF;
DDRD=0x00;//開始和停止按鍵
PORTD=0xff;
}
//========================??
void?main()
{?
????uint?ijk;
????port_init();
TCCR1B=0X03;//64分頻
TCNT1H=0Xcf;//100ms定時初值
TCNT1L=0X2c;
TIMSK|=BIT(2);
MCUCR=0x0a;
GICR=0xc0;
SREG|=BIT(7);
while(1)
{
show(num1/101);? ????
show(num1%100);
show_mark(num2%102);
show(num2/103);
}
}
#pragma?interrupt_handler?miao:9//定時器1中斷,計數(shù)
void?miao()
{
????uint?i=0;
????TCNT1H=0Xcf;//重裝100ms定時初值
TCNT1L=0X2c;
if(flag==1)
{
???do{
???}while((++i)<10);
???num1++;
???????if(num1>59){num1=0;num2++;}
???if(num2>59){num2=0;}
????}
}
#pragma?interrupt_handler?int1_isr:3//INT1中斷,開始計數(shù)
void?int1_isr(void)
{
???flag=1;
}
#pragma?interrupt_handler?int0_isr:2//INT0中斷,停止,回到0
void?int0_isr(void)
{
??flag=0;
??num1=0;num2=0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????129806??2010-08-24?20:31??基于ATmega16單片機的定時器中斷秒表\定時器顯示時鐘實驗.DSN
?????文件???????1730??2010-08-24?20:30??基于ATmega16單片機的定時器中斷秒表\定時器顯示秒表實驗.c
?????目錄??????????0??2010-09-02?17:51??基于ATmega16單片機的定時器中斷秒表
-----------?---------??----------?-----??----
???????????????131536????????????????????3
- 上一篇:FLASH30秒學生作品
- 下一篇:微信小程序仿淘寶圖片輪播+視頻播放
評論
共有 條評論