跪求一个 用stc12c系列 pca发送40khz 单片机 定时捕捉回波 的超声波测距 c语言程序

跪求一个 用stc12c系列 pca发送40khz 单片机 定时捕捉回波 的超声波测距 c语言程序,第1张

超声波的话我用的是X宝上的潮汕波模块,这里我写了一个超声波的头文件 我传给你好了,还有头文件上说明,应该能看懂的

传不来 文件 直接发给你好了。

/*

头文件说明:

本头文件有三个可以调用的函数

1.串口的初始化函数 UESC_UART_Init(uint band)

1)参数是设定的波特率,晶振是12MHz,建议设置为2400.

2)注意初始化后要简短延时。

2. UESC_UART_Putchar(char kkk)

该函数可以向上位机发送一个字节的数据,参数就是要发送的数据。

本函数是用到了中断,这样程序在接收数据的时候可以运行其他程序。

单片机通过串口接收到数据之后将8位的数据放在 date 的外部变量中,所以在主函数里可以直接 *** 作接收来的变量;

接收到数据后同时会将外部变量flag置位,以适应不同的应用场合。

注意: 使用到串口是 定时器1不能使用。

发送单个字符的时候记得加 ‘’ 将字符括起来。

记得将flag置一;

第二次修改的内容:

给初始化函数加了晶振的选择,传递的参数就是晶振的频率 12M的晶振就传递12

注意:该函数在12M 24M 24.576M测试搜通过。 但是11.0592死活不成功,不要问为什么,搞得好像我知道似的!

建议在调用之前建议先测试一下该晶振频率能否通过。

第二次修改的内容:

解决了部分晶振频率串口通信失败的问题,现在所有的晶振均测试通过。

同时加了字符串输出函数:UART_PutString(char *s) 参数就是要显示的字符串,记得用“”。

作者@Jack_kk

完成日期:2014_4_14

第一次修改时间:2014_5_13

第二次修改时间:2014_5_18

第三次修改时间:2014_5_19

*/

#include<reg51.h>

#include<stdio.h>

#include"UART.h"

char get_char

bit flag

unsigned char date

void UESC_UART_Init(uint band,double MHz)

{

TMOD|=0x20

TH1=256-(double)(MHz*2604)/band

TL1=TH1

SM0=0 //和下面的一条语句同时设定串口工作方式

SM1=1

REN=1 //允许串口接收

EA=1 //总中断

TR1=1 //定时器开始

ES=1 //开串口中断

}

void UESC_UART_Putchar(char kkk)

{

ES=0

SBUF=kkk

while(!TI)

TI=0

ES=1

}

void UART_PutString(char *s)

{

while(*s)

{

UESC_UART_Putchar(*s++)

}

}

/*

void UESC_UART_Getchar(void) //这个部分注释掉是因为 没有用到中断。

{

ES=0 //发送数据之前把串口关闭

// TI=1 //这里是发送一个字符串printf的用法,先关闭窗口中断,然后TI 好就是这样、

// puts(" Please input a letter")

// TI=0

while(!RI)

RI=0

get_char=SBUF

// TI=1

// printf("The letter you just input is ")

// TI=0

SBUF=get_char

while(!TI)

TI=0

ES=1

}

*/

错了,那是串口头文件 sorry

/*

********************头文件说明**********************

本头文件适用于HC-HR04超声波模块

经封装本头文件可以直接调用的函数是:

1.Ultrasound_Init();

初始化定时器0;

2.Get_time();

取得距离函数,返回值是距离,单位厘米,声速是240m/s时的测量结果。

示例:

Ultrasound_Init()

while(1)

{

dis=Get_time()

display(dis)

}

注意:

1.本头文件占用了定时器0,在主函数里面就不要在使用定时器0了;

2.调用本头文件之前记得修改IO口

3.测量周期建议在60ms以上。

作者@Jack_kk

时间:2014_5_14

*/

#include"Ultrasound.h"

#include<intrins.h>

#include<reg51.h>

sbit Echo=P3^2

sbit Trig=P1^0

void Delay15us() //@12.000MHz

{

unsigned char i

i = 42

while (--i)

}

void Ultrasound_Init()

{

TMOD|=0x09

TH0=TL0=0

ET0=1

TR0=1

EA=1

}

unsigned int Get_dis()

{

int timeout=20000

Trig=1

Delay15us()

Trig=0

while(!Echo&timeout)

timeout--

timeout=20000

while(Echo&timeout)

timeout--

timeout=TH0*256+TL0 //这里偷了一点懒,将变量防死机变量timeout作为了返回值

TH0=TL0=0

return timeout*0.024

}

stc15w404as是用STC专用的烧录软件stc-isp烧录程序的,就是只能烧录程序,却不能读取程序的。目前也没有第三方的读取程序的软件。而且,STC官方声明,目前STC15系列单片机还不能解密。所以,烧录的程序是不可能读取出来的。

即内部程序是不可能读出的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11340937.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存