基于单片机的光电计数器

一、设计题目:

基于单片机的光电计数器

二、设计要求:

1,数码管可以显示产品个数(0-99),自由设定产品报警个数(比如 ,10),当产品数目是10的个数时,发出报警(蜂鸣器响)。

2,独立设计电路,应包括单片机小系统、红外光电开关、数码管显  示部分。

摘  要

本文所设计的计数器抗干扰性好,可靠性高。可用于测量商场、电影院、博物馆、展览观、车站、码头、银行等公共场所的人员数量及人员流通数量,同时丝毫不会侵犯到被测人员的个人隐私。该产品应用广泛,常用于测量流水线上的产品的数量,以及可检查产品有无缺损。

本电路的指导思想是设计两电路光控电路,一路放置在门外,另一门放置在门内。当有人通过门口时(无论是进入或走出房间),都会先触发一个光控电路,再触发另一个光控电路,根据光控电路产生触发脉冲的先后顺序,判断来人是进入还是离开,当有人进入时令计数器进行加计数,当有人离开时令计数器进行减计数;要求计数器的最大计数容量是99人,并用数码管显示数字。

该系统具有结构简单、成本低廉、计数准确的特点,适用于本次设计的系统。该光电计数器只有两位数,如果二位数不满足需要也可通过级联可以扩展为四位,甚至多位。

关键词:单片机、外部中断、报警器

正  文

一、题目分析

本电路的指导思想是设计一电路光控电路,放置在流水线旁。当有产品通过光电门时,都会先触发光控电路,根据光控电路产生触发脉冲令计数器进行加计数,要求计数器的最大计数容量是99个,并用数码管显示数字。并在计数每次达到10时报警。

二、整体构思

系统的组成与结构:

图2-1 光电计数器系统结构图

整个光电计数器系统是由光电传感电路、AT89C52单片机系统电路、显示计数电路、报警电路五个部分组成的,如图2-1所示。光电传感电路把被计数的物体的变化转换成电信号,由显示计数电路计数,再由数码显示管显示,当达到设定的报警值时,报警电路发出报警。

三、具体实现:

1,光电开关

用开关模拟光电传感器采集外部信号。

2,复位电路

单片机小系统采用上电自动复位和手动按键复位两种方式实现系统的复位操作。上电复位要求接通电源后,自动实现复位操作。手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。其结构如图中R1、C3和K1。上电自动复位通过电容C1充电来实现。手动按键复位是通过按键将R3与VCC接通来实现。如图示两种复位方式:

图 上电复位电路              图手动复位电路

3,     中断方式计数:

由于光电技术电路需要在数码管上显示通过光电门的产品数量,因此可以在内部存储器空间定义它的显示缓存区,用来暂存数码管显示的当前值。

系统在初始化程序之中,设置外部中断0产生中断标志T0,并初始化值为0。当有外部中产生时,相应的中断置1。

当外部中断0产生中断时,在主程序中扫描T0是否为1。当T0为1时,调用光电计数子程序,将显示暂存变量加1,。每当通过光电门的产品数量达到10时,蜂鸣器响一声,并清零缓存,继续计数。

4, 显示部分:

该系统要求显示计数功能。基于上述原因,我们考虑了三种方案:

方案一:完全采用 LCD显示。完全采用 LCD显示可显示有限的符号和数码字苻,能满足设计的需要。

方案二:完全采用点阵式 LCD显示。这种方案实现复杂,且须完成大量的软件工作;但功能强大,可方便的显示各种英文字符,汉字,图形等,也可满足设计的需要。

方案三:采用 LED显示,LED只显示数字输出。这种方案既满足系统功能要求,又简单,成本有低。

权衡利弊,第三种方案的优缺点,我们决定采用方案三来实现数字显示。系统中采用的数码管为共阴极数码管,显示电路图的电路如图3-3所示。

图3-3显示电路图

5,报警部分:

当计数器计数到"00"时应使计数器复位并置数"99"。但这时将不会显示"00",而计数器从"01"直接复位。由于"00"是一个过渡时期,不会显示出来,所以本电路采用"10"作为计数器复位脉冲。当计数器由"00"跳变到"10''时,从输出低电平使计数器置数,并保持继续计数,蜂鸣器发出一声报警声。当产品经过光电门时,Rs触发器翻转输出高电平,计数器开始计数。若按下S2,计数器立即复位。报警电路的电路图如图3-4所示。

图3-4 报警电路图

6,软件程序的设计

系统上电初始化之后,主程序不断地扫描键盘和显示程序;同时判断外部中断标志是否有效。如果外部中断标志有效,则调用光电计数处理子程序,刷新数码管的显示值

7,系统控制主程序设计

定义蜂鸣器接口P3.7,初始状态为0,蜂鸣器不报警,当有高电平触发P3.7时,蜂鸣器开始报警。当下一个脉冲是1时外部中断T0则产生中断,计数器停止加计数。

