mega16 超声波接收问题

2019-03-24 20:43发布

以下是我的超声波程序,无论怎么弄都接收不了。请各大神帮忙挖掘错误?谢谢!(小弟是初学者)
#define F_CPU 1000000UL
#include<avr/io.h>
#include<util/delay.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
const char table[]="L=  . cm";  //整数部分显示三位,小数部分显示两位
const char table1[10]={"0123456789"};
uchar ge,shi,bai;//自定义寄存器
#define RS_1 PORTA |=(1<<PA5)
#define RS_0 PORTA &=~(1<<PA5)
#define RW_1 PORTA|=(1<<PA6)
#define RW_0 PORTA &=~(1<<PA6)
#define EN_1 PORTA|=(1<<PA7)
#define EN_0 PORTA &=~(1<<PA7)
#define TX_0 PORTD&=~(1<<PD5) //超声波模块控制端口定义
#define TX_1 PORTD|=(1<<PD5)
uint temp1,temp2;
uint t;//时间变量
uint s=0;//距离变量
uchar count =0;//溢出标志位

/////////////////写指令////////////////////
void write_com(uchar com)
{
_delay_ms(20); //忙则等待
  RS_0;
  RW_0;
    EN_1;
  PORTC= com;
  _delay_ms(20);
  EN_0;
}
/////////写数据/////////////
void write_dat(uchar dat)
{
_delay_ms(20);//忙则等待
  RS_1;
  RW_0;
    EN_1;
  PORTC= dat;
  _delay_ms(20);
  EN_0;
}
////////写显示///////////
void write_char()
{     

    write_com(0x80 + 0x02);
      write_dat(table1[bai]);
     _delay_ms(5);
   write_com(0x80 + 0x03);
      write_dat(table1[shi]);
    _delay_ms(5);
   write_com(0x80 + 0x05);
    write_dat(table1[ge]);
     _delay_ms(5);
}
/////////////清屏///////
void clear()
{
write_com(0x01);
_delay_ms(20);
}
////////1602的初始化/////////
void lcd_init( const char b[])
{uchar i;
   write_com(0x38);    //显示模式设置
   _delay_ms(10);
   write_com(0x38);
    _delay_ms(10);
   write_com(0x38);
    _delay_ms(10);
   write_com(0x38);  
   write_com(0x08);   // 显示关闭
   write_com(0x01);    //显示清屏
   write_com(0x06);    //显示光标移动设置
   _delay_ms(20);
   write_com(0x0C);    //显示开及光标设置
for(i=0;i<8;i++)
{
write_dat(b);         //显示"L=  . cm"
    _delay_ms(5);
     }
}
void Conut(void)
{
   s=t*1.7;
     bai=s/100;
  shi=s%100/10;
  ge=s%1000%10;

}

void icp_init()
{
  DDRB=0XFF;
  PORTB=0XFF;
  _delay_ms(60);
  PORTB=0X00;
TCCR1A = 0x00;  
TCNT1  = 0x00;  
TCCR1B=0xC2;//输入捕获上升沿触发,8分频
TIMSK=0x20;//打开输入捕捉器中断使能
//SREG |=0x80;
}
void StartModule()//启动模块
{
TX_1;//启动一次模块
  _delay_us(20);

TX_0;
_delay_us(20);

write_char();
}
void port_init()
{
   DDRC=0XFF; //io口A设为输出
DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);
   DDRD|=(1<<PD7);
   DDRD&=~(1<<PD6);
}
int main()
{
  
  port_init();
  lcd_init(table);//初始化
  _delay_ms(30);
   icp_init();
  while(1)
  {  
  StartModule();
  Conut() ;  //计算
  _delay_ms(100);  //80MS
  }
}
ISR(TIMER1_CAPT_vect) //数 字1  
{  
   count++;
   switch(count)
   {
    case 1:
temp1=ICR1;
TCCR1B=0x82;
break;

case 2:
temp2=ICR1;
TCCR1B=0xC2;
if(temp2>=temp1) t=temp2-temp1;
    else t=65536-temp1+temp2;
count=0;  
break;
default: ;
   }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
tiankai001
2019-03-24 23:43
确定一下是接收程序没收到,还是液晶显示的问题

一周热门 更多>