?? pulse_time._c
字號:
/******************************************/
/* 廣州天河雙龍電子公司 */
/* http://www.sl.com.cn */
/* 測脈寬程序 */
/* 用跳線將PD6依次與PA0~PA7相連 */
/* 作者:lpf@sl.com.cn */
/* 2003年8月28日 */
/* 目標MCU:MEGA16 晶振:外部(EXT) 8MHZ */
/******************************************/
#include<iom16v.h>
#pragma interrupt_handler Icp_timer1:6
//ICP中斷入口地址
#pragma interrupt_handler Timer0:10
//定時器T0中斷入口地址
#pragma data:code
//設(shè)置數(shù)據(jù)區(qū)為程序存儲器
//七段碼譯碼字形表
const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#pragma data:data
//設(shè)置數(shù)據(jù)區(qū)回到數(shù)據(jù)存儲器
unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//顯示緩沖區(qū)
unsigned int oldcount;
unsigned int newcount;
unsigned char i=0;
//1MS延時程序
void delay_1ms()
{
unsigned int i;
for(i=1;i<1142;i++);
}
//六路動態(tài)掃描顯示
void display()
{
unsigned char i;
for(i=0;i<6;i++)
{
PORTB=ledbuff[i];
PORTD=~(1<<i);
delay_1ms();
PORTD|=(1<<i);
}
}
//將COUNT十六進制數(shù)據(jù)轉(zhuǎn)換為LED七段碼
void hextobcd(unsigned int count)
{
unsigned char i,temp;
for(i=0;i<6;i++)
{
temp=count%10;
ledbuff[i]=table[temp];
count=count/10;
}
}
//MCU初始化
void mcu_init()
{
DDRA=0XFF;
PORTA=0XFF;
DDRD=0X3F;
DDRB=0XFF;
PORTD=0XFF;
PORTB=0XFF;//端口初始化
TIMSK=0X21;//使能ICP捕捉中斷;使能T/C0溢出中斷
TCCR0=0X02;
TCCR1A=0X00;
TCCR1B=0XC2;//8分頻;捕捉最小單位1us
TCNT0=0;
ICR1=0;
TCNT1=0;
}
//主程序:測量ICP引腳上信號的周期
void main()
{
mcu_init();
SREG|=0X80;
for(;;)
{
if((newcount&0xfff8)!=(oldcount&0xfff8))
{
oldcount=newcount;
}
hextobcd(oldcount);
display();
}
}
//捕捉中斷處理程序
void Icp_timer1()
{
newcount=ICR1;
ICR1=0;
TCNT1=0;
TCCR1B=0XC2;
}
//方波產(chǎn)生中斷程序
void Timer0()
{
i++;
PORTA=i;
//PORTA=~(PORTA);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -