网站颜色:

基于单片机控制的红外二极管感应计数器制作套件(带报警功能)

 基于单片机控制的红外二极管感应报警计数器(传感器+单片机)

设计:刘昆山

我们主张用万能板制作单片机产品,因为这种实践方法,不仅能锻炼焊接技术,同时还能提高识别单片机硬件电路图的能力,更重要的是掌握了单片机开发的基本步骤,提高了软硬件的编程与设计能力,为日后开发设计电子产品打下坚实的基础。

我们保证所有产品硬件电路正确,程序有效,调试成功,并且我们都成功制作过。

一、电路设计功能介绍

本作品是在学习单片机C语言应用的第三个实践作品的基础上改进来,可以作为课程设计使用。本作品由红外二极管感应电路和单片机控制的二位数码管显示、报警电路构成。当用手移到红外二极管后,红外二极管感应电路就会产生一个信号给单片机,单片机就控制数码管显示加1,同时发出报警声。

本实践作品的设计思路来源于企业的货物自动计数设备,当有货物从红外二极管前移动时,计数器自动加1。还有因交通需要,需要统计人流量的时候,如果安装此装置,就可以实现自动计数,当然数码管应该扩展到八位了。

随机赠送的程序:

1、二位数码管静态显示数字1(C语言程序)

2、数码管显示自动递增1(C语言程序)

3、二位数码管动态显示数字12(C语言程序)

4、数码管动态显示99秒计时器(C语言程序)

5、基于单片机控制的红外二极管感应计数器(C语言程序)

6、基于单片机控制的红外二极管感应减1计数器(带报警声)

7、基于单片机控制的红外二极管感应加1计数器(带报警声)

二、原理图

 

 

四、件清单及实物图

红外二极管感应报警计数器件列表

序号

名称

代号

规格

数量

备注

1

电阻

R1,R3,R7-R14

220

10

2

电阻

R2

30K

1

3

电阻

R4

10K

1

4

电阻

R6,R15-R17

1k

4

5

电位器

R5

10K

1

6

电解电容

C3

10UF

1

7

瓷片电容

C1,C2

104

2

8

瓷片电容

C4,C5

30PF

2

9

红外发射二极管

D1

5MM

1

10

红外接收二极管

D2

5MM

1

11

数码管

D3,D4

(咨询特价)共阳

2

12

三极管

V1-V3

(咨询特价)

3

13

轻触开关

K1

6X6X7

1

14

晶振

X1

12MHZ

1

15

牛脚座

J1

10P

1

16

集成运放

IC1

LM358

1

17

单片机芯片

IC2

AT(咨询特价)

1

18

蜂鸣器

Y2

5V有源

1

19

电池盒

3节5号电池

1

赠送品

20

万能板

(咨询特价)CM

1

21

IC

DIP8

1

22

IC紧锁座

DIP40P(绿色)

1

23

单排针

 

1*4PIN2.54mm

2

24

拖焊专用导线

0.5单股铜导线

2

25

焊锡

凯纳0.8,很好用

4

 

五、调试技巧及成品图

1、硬件电路焊接步骤

按照我们制作《单片机最小系统》的焊接步骤和工艺焊接,焊接振荡电路,ISP下载电路,复位电路、红外二极管感应输入电路、二位数码管显示输出电路,电源电路等单。店主焊接了6个小时,基本焊接完成。如下图所示:

 

首先用黑电胶布把红外发射管和红外接收管包好,只留下顶端,请参考实物图。

然后通上5V直流电压,用万用表测LM358的3脚电压,并用手放到红外发射管和红外接收管上面,造成红外接收管能接收反射的红外光,记下此时的电压值(我们制作的产品的电压值大概是1V左右)。然后拿开手后,再记下此时的电压值(我们制作的产品的电压值大概是3V左右)。

上面的调试步骤就是为了得到LM358的3脚电压值的变化范围,然后用万用表测LM358的2脚电压,调节可调电阻R3,使得LM358的2脚电压在2V左右(目的是处于LM358的3脚电压变化范围内)。

调试完成后,可以稳定的用手遮挡调试,性能非常稳定。特别说明,红外接收管对太阳光非常敏感,所以最好在阴暗处调试。

      2、把程序写入到单片机最小系统中进行调试

第一埠编辑源代码。通常使用Keil uVision4 编辑源程序,也就是用键盘把程序输入电脑。

参考程序如下:

//用LED数码管显示红外二极管感应计数器减1倒计数器

#include<reg51.h>   //包含51单片机寄存器定义的头文件

sbit S=P3^2 ;  //将S位定义为P3.2引脚,红外感应信号输入

sbit Spk=P2^2 ;  //将Spk位定义为P2.2引脚,控制蜂鸣器发声音

#define uchar unsigned char   //宏定义,用uchar重命名unsigned char

#define uint unsigned int  //宏定义,用uint重命名unsigned char

uchar Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段码表

uchar x;  //计数值定义为X

/******************************************************************

函数功能: 带参数延时约m*1ms

********************************************************************/

void delay(uint m)    //

{

 uint i,j;            //变量定义:数据类型 变量名

 for(i=0;i<m;i++)

  for(j=0;j<121;j++);//Fosc=12MHz   1ms  11.0592M

}

