找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1541|回复: 0
收起左侧

CC2530超声波测距程序

[复制链接]
ID:557970 发表于 2019-12-15 13:53 | 显示全部楼层 |阅读模式
/**************************************/
/*描述:超声波HC-SR04实验
**************************************/
//如果使用彩屏,请定义此宏
#define OLED_1331
#include <ioCC2530.h>
#ifdef OLED_1331
#include "LCD1331.h"
#else
#include "LCD.h"
#define uint unsigned int
#define uchar unsigned char
#endif
//定义控制LED灯的端口
#define LED1   P1_0         //定义LED1为P10口控制
#define LED2   P1_1         //定义LED2为P11口控制
#define LED3   P1_4         //定义LED3为P14口控制
#define Trig P0_4 //产生脉冲引脚
#define Echo P0_5 //回波引脚

uchar TxBuff[15]={0};
void UartTX_Send_String(uchar *Data,int len);
void PrintfDistance();
//函数声明
void Delayms(uint);  //延时函数
void InitLed(void);  //初始化P1口
void KeyInit();                 //按键初始化
uchar KeyValue=0;
uchar outcomeH,outcomeL;   //记录产生中断时定时器1的计数值
uchar succeed_flag=0;  //测量成功标志  1:成功
/****************************
//延时函数
*****************************/
void Delayms(uint xms)   //i=xms 即延时i毫秒
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=587;j>0;j--);
}
void MicroWait( int timeout )
{
  while (timeout--)
  {
    asm("NOP");
    asm("NOP");
    asm("NOP");
  }
}
void delay_20us(void) //20 us延时
{
   MicroWait(20);
}
/****************************
LED初始化程序
*****************************/
void InitLed(void)
{
    P1DIR = 0x13;           //P10 P11 P14为输出
    LED1 = 1;       //LED1灯熄灭     
    LED2 = 1;       //LED2灯熄灭     
    LED3 = 1;       //LED3灯熄灭     
}
/****************************
KEY初始化程序--外部中断方式
*****************************/
void InitKey()
{
    P0IEN |= 0X2;  //P01设置为中断方式
    PICTL |= 0X2; // 下降沿触发   
    IEN1 |= 0X20;   // 允许P0口中断;
    P0IFG = 0x00;   // 初始化中断标志位
    EA = 1;
}
void initClkTo32M()
{
    CLKCONCMD &= ~0x40;                          //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                     //等待晶振稳定
    CLKCONCMD &= ~0x47;                          //设置系统主时钟频率为32MHZ
   
    //定时器使用32M时钟
    CLKCONCMD &= ~0x3F;
      
}
/****************************
      中断处理函数
*****************************/
#pragma vector = P0INT_VECTOR    //格式:#pragma vector = 中断向量,紧接着是中断处理程序
  __interrupt void P0_ISR(void)
{
    //P0_5产生中断
    if((P0IFG&0x20)==0x20)
    {
        IEN1 &=~0X20;   // 关闭P0口中断

        outcomeL =T1CNTL;    //取出定时器的值
        outcomeH =T1CNTH;    //取出定时器的值
        succeed_flag=1;   //置成功测量的标志  
        LED2=!LED2;
        LED1=1;
        
     //    UartTX_Send_String("P0_ISR\r\n", 7);
         PrintfDistance();
    }
    P0IFG = 0;             //清中断标志
    P0IF = 0;             //清中断标志
    LED3=!LED3;
}

部分代码;

28.超声波测距资料(HC-SR04).rar

647.6 KB, 下载次数: 37, 下载积分: 黑币 -5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表