8,系统初始化子程序设计:

设定外部中断T0的标志位置0即中断处于关闭状态,蜂鸣器控制标志位也置0,处于关闭状态,系统初始化流程图如图3-5所示。

图3-5 系统初始化流程图

9,显示子程序设计

定义数码管的段码表、位选码,定义计数器的显示缓存区,在统计过程中,当一个信号传到单片机中,系统调用延时子程序进行延时,计数器对十位和个位进行计数判断,将数据通过数码管显示出来,显示子程序的电路图如图3-6所示。

图3-6 动态显示电路流程图

10,光电计数处理子字程序设计

外部中断T0初始化后处于关闭状态,当其中断标志有效时进行加计数,外部中断T0进行加计数且判断计数器是否达到10,若等于10则KEYBOARD=1蜂鸣器报警。最后将计数值通过数码管显示,其流程图如图3-7所示。

SHAPE  \* MERGEFORMAT

3-7 光电计数处理子程序流程图

四、系统调试

4.1电路的优缺点

1.用单片机作为设计的核心系统有点易于实现自动化控制、计数精确。而电路采用数码管动态显示电路直观性比较好、具有一定的抗干扰能力且比较容易实现级联,以达到扩大计数范围的作用,同时电路具有很强的实用性。

2.电路的不足由高亮光电管和硅光电池组成的信号产生电路灵敏度稍差,在实际环境中光线的接受还是收到影响,导致电路反应有点迟钝。

3.电路刚开始有些地方考虑的欠佳,线路排布个人觉得并不十分完美。

4.2电路的改进方法

1、断电检查:硬件电路及对照原理图检查硬件电路。

2、整个调试过程分层次进行,先调试单元电路,再调试模块电路,最后系统联调。

3、通电检查:入正常电压,观察各模块工作波形及工作电压有无异常。

4、单元电路调试:利用信号源或其他实验仪器判断各单元电路的工作状态。

5、整机联调:从最前端到末级进行统调,检查各级动态信号工作情况,分析是否满足设计要求。

6、参数计算和器件选择:

五、系统程序设计

用C语言进行编程:

#include

#define uchar unsigned char

#define uint unsigned int

