基于单片机控制的红外二极管感应计数器制作套件(带报警功能)
基于单片机控制的红外二极管感应报警计数器(传感器+单片机)
设计:刘昆山
我们主张用万能板制作单片机产品,因为这种实践方法,不仅能锻炼焊接技术,同时还能提高识别单片机硬件电路图的能力,更重要的是掌握了单片机开发的基本步骤,提高了软硬件的编程与设计能力,为日后开发设计电子产品打下坚实的基础。
我们保证所有产品硬件电路正确,程序有效,调试成功,并且我们都成功制作过。
一、电路设计功能介绍
本作品是在学习单片机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