?? pulse_time.c
字號(hào):
/******************************************/
/* 廣州天河雙龍電子公司 */
/* http://www.sl.com.cn */
/* 測(cè)脈寬程序 */
/* 用跳線將PD6依次與PA0~PA7相連 */
/* 作者:lpf@sl.com.cn */
/* 2003年8月28日 */
/* 目標(biāo)MCU:MEGA16 晶振:外部(EXT) 8MHZ */
/******************************************/
#include<iom16v.h>
#pragma interrupt_handler Icp_timer1:6
//ICP中斷入口地址
#pragma interrupt_handler Timer0:10
//定時(shí)器T0中斷入口地址
#pragma data:code
//設(shè)置數(shù)據(jù)區(qū)為程序存儲(chǔ)器
//七段碼譯碼字形表
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ù)存儲(chǔ)器
unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//顯示緩沖區(qū)
unsigned int oldcount;
unsigned int newcount;
unsigned char i=0;
//1MS延時(shí)程序
void delay_1ms()
{
unsigned int i;
for(i=1;i<1142;i++);
}
//六路動(dòng)態(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十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為L(zhǎng)ED七段碼
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;
}
//主程序:測(cè)量ICP引腳上信號(hào)的周期
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;//在PA口產(chǎn)生頻率不同的方波
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -