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;
		}
	}
}

超声波测距源码

1月 30

手工制作51单片机 电子表

  家里小孩老是乱调表,本来打算做个没有外部按键的表,但是后来觉得还是难度太大,还是搞个简单的吧。
  开始准备材料。亚克力板、杜邦线、51单片机配件一套(晶振使用12M的)、STC12C5A60S2一块、s8050三极管5个,电池盒一个、共阴极带时间点数码管一个,5X7cm洞洞板一块,按钮两个,M3铜柱螺丝若干。材料准备完毕。

部件准备

部件准备


  开始手工切割亚克力板并钻孔。由于疏忽把前面的板子也钻上空了。郁闷。
手工制作51单片机电子表,切割亚克力板

手工制作51单片机电子表,切割亚克力板


  首先将51单片机,和面板焊好。
手工制作51单片机电子表,初步组装

手工制作51单片机电子表,初步组装


  接线的工作比较麻烦,线千万不能接错,要不就混乱了,不是直接插拔的比较麻烦。花了一个晚上才搞定。
手工制作51单片机电子表,线路焊接

手工制作51单片机电子表,线路焊接


  开始组装,组装完毕发现一个数码管不亮,回头还是要查查。
手工制作51单片机电子表,组装完成

手工制作51单片机电子表,组装完成


  调整好时间,给大家看看。郁闷了,大部分人都认为我这个是“定时炸弹的引爆装置”。
  源代码比较简单。可下载51单片机电子表源码