打印
[编程]

请求各位帮忙看下是什么问题,谢谢大家

[复制链接]
3046|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ljkkiller|  楼主 | 2016-11-24 14:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟今日课程设计需要做一个基于atmega48测距数码管显示系统,使用hcsr04超声波,但是怎么搞都只能测到50厘米,求大家帮忙看看
#include "iom48v.h"
#include <macros.h>
const unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char ledbuf[]={0xFF,0xFF,0xFF,0xFF};
unsigned char flag,k=0; //显示刷新标志
unsigned int x=2016 ;
// 定时器1的初始化,CTC模式,8分频
void disp_init(void) {
TCCR0A = 0x02;
TCCR0B = 0x02;
OCR0A = 255;


TIMSK0 = 0x02;/*比较中断A允许*/
TIFR0 = 0x02;
}
// 中断服务程序的功能:刷新段码与位控制,用变量K实现轮流刷新的目的
#pragma interrupt_handler Int_TCCR0A: 15
void Int_TCCR0A(void) {
flag = 1;
k=(++k)%4;
PORTC |= 0x0F;//关位选
PORTD = ledbuf[k];//传送数据位
switch(k){
case 0:
PORTC = ~0x01;//显示千位
break;
case 1:
PORTC = ~0x02;//显示百位
break;
case 2:
PORTC = ~0x04;//显示十位
break;
case 3:
PORTC = ~0x08;//显示个位
break;
default: ;
}
}


/*IO口初始化函数*/
void io_init(void) {
DDRB=0b11111101;
PORTB=0b11111110;
DDRC = 0x0F;
PORTC = 0x0F;
DDRD = 0xFF;
PORTD = 0xFF;
}


//ms级延时函数
void delay_ms(int i) {
unsigned int b;
unsigned int a;
for (a = 1; a < i; a++)
for (b = 1; b < 1141; b++) ;
}
//us级延时函数
void delay_us(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++);
//delay_1us();
}
/*十六进制数转十进制段码函数*/
void decode(unsigned int b) {
ledbuf[3]=disp[b%10]; b=b/10;
ledbuf[2]=disp[b%10]; b=b/10;
ledbuf[1]=disp[b%10];
ledbuf[0]=disp[b/10];
//ledbuf[0] &= ~0x80; //加小数点
}


//测距程序
unsigned int distance_x(void)
{
//SREG = 0x00;
//unsigned int timeout=0;
unsigned long distance=0;
PORTB |=BIT(0);
delay_us(20);
PORTB &= ~BIT(0);
TCCR1A = 0x00;//模式:0
TCNT1 = 0;
while ((PINB & 0x02)==0) ;//PB1为0等待
TCCR1B = 0x01;//时钟:1分频
// timeout=0;
while (PINB & 0x02)
{
if(TCNT1>4000)
{
TCCR1B = 0x00;
return 60;
}
}
//TCCR1B = 0x00;
//if (TCNT1>11765) distance=200;
distance = (TCNT1-600)*17/1000;
//SREG |= 0x80;
return distance;
}


void main(void) {
io_init();/*初始化IO口*/
disp_init();/*初始显示部*/
SREG |= 0x80;
decode(x);
//while(1) ;
while (1) {
SREG = 0x00;
x=distance_x();
SREG |= 0x80;
decode(x);//Int_TCCR1A();
delay_ms(30);
//Int_TCCR1A();
}
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