📄 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
//设置数据区为程序存储器
//七段码译码字形表
const unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#pragma data:data
//设置数据区回到数据存储器
unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//显示缓冲区
unsigned int oldcount;
unsigned int newcount;
unsigned char i=0;
//1MS延时程序
void delay_1ms()
{
unsigned int i;
for(i=1;i<1142;i++);
}
//六路动态扫描显示
void display()
{
unsigned char i;
for(i=0;i<6;i++)
{
PORTB=ledbuff[i];
PORTD=~(1<<i);
delay_1ms();
PORTD|=(1<<i);
}
}
//将COUNT十六进制数据转换为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;
}
//方波产生中断程序
void Timer0()
{
i++;
PORTA=i;
//PORTA=~(PORTA);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -