历史上的今天
今天是:2025年01月21日(星期二)
2020年01月21日 | 基于AVR单片机实现超声波测距的程序编写
2020-01-21 来源:elecfans
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharint_flag;
uintqian,bai,shi,ge;
uinti;
floatdistance;
//AlphanumericLCDModulefuncTIons
#asm

.equ__lcd_port=0x18;PORTB
#endasm
#include
//ExternalInterrupt0servicerouTIne
interrupt[EXT_INT0]voidext_int0_isr(void)
{#asm("sei")
if(int_flag)
{
distance=i*17.3;
}
elseif(int_flag==0)
{
i=0;
int_flag=1;
TCCR0=0x0A;
}
}
//TImer0outputcompareinterruptservicerouTIne
interrupt[TIM0_COMP]voidtimer0_comp_isr(void)
{
i++;
}
//Declareyourglobalvariableshere
voidmain(void)
{
//Declareyourlocalvariableshere
//Input/OutputPortsinitialization
//PortAinitialization
//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In
//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T
PORTA=0x00;
DDRA=0x01;
//PortBinitialization
//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In
//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T
PORTB=0x00;
DDRB=0x00;
//PortCinitialization
//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In
//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T
PORTC=0x00;
DDRC=0x00;
//PortDinitialization
//Func7=InFunc6=InFunc5=InFunc4=InFunc3=InFunc2=InFunc1=InFunc0=In
//State7=TState6=TState5=TState4=TState3=TState2=TState1=TState0=T
PORTD=0x04;
DDRD=0x00;
//Timer/Counter0initialization
//Clocksource:SystemClock
//Clockvalue:2000.000kHz
//Mode:CTCtop=OCR0
//OC0output:Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0xc8;
//Timer/Counter1initialization
//Clocksource:SystemClock
//Clockvalue:Timer1Stopped
//Mode:Normaltop=FFFFh
//OC1Aoutput:Discon.
//OC1Boutput:Discon.
//NoiseCanceler:Off
//InputCaptureonFallingEdge
//Timer1OverflowInterrupt:Off
//InputCaptureInterrupt:Off
//CompareAMatchInterrupt:Off
//CompareBMatchInterrupt:Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
//Timer/Counter2initialization
//Clocksource:SystemClock
//Clockvalue:Timer2Stopped
//Mode:Normaltop=FFh
//OC2output:Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
//ExternalInterrupt(s)initialization
//INT0:On
//INT0Mode:Anychange
//INT1:Off
//INT2:Off
GICR|=0x40;
MCUCR=0x01;
MCUCSR=0x00;
GIFR=0x40;
//Timer(s)/Counter(s)Interrupt(s)initialization
TIMSK=0x02;
//AnalogComparatorinitialization
//AnalogComparator:Off
//AnalogComparatorInputCapturebyTimer/Counter1:Off
ACSR=0x80;
SFIOR=0x00;
//LCDmoduleinitialization
lcd_init(16);
//Globalenableinterrupts
#asm("sei")
PORTA.0=1;
delay_us(15);
PORTA.0=0;
while(1)
{
qian=(int)distance/1000;
bai=(int)distance00/100;
shi=(int)distance0/10;
ge=(int)distance;
lcd_gotoxy(0,0);
lcd_putchar(qian+48);
lcd_putchar(bai+48);
lcd_putchar(shi+48);
lcd_putchar(ge+48);
delay_ms(200);
PORTA.0=1;
delay_us(15);
PORTA.0=0;
int_flag=0;
};
}
史海拾趣
|
整个手机产业目前的状况似乎已经陷入一种以价格竞争的阶段,有点像电视机市场。手机好像已经不属于我们印象中的高科技产品,几百块钱的手机就已经具备很丰富的功能,如音乐、拍照、摄像、手写输入、超大的触摸屏,真令人不可思议。用Intersil公司中 ...… 查看全部问答> |
|
我用的是2450,要在某些时刻屏蔽外部中断0,5~13一共10个外部中断中的部分中断。 我想可能有两种方法吧(不知道是不是): 1.对中断寄存器操作; 2.调用API 对于第一种方法,我参考了一下三星的使用手册,知道关键是操作INTMASK寄存 ...… 查看全部问答> |
|
由于项目需要监测一些模拟量所以要用到ADC,这两天试了试LM3S8962的ADC功能,有一些收获,不敢独享和拿出来和大家分享。 ADC用于将连续变化的模拟电压转换成 ...… 查看全部问答> |
|
有没有兄弟遇到过相同的问题啊,jtag电路是和开发板上的一样,加了27欧电阻,TMS加了上拉电阻,其他信号线没上拉,h-jtag可以识别开发板的内核ID,但是无法识别自己做的板子的。后来在其他信号线上也加了上拉,还是无法识别。外部16M晶振起振,引脚 ...… 查看全部问答> |
|
能不能以CCSV4为例介绍一下如何计算一段代码的执行时间?CCSV4应该有自动计算某段代码执行时间的功能吧,但不知道怎么用,希望高手指点一下,最好给出截图,呵呵。… 查看全部问答> |
|
首先说这个电路是正常运行的,UC2844内部的误差放大器反相端直接接地,反馈直接接到了误差放大器的输出,常规的这种用法都是在COMP端加一个类似上拉电阻的形式,然后与光耦的副边串联,通过控制分压的值来反馈到COMP端,而这里是直接连到光耦的副边 ...… 查看全部问答> |
|
正点原子STM32战舰开发板(99新) 就上了几次电,我本人后面转fpga,dsp方向,就放置了,一直没有时间学习,最近看板子一直在吃灰,就拿来出了。 开发板*1,3.5寸液晶*1,JLINKV8*1,ENC28J60以太网络模块*1, 2.4G无线模块NRF24L01*2=========== ...… 查看全部问答> |