/******************************************************************

函数功能: 延时约0.6ms

********************************************************************/

 void delay06ms(void)     

 {

    uchar j;

    for(j=0;j<200;j++)

          ;

  }

 

/******************************************************************

函数功能:显示计数次数的子程序

入口参数:x

********************************************************************/

 void Display(unsigned char x)

{

    P2=0xfd;        //P2.1引脚输出低电片DS1点亮

    P0=Tab[x/10];   //显示十位

    delay06ms();      //延时0.6ms,让数码管显示一段时间

  P0=0XFF;   //数码管消隐

    P2=0xfe;      //P2.0引脚输出低电片DS0点亮

    P0=Tab[x%10];  //显示个位

    delay06ms();      //延时0.6ms,让数码管显示一段时间

  P0=0XFF; //数码管消隐

 }

/*******************************************

函数功能:主函数

******************************************/

void main(void)

  {

   EA=1;   //开放总中断

   EX0=1;  //允许使用外中断

   IT0=1;  //选择负跳变来触发外中断

  x=99; //显示数字初始值99

     while(1)

    Display(x); //调用数码管显示函数

   

 }

/**************************************************************

函数功能:外中断T0的中断服务程序

**************************************************************/

void int0(void) interrupt 0 using 0 //外中断0的中断编号为0

{

     delay(20);   //延时20ms

     if(!INT0)   //判断外中断标志是否为低,为低就跳出,为高就进入下面的语句。

     {

     x--;    //计数值减1    

     while(!INT0)Display(x);  //等待红外反射消失后,否则一直运行显示函数            

     Spk=0;              //红外反射消失后,蜂鸣器发声

     delay(15);  //延时15ms后,也就是让蜂鸣器发声15ms

     Spk=1;     //关闭蜂鸣器

     if(x==0)   //判断计数值是否减到0

      x=99;       //当计数值减到0,赋初值99

     }

}

第二埠使用Keil uVision4编译源代码,并生成目标程序代码。

第三埠单片机芯片的烧写。

用本店提供的USB接口的ISP下载线,USB接口接计算机,另一头接在单片机作品的牛角座上。打开本店提供的ISP下载软件progisp.exe,progisp.exe主要作用是ISP下载线控制单片机作品和计算机通讯,并把目标程序代码通过ISP下载线写入到单片机芯片中。

第四埠程序下载完成后,立刻就可以观察结果,用手感应红外二极管,每感应一次,数码管显示数字加1。

3、可能出现的故障分析

正常情况下,接上电源(或者插上了USB接口的ISP下载线)后都可以正常观测到每感应一次,数码管显示数字加1。,如果没有,那我们应该从下面几个步骤来检测:

第一铂用万用表检测电源是否接通,主要是看看40脚和20脚之间是否有5V电压。

第二铂检测第31引脚,是否有5V电源,目的是确保使用了片内存储器。

第三埠检测P3口或P2口的空闲电压是否有5V电压,如果没有,说明单片机系统没有工作。

第四埠用万用表检测复位电路,通过复位按键,检测第9脚的电压是否会变化。如果按键没有按下,电压为0V,按键按下后,电压立刻变为5V,之后很快的降为0V,则表示复位电路正常。

第五铂用示波器检测振荡电路,主要是检测第18、19脚。检测是否有振荡波产生。如果有,表示振荡电路正常。这步主要检查线路是否正确,器件一般不会有任何问题。

最后,检测每条PCB板上的焊接走线是否有短路、断路、虚焊等焊接故障,一定要确保焊接走线正常导电,初学者是最容易犯这个错误的。

单片机技术是一门实践性很强的应用性技术,需要硬件+软件同时支持。所以单片机的学习必须做到理论实践。我们提倡的“边学边做”的自学方法就是把理论与实践结合起来了,理论融入到实践中,学一个知识点、做一次产品、编一次程序、总结一次学习成果,不需要死记理论知识。

六、赠送资料说明

1、购买本单片机套件,我们将赠送:

(1)单片机仿真软件:proteus_pro_7.8_sp2;

(2)单片机程序编辑平台:Keil_V9.00_C51,也就是我们常用的Keil uVision4;

(3)单片机ISP下载线专用软件:progisp168;

(4)以及和本制作有关的文档单片机C语言源程序。

我们店铺提供的资料,已经全部存放在百度云盘或者360云盘。拍下后,我们将下载地址和密码发送到您的邮件上。请自行下载,下载速度很快。

2、如果您有特别要求,请留下您的QQ、QQ邮箱等方尸我们将下载地址和密码发到您留下的方式上,请注意查收。

3、当然,如果您已经注册了百度云盘的帐号(百度公司提供,2T的大小,完全免费使用,性能稳定,注册地址:http://picimg.witcp.com/pic/yun.baidu.com),就可以直接将资料永久保存在自己的帐号里,方便以后的下载,或者随时发给你的朋友们。因此站长强烈推荐大家注册百度云的帐号,这也是一个发展趋势,方便了学习,提高了效率。

更多套件选购地址:

店铺《科普电子制作》http://picimg.witcp.com/pic/jiaoshi8.taobao.com

学习服务中心热门设计联盟服务商