uchar code tab[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit SPK=P3^7;

sbit key1=P1^0;

sbit key2=P1^1;

uchar n,a,b;

void delay(uchar z)

{

uchar x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}void scan()

{

if(key1==0)

{

delay(5);

if(key1==0)

{

while(!key1);

n++;

if(n==100)

n=0;

}

}

if(key2==0)

{

delay(5);

if(key2==0)

{

while(!key2);

n=0;

}

}

}

void display()

{

a=n%10;

b=n/10;

P2=0xfe;

P0=tab[b];

delay(5);

P2=0xfd;

P0=tab[a];

delay(5);

}

void alarm(uchar t)

{

uchar i,j;

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

{

SPK=~SPK;

for(j=0;j

}

}

void main()

{

while(1)

{

scan();

display();

if((a==0)&&(b!=0))

{

alarm(30);

alarm(50);

}

}

}

六、仿真

用proteus画好电路图,仿真结果如下:

1,计数显示如下图:

2,当计数到‘10’时,报警器报警,仿真结果如下图:

3,按下清零键,数码管恢复到‘00’,仿真结果如下图:

七、设计心得体会

本次课程设计是利用光电传感器对通过光电门的产品数量计数。在设计电路初期,由于没有设计经验,觉得无从下手,空有很多设计思想,经过自己查找资料,我的设计渐渐有了头绪,通过查阅资料,逐渐确立系统方案。发现自己对单片机AT89C52的功能的认识和应用掌握力度不够,在软件设计程序时常常遇到问题,又找不到错误问题根源所在。究其原因是我对芯片应用和C语言编写程序的经验太少,速度过慢。我知道问题的根本原因之后,我认真研究并掌握单片机的应用并提高编写程序的准确度,变成速度。在设计期间有什么不懂的可以问指导老师,也可以和同学们互相探讨,也可以通过网络查询。在课程设计期间我学到了很多知识和技巧。并把以往老师教的理论知识用于实践。总之,知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。

八、参考文献

1,康华光  《电子技术基础》数字部分.高等教育出版社,2006

2,康华光  《电子技术基础》模拟部分.高等教育出版社,2006

3,倪晓军,章韵  《单片机原理与接口技术》清华大学出版社,2009

4,郭天祥    《51单片机C语言教程》 电子工业出版社,2009

脉冲计数器单片机c语言编程,基于单片机的光电计数器相关推荐

  1. 单片机c语言编程下载,单片机C语言编程.doc

    单片机C语言编程.doc 单片机C语言编程指令格式 功能简述 字节数 周期 一.数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,Ri ...

  2. 汽车距离报警系统c语言编程,基于单片机的超声波汽车报警系统的设计

    目前汽车报警装置已被广泛应用,并种类繁多,但大多报警装置均有其局限性.如早期出现的红外报警系统,最大的缺点是红外线波易受干扰,整个系统的警示音常呈现不稳定的乱鸣状态,另外对深黑色粗糙表面物体的反应也较 ...

  3. 四路抢答器c语言编程,基于单片机的四路抢答器设计

    基于单片机的四路抢答器设计 课程设计(论文) 题 目 名 称 多路数字抢答器设计 课 程 名 称 单片机原理及其应用 学 生 姓 名 学 号 系 .专 业 指 导 教 师 2013年 6月 24日 摘 ...

  4. 交通灯控制系统c语言编程,基于单片机的交通灯控制系统设计(本科)毕业论文设计.doc...

    基于单片机的交通灯控制系统设计 摘 要 当你路过一个十字路口时,你是否注意到各个方向车辆和行人有有条不紊的通过十字路口.这样井然有序的情境靠什么来实现的呢?靠的是交通灯控制系统.在论文中我使用单片机S ...

  5. 51单片机c语言编程函数,单片机C语言教程:C51函数

    其实一直出现在例子中的 main()也算是一个函数,只不过它比较特殊,编译时以它做为程序的开始段.有了函数C 语言就有了模块化的优点,一般功能较多的程序,会在编写程序时把每项单独的功能分成数个子程序模 ...

  6. 利用4位led显示本机秒表时间的单片机c语言程序,基于单片机的一个2位的led数码显示作为_秒表_设计.doc...

    基于单片机的一个2位的led数码显示作为_秒表_设计 PAGE 1 PAGE 29 工程技术学院 课程设计 题 目:用单片机AT89C51设计一个2位的LED数码显示作为"秒表" ...

  7. 呼吸灯51单片机c语言编程,51单片机基于定时器实现呼吸灯(C8051F020单片机)

    一.实现思路 原理:利用PWM信号控制LED灯的亮暗程度,实现LED灯由暗到亮又由亮到暗的渐变过程. 方法:通过定时器设置LED所接引脚的高低电平持续时间,模拟出PWM波. 二.关键问题--PWM的频 ...

  8. 微控制器编程技术c语言,8位单片机C语言编程:基于PIC16(用c语言对pic16微控制器进行编程的实用指导)...

    第1章 PIC微控制器系统1 1.1 PIC 16 微控制器1 1.1.1 MCU特性2 1.1.2 程序执行3 1.1.3 RAM文件寄存器4 1.1.4 其他PIC芯片5 1.2 PIC MCU配 ...

  9. pic16f616单片机C语言编程,PIC16F616单片机学习经验总结

    1.前言 为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大 ...

  10. 单片机c语言编程规则,单片机C语言编程规则

    §5 编写高质量的单片机C程序 高质量的单片机C程序代码运行效率高.可读性和可维护性强.在编写小型的单片机程序时,代码质量的重要性可能不是很明显.但如果要编写较大规模的程序,特别是多人合作编写程序时, ...

最新文章

  1. 坑爹的Python陷阱(避坑指南)
  2. MATLAB基本操作(二):数组中操作
  3. windows优化_windows系统优化教程——C盘清理及优化
  4. [C++对象模型][8]多重继承与虚函数表
  5. MAC显示隐藏文件和文件夹
  6. python中二分查找什么意思_python中二分查找法的实现方法
  7. 初步认识深度学习笔记(一)
  8. (39)VHDL实现移位寄存器(方法1)
  9. 第一个C#程序—C#基础回顾
  10. nginx清缓存,网站刷新不过来时用
  11. csdn积分有什么用
  12. LittlevGL 开源图形库
  13. 网络工程师/技术支持工程师面试题(1)
  14. ES集群单机(单节点/多节点)搭建
  15. 【C/C++学习】之内存分配(new,operator new,placement new)详解
  16. 360自研分布式存储系统Bada的架构设计和应用
  17. 【故事编程:Lambda表达式】之最甜的巧克力(二)
  18. 使用3g模块SIM5360E收发短信
  19. 总结移动开发入行十周年
  20. 2010,有关中国的几个瞬间

热门文章

  1. 手机音频拼接软件_介绍三款无损分割视频软件
  2. 微信扫码支付、聚合支付
  3. 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)前言
  4. 【Linux】Linux的信号量集
  5. 为什么远程计算机后会黑屏,解决Win10电脑远程桌面黑屏的问题
  6. 学生体温打卡系统Java+MySQL
  7. 信息论与编码_4G与5G分别采用什么信道编码技术_卷积码_Turbo码_LDPC码_Polar码
  8. Arduino测量误差数据的处理——莱特、格拉布斯准则剔除异常数据
  9. AltiumDesigner 的 PcbDoc文件转 pads 的 PCB文件
  10. 虚拟机win7纯净版镜像_win7中文版家vm虚拟机xp镜像庭普通版32位官方下载