7月 28

51单片机 超声波测距测试

我使用51单片机,超声波模块是hc-sr04。以前在raspberry上用python测的,这次因为需要转到51单片机上,所以用C语言重写,原理上基本一致。

#include 
#include 
typedef unsigned char uchar;
typedef unsigned int  uint;	
  

// 测试距离
uint S;
// 非中断用计时计数器
uint hcsr_count;
sbit Led = P1^5;
sbit Trig = P1^1;
sbit ECHO =P1^2;
sbit Led4 = P1^4;


// 超声波给20us的高电平
void delay_20us()
{
	uchar bt ;
	for(bt=0;bt<4;bt++);
}

main()
{
	uint count;
	uchar us50;
	Led = 0;
	Led4 = 0;
	Trig = 0;
	ECHO = 0;
	while(1)
	{
		hcsr_count = 0;
		// 开始20us的搞电平
		Trig = 1;
		delay_20us();
		Trig = 0;
		count = 0;
		//等待Echo回波引脚变高电平
		while(ECHO ==0 )  
		{
			_nop_();
		}
		// 开始接收
		while(ECHO == 1 )
		{
			for(us50=0;us50<10;us50++);
			hcsr_count++;
			// 如果获得范围大于两米
			// 则强制返回值
			if (hcsr_count >= 2357)
				ECHO = 1;
		}
		//算出来是CM。1.7 出处。 
		// 在空气中传播速度34000cm/s。
		// hcsr_count每次计数时间约为0.00005秒,既1/20000秒
		// 34000cm/s * (1/20000)s = 1.7cm/s
		// 统计出的为往返路程,除2后为单程
		S = (hcsr_count*1.7)/2;     //算出来是CM
		if(S < 20)
		{
			Led = 1;
		}																												   
		else if(S > 21)
		{
			Led = 0;
		}
	}
}

超声波测距源码

12月 25

PL2303 烧录 STC12C5A60S2单片机

  买了51最小的单片机和PL2303的烧录线。安装驱动没有问题,我安装在win7上操作。
  烧录程序过程:
  先安装驱动。先连好VCC(红线)、RXD(绿线)、TXD(白线)、GND(黑线),接好usb安装驱动。看到系统中有连接的com口。
image
  将红线拔掉,启动烧录程序。等到显示“仍在连接中, 请给 MCU 上电…”时将红线插上,就开始烧录了。
  如报错如下:

仍在连接中, 请给 MCU 上电…
MCU Type is: STC12C5A60S2
MCU Firmware Version: 6.2I
Chinese:MCU 固件版本号: 6.2I
下次冷启动后使用外部晶体或时钟
RESET pin 仍为 RESET
上电复位增加额外的复位延时振荡器放大增益: High gain
下次下载时 P1.0/P1.1 与下载无关
下次下载用户应用程序时将数据Flash区擦除: NO
P4.6/RESET2 用作 P4.6
启动内部看门狗后禁止改看门狗分频数 NO
下次上电自动用有关参数启动内部看门狗 NO
Idle(空闲)状态时内部看门狗停止计数 YES
冷启动后内部看门狗预分频数(未启动): 256
MCU Clock:11.07831MHz./时钟频率:11.07831M.
Chinese:正在重新连接 …
Connection failed. / 握手失败 (End: 12:03:54)

  解决方案需要将波特率都改为9600即可,如图。

PL2303烧录STC12C5A60S2单片机

PL2303烧录STC12C5A60S2单片机

  还需要注意两个地方。一、STC-ISP烧录软件使用管理员权限启动。二,烧录的时候不要给板子加电。芯片只连PL2303线即可。