其他程序运行时不这样,求大神答疑。
程序
#include <mega16.h>
#define figuer 2
#include <NOKIA5110.h>
unsigned char disbuffer[2][figuer];
unsigned char num;
//数据送达缓冲区函数
void data_to_disbuffer(unsigned long data,unsigned char vaf)
{
unsigned char i;
for(i=0;i<figuer;i++)
{
disbuffer[vaf][figuer-1-i]=data%10;
data/=10;
}
}
//显示函数
void display(void)
{
LCD_write_english_string(0,0,"height:");
LCD_write_data(0,1,disbuffer[0]);
}
//
tiMER_0比较匹配中断
interrupt [TIM0_COMP] void Timer0 (void)
{
if(num++==7)
TCCR0=0x00; //关闭Timer0,超声波发送完成
}
//TIMER_1事件触发中断
interrupt[TIM1_CAPT] void Timer1_capt_sir1 (void)
{
unsigned char time_l,time_h,height;
unsigned int time;
time_l=ICR1L;
time_h=ICR1H; //收到超声波信号的时间
//TCCR1B=0x00; //关闭Timer1
time=(time_h<<8+time_l);//收发时间差
height=time*18/4000; //距离
data_to_disbuffer(height,0);//升高数据送达缓冲区
display();
}
void main (void)
{
DDRD=0x3F;
DDRB=0xFF;
LCD_init();
TCCR1B|=(1<<ICNC1)|(1<<ICES1)|(1<<CS10);//timer1输入捕捉上升沿触发,启用噪声抑制器 、系统时钟源
TIMSK|=(1<<TICIE1);//允许输入捕捉中断
TCCR0|=(1<<WGM01)|(1<<COM00)|(1<<CS00); //timer0 CTC模式、比较匹配时触发OC0、系统时钟
OCR0=0x32; //50个时钟翻转一次、40kHz
TIMSK|=(1<<OCIE0); //允许timer0比较匹配中断
#asm("sei")
}
-
一周热门 更多>