光电计数器源程序
- 格式:doc
- 大小:45.50 KB
- 文档页数:6
总结与展望光电计数器的设计摘要本系统采用的是以单片机STC89c52为核心的自动计数器。
采用反射式光电传感器,将红外发光管与光电接收管相邻安放,每当物体通过一次,红外光就被物体反射,光电接收管接收一次,光电接收管的输出电压就发生一次变化,这个变化的电压信号通过放大和处理后,形成计数脉冲,通过光电隔离耦合并行输入至STC89c52单片机的P1口,通过软件控制和键盘设定计数值并用LED加以显示,便可实现对物体的计数统计。
本计数器可将机械或人工计数方式变为电子计数,并且采用LED数码管显示,可适用于诸多行业,以满足现代生产、生活方式的需求。
所谓的光电式传感器是将光信号转化为电信号的一种传感器。
它的理论基础是光电效应。
这类效应大致可分为三类。
第一类是外光电效应,即在光照射下,能使电子逸出物体表面。
利用这种效应所做成的器件有真空光电管、光电倍增管等。
第二类是内光电效应,即在光线照射下,能使物质的电阻率改变。
这类器件包括各类半导体光敏电阻。
第三类是光生伏特效应,即在光线作用下,物体内产生电动势的现象,此电动势称为光生电动势。
这类器件包括光电池、光电晶体管等。
光电效应都是利用光电元件受光照后,电特性发生变化。
敏感的光波长是在可见光附近,包括红外波长和紫外波长。
市场上的光电计数器采用的光电传感器有摄像头、光电管等,采用的光的种类有普通光和激光,可见光和不可见光等。
光电传感器一般由光源、光学通路和光电元件三部分组成。
光电式传感器是以光电器件作为转换元件的传感器,光电检测方法具有精度高、应用快、非接触等优点,而可测参数多,光电传感器的结构简单,形式灵活多变因此,光电式传感器在检测和控制中应用非常广泛。
【关键词】计数器光电传感器单片机数码管调研报告1.1当今生活是信息时代,是获取信息和处理信息,以及信息应用的时代.传感信息与检测技术的重要性在于它是获得信息并对信息进行一定处理的基础技术,是获取信息和信息加工处理的重要手段之一。
光电感应计数器原理图
不包含标题的光电感应计数器原理图如下:
[image]
光电感应计数器是一种电子设备,用于通过光电传感器检测光线的存在或者光的强度变化,并将其转换为数字信号进行计数。
它通常包括一个光源和一个光电传感器。
光源通常是一种发光二极管(LED),它发出一束光线以照明待检测区域。
光线经过待检测区域后,被光电传感器接收。
光电传感器是一种能够将光线转换为电信号的器件。
它通常由一个光敏元件和一个电路组成。
光敏元件可以是光敏电阻、光敏二极管或者光敏三极管等。
当光线照射到光敏元件上时,它的电阻、电流或者电压会发生变化。
光电传感器的电路会将光敏元件输出的电信号进行放大和处理,然后将其转换为数字信号。
这些数字信号会传送到计数器电路,进行计数并显示。
光电感应计数器常用于对通过某个区域的物体或人员进行计数。
当物体或人员经过待检测区域时,遮挡光线,光电传感器感知到信号的变化,计数器根据信号的变化进行计数。
光电感应计数器具有快速、精确、可靠等特点,广泛应用于超市、图书馆、展览场所等需要进行人流或物品计数的场合。
光电计数器c语言程序
下面是一个使用C语言编写的光电计数器程序的示例:
```c
#include <stdio.h>
int main() {
int count = 0;
int prevState = 0;
int currentState = 0;
while (1) {
// 从光电传感器获取当前状态
// 假设 1 代表有物体通过,0 代表没有物体通过
currentState = readSensorState();
// 当前状态与上一个状态不相同时,说明有物体通过
if (currentState != prevState) {
count++;
printf("当前数量: %d\n", count);
}
prevState = currentState;
}
return 0;
}
```
注意:上述代码是一个简化的示例,你需要根据实际硬件使用情况进行相应修改。
例如,`readSensorState()` 函数需要根据具体的光电传感器连接方式和读取方法进行实现。
此外,你可能还需要添加适当的延时函数,以避免过快的计数。
光电计数器的工作原理光电计数器是一种常见的电子计数器,它是一种使用光学器件来实现计数功能的计数器。
它的工作原理基于光电效应,通过光电转换将物体通过光线的照射变成电子信号来进行计数。
光电计数器主要包括探测器和计数器两个部分。
探测器一般由光电开关、发光二极管、光电二极管等电子元件组成。
当物体穿过光电计数器时,物体挡住光线,光线被遮挡后,照射到光电开关或光电二极管上的光电元件因而无法继续发射或接收光线,会产生相应的电信号。
这些电信号经过调理和放大处理后,然后发送到计数器中进行计数。
计数器是光电计数器中的核心部件,它完成了对每个物体的计数动作。
计数器使用数字技术来实现物体计数,通过将输入的电信号转化为数字模数,在计数器中对其进行编码、存储和运算等处理,以获得准确的物体计数结果。
计数器还可以设置相应的警报、返回、自动复位等功能,使得光电计数器具有高效性和便捷性。
光电计数器的工作原理主要分为两个阶段:探测信号的产生和计数处理。
① 探测信号的产生在探测信号产生的第一步中,发光二极管将发射准直方向的光线,光线照射到光电二极管上,光电二极管产生电信号。
在探测信号产生的第二步中,光电开关直接将关于受遮挡现象的信号发送到计数器。
其中,发光二极管和光电二极管的发出和接收光线的方向可以任意设置,使得光电计数器能够适应不同的应用场景。
② 计数处理通过探测信号的产生,计数器会将信号进行编码和存储,最终实现对物体的计数。
在实际使用中,光电计数器计数量的增加通常是以值的形式显示出来。
在计数处理阶段,计数器接受来自探测器的数字信号,将其转换为数字模拟信号,信号经过调理进行放大处理后,被转换为数字信号。
然后将转换的数字信号经过诸如二进制、八进制等算法进行编码,以便数字之间的运算以及数字之间的比较。
数字计数器还可通过特殊的电子线路或运算逻辑实现特殊功能,例如设置报警功能、回退功能、自动累加等功能。
在这些功能完成后,数字计数器可以重置,以使得计数器能够进行新的计数。
制作天地HANDS ON PROJECTS光电计数器的应用非常广泛,例如绕线机线圈匝数的检测、点钞机纸币张数的检测、复印机纸张数量的检测等。
它和机械计数器相比具有可靠性高、体积小、计数频率高、能和计算机连接实现自动控制等优点。
本文介绍一种光电计数器的原理与制作方法,供大家参考。
一、电路组成光电计数器电路如图1所示,由T1槽型光耦、IC1单稳态触发器、IC2~IC4计数译码显示电路所组成。
计数范围是0~999。
显示器采用共阴极LED数码管。
该电路具有上电自动清零功能,也可通过“复位”按钮实现手动清零。
二、检测电路槽型光耦ITR9608、R1、R2组成光电检测电路,负责把被检测物的数量转换成电压脉冲信号。
槽型光耦是由红外发光管和光敏三极管构成的,工作时红外发光管发出红外光线透过光耦的槽投射到光敏三极管上,光敏三极管导通,集电极输出低电平;当红外光线被检测物遮断时,光敏三极管截止,集电极输出高电平。
遮挡一次槽型光耦输出一个脉冲,因此脉冲的个数就是被检测物的数量。
槽型光耦中红外发光管的正向电流为50mA,在环境温度为25℃时它的最大耗散功率100mW,正向压降为1.5V。
当环境温度上升时,允许的正向工作电流还要减小。
为了留有一定的裕量,取它的工作电流为20mA。
则R1=5V-1.5V20mA=175Ω取R1=200Ω,其中5V是电源电压,1.5V是红外发光管的正向压降。
根据槽型光耦ITR9608的技术手册可知,使红外发光管的正向电流为20mA,当有遮挡时,光敏三极管ICE O=100nA;无遮挡时,光敏三极管的I C≈0.7mA。
为了使光敏三极管能工作在开关状态,则R2=5V-0.4V=6.5kΩ取R2=10kΩ,其中5V是电源电压,0.4V是光敏三极管的饱和压降。
R3、C2、C3和IC1组成单稳态触发器。
其作用是对槽型光耦传来的脉冲信号进行整形,去掉杂波信号,提高抗干扰能力。
IC1的型号是NE555,电路中将输入端TH和放电端DIS同时接在定时电容上,触发端TR平时为高电平。
基于单片机的光电计数器的设计摘要:近年来,随着工业发展和科学技术的创新,光电计数器技术越来越多的被应用到工业生产和生活中。
光电计数器采用光敏元件作为传感器,利用不同光强产生不同电平信号流进一步实现计数的原理,使得光电计数器现在广泛应用于工业生产线的计数。
本论文主要介绍了基于单片机AT89S51的软硬件设计过程,以及实现光电计数的工作原理和理论基础,实现了光电计数器基本的工作要求和性能指标,采用LCD显示技术显示计数结果。
本次光电计数器设计使用PCB板和LCD模块显示,因此电路结构简单清晰、焊接过程简单、电路稳定性好、操作难度小。
关键词:传感器;光电计数器;AT89S51Design based on single chip microcomputer photoelectric counterAbstract: in recent years, along with industrial development and the innovation of science and technology, photoelectric counter technology more and more applied to industrial production and life. Photoelectric counter using photosensitive element as the sensor, the use of different light intensity have different level signal flow to further realize the counting principle, makes the photoelectric counter now counts are widely used in industrial production line. This thesis mainly introduces the hardware and software design process, based on single chip microcomputer AT89S51 and photoelectric counting principle and theoretical basis of implementing the basic job requirements and performance indicators, photoelectric counter use LCD display technology to display the count result. The photoelectric counter design using the PCB and the LCD display module, so the circuit structure is simple and clear, the welding process simple, circuit stability is good, operation difficulty is small.Key words: sensor;Photoelectric counter; AT89S51目录1引言 (1)2任务要求 (2)3方案论证 (2)3.1两种方案的选择 (2)3.2方案的选择 (2)4 系统组成概述 (3)5 硬件系统各部分介绍 (3)5.1光电传感器 (3)5.2 AT89S51单片机 (4)5.2.1 AT89S51系列单片机的主要性能特点 (4)5.2.3 51系列单片机的基本组成 (5)5.2.4外接晶体引脚 (6)5.2.5 控制信号或与其它电源复用引脚 (6)5.3显示器件 (7)6 硬件电路设计 (8)6.1 最小系统 (8)6.1.1 电源电路 (8)6.1.2 复位电路 (8)6.1.3 晶振电路 (9)6.2 单片机控制电路 (10)6.3 显示电路 (10)7 系统软件设计 (11)8 结论 (13)参考文献 (13)致谢............................................................................................................................ 错误!未定义书签。
电子技术课程设计实 验 报 告光电计数器指导教师: 李维敏李维敏学生姓名学生姓名 班级班级 学号学号 张树良张树良 通信0902 周冠龙周冠龙 通信0902 王昭越王昭越 通信0906 日期:2011年12月20日星期二评语:指导教师签字:日期:组员照片组员照片 作品照片作品照片作品照片作品照片 作品照片作品照片目录一、设计任务书………………………………………………………………..3 二、设计框图及电路系统概述………………………………………………..3 三、各单元电路的设计方案及原理说明……………………………………..4 四、调试过程及结果分析……………………………………………………..11 五、设计、安装及调试中的体会……………………………………………..11 六、参考文献…………………………………………………………………..13 光电计数器一、 设计任务书 1实验目的掌握非电量测量系统的工作原理,学习传感器知识。
掌握掌握非电量测量系统的工作原理,学习传感器知识。
掌握 555 555 555 时基电路构成单稳态触发时基电路构成单稳态触发器、多谐振荡器的设计方法。
掌握数字电路计数、译码、显示系统的工作原理及设计方法。
器、多谐振荡器的设计方法。
掌握数字电路计数、译码、显示系统的工作原理及设计方法。
2设计要求2.1基本部分1、发光器件和光接收器件之间的距离大于1m 1m;;2、有抗干扰技术,防止背景光或瓶子抖动产生误计数;、有抗干扰技术,防止背景光或瓶子抖动产生误计数;3、最大计数值为9999;;4、每计数满1010,用灯闪烁,用灯闪烁2s 指示一下;指示一下;5、 数码管显示计数值;数码管显示计数值;6、工作电源为220V 交流电。
交流电。
2.2发挥部分1、可上电自动复位和外部手动人工复位;、可上电自动复位和外部手动人工复位;2、高位为零时,采用灭零处理;、高位为零时,采用灭零处理;3、发光器件和光接收器件之间的距离大于2m 2m;;4、每当计数值满10时,灯闪烁的同时喇叭发出提示音(音频为500-1000Hz 之间);5、设计一个倒计数器。
信息与电气工程学院课程设计说明书(2015 /2016 学年第1 学期)课程名称:小型数据设计题目:红外线计数器专业班级:计算机1401学生姓名:何亚茹赵君王中昆学号:140210122 140210107 140210121指导教师:生龙设计周数:二周设计成绩:2016年01月08日目录1 程序设计 (1)2 课程设的主要内容 (1)2.1设计的要求.............. . (1)2.2创新方案及原理分析 (1)2.3方案论证与选择 (2)2.4软件的设计 (3)3主要芯片设计 (4)3.1介绍 (4)3.2 51 单片机的特点 (5)3.3数码管 (7)4系统设计 (8)4.1单片机最小设计系统 (8)4.2红外线检测电路 (9)4.3计数显示部分 (10)4.4蜂鸣器报警电路 (10)4.5按键控制电路 (11)5 红外计数器程序设计 (11)5.1主程序设计 (11)5.2子程序设计 (13)6总结 (15)7参考文献 (16)1、程设计目的课利用AT89C51单片机来制作一个手动计数器。
通过具体的项目设计包括确定控制任务、系统总体方案设计、硬件系统设计、控制程序的设计等,以便掌握单片机系统设计的总体思路和方法,掌握基于单片机控制的电子产品开发的技术方法,培养个人的创新意识和动手能力。
2、课程设计的主要内容2.1设计的要求1.利用AT89C51单片机来制作一个红外线计数器。
有物体经过红外对管时计数一次。
计数的范围是0~99, 计数满时,又从零开始计数。
2.整个系统有较强的抗干扰能力,具有报警能力。
3.将计数值准确显示出来。
2.2创新方案及原理分析总体电路是由AT89C51单片机系统、红外光电管电路、蜂鸣器报警电路、数码管显示部分、复位电路部分组成,其结构如图2.1所示图 2.1 整体方框图红外传感器感受到外界信息时,产生高低电平,通过软件程序设置单片机内部寄存器,当传感器的高低脉冲被单片机接收到时,单片机产生中断,中断产生后进入中断服务程序,通过设置中断服务程序,进行计数。
光电计数器工作原理
光电计数器是一种根据光电效应原理来实现计数的装置。
其工作原理如下:
1. 光电效应:当光线照射到某些材料表面时,光子的能量可以导致电子从材料中解离出来,这个过程称为光电效应。
2. 光电效应的应用:光电计数器利用光电效应,将光线照射到光电计数器的光电导(例如光电二极管)上。
当光照射到光电导上时,光电导会产生电流。
3. 计数原理:光电计数器通过测量光电导上的电流来实现计数。
当有光线照射到光电导上时,光电导会产生电流,这时计数器会对电流进行检测和记录。
4. 计数过程:光电计数器会根据光电导上产生的电流来判断光线的存在与否。
当光线照射到光电导上时,计数器会记录一次计数。
当光线消失时,计数器停止计数。
通过记录每次计数的次数,可以得到光线的数量。
需要注意的是,光电计数器的工作原理可以根据具体的设计和制造与不同,上述介绍只是一种典型的工作原理。
图 4-1 数字式光电计数器原理图电路接通电源后,红外线发光二极管发出稳定的红外线信号。
当红外线接收管VT 接收到红外线发光二极管LED 发出的红外线信号时,其集电极输出低电平,此低电平送至电压比较器IC2B ,比较器的参考电压由电阻R3 、R4分压获得。
送至IC2B 反向输入端的低电平信号使得反相输入端电位低于同相输入端的电位,IC2B 输出高电平。
IC2B 输出的高电平送至电压比较器IC2A 的反相输入端。
IC2A 的参考电压同样由电阻R3 、R4分压获。
送至IC2A 反向输入端的高电平高于同相输入端电位,IC2A 输出低电平,使得光电耦合器得电工作,VT 导通,其T集电极输出低电平。
当有物体通过LED和VTD之间时,红外线被阻挡,VTD接收不到红外线信号,其集电极输出高电平,使得比较器IC2B输出低电平,IC2A输出高电平,光电耦合器停止工作VT截止,其集电极输出高电平。
由此,当有物体从红外线发光二极管LED和接收管VTD之间通过时,VT就截止1次,其集电极电位也随之跳变1次,相当于输出1 个计数脉冲。
如果有物体不断通过,VT就输出连续的计数脉冲。
双十进制同步计数器集成电路CD4518对VT的集电极输出的计数脉冲的下降沿进行计数。
为了满足下降沿计数的要求,需要将CD4518的正脉冲计数输入1CP端1脚接地,计数脉冲由EN端2脚输入。
本电路将CD4518的第一级计数器的输出端Q3连接第二级的2EN端10脚,构成两级串联计数,可实现0——99计数。
R12和C2是计数器的上电清零电路,电路接通电源的瞬间,CD4518的清零端15脚得到一个高电平脉冲,计数器被清零。
两片四线-七线锁存、译码驱动器CD4543和共阴极型LED数码管构成了计数显示电路,计数器CD4518输出的BCD码计数脉冲送至CD4543进行译码锁存处理,驱动LED数码管显示计数结果,本电路可显示0——99。
电路中,C4和R12组成开机复位电路,接通电源后由RC电路产生一个复位脉冲的复位端R,计数器自动清0.本电路中的计数器采用脉冲下降沿触发方。
#include<reg51.h> //单片机头文件
#include<absacc.h>//访问绝对地址
#include<math.h>
#include<stdio.h>//输入输出流
#define COM8279 XBYTE[0X5FFF] //8279控制命令地址
#define DATA8279 XBYTE[0X5EFF] //8279数据地址
#define uint unsigned int
#define uchar unsigned char //定义无字符变量
uint x;//高位计数值
uint y;//定时中断重复值
uint keyboard;//键值
uint i;
uint now;
uint z;
uchar code table[]={ 0x0C0,0x0F9,0x0A4,0x0B0,
0x99, 0x92, 0x82, 0x0F8,
0x80, 0x90, 0x88, 0x83,
0x0C6,0x0A1,0x86, 0x8E};//共阳极LED段码表,0x表示十六进制,表示0~9,a~f
uint LED[]={0,0,0,0,0,0};//六个数码管的初值
void show1(void);//数码管显示程序
void show2(void);
void main(void)
{
COM8279=0xDC;//清除显示RAM和FIFO命令字
COM8279=0x34;//程序时钟编程命令 (11000)24分频
COM8279=0x00;//键盘方式设置(8*8字符显示左边输入,编码方式扫描键盘,双键互锁)
COM8279=0x92;//设置写显示命令(AI=1每次写入后地址自动加1;显示
RAM一个单元地址0010)
for(i=0;i<6;i++)
{
DATA8279=table[LED[i]];//数据地址,数码管置零
}
x=0;
TMOD=0x16; //T1定时50ms,方式1;T0计数,方式2 TH0=0x00;
TL0=0x00; //计数赋初值,计数值为256
TH1=0x3C;
TL1=0x0B0; //50ms定时器赋初值(65536-50ms/1us=15536=0x3CB0) ET0=1;//开中断,计数器,P3.4(光电门)
ET1=1;//开中断,定时器
TR0=1;
TR1=1;
IT0=0;//外部中断0选用电平触发方式,低电平触发中断
EX1=1; //开外部中断
EA=1;//打开总中断
while(1);//等待中断
}
void inter0(void) interrupt 1//外部中断程序
{
COM8279=0x40;//读键盘命令(AI=0仅读一个单元)
keyboard=DATA8279;
/*扫描键盘输入值*/
if(keyboard==0)//清零重新计数
{
TL0=0;
x=0;
}
else if (keyboard==1)//暂停计数 {
TR0=0;
TR1=0;
now=TL0;//存储当前计数值
}
else if (keyboard==2)//开始计数 {
TR0=1;
TR1=1;
TL0=now;//将原计数值赋给计数器
}
else if (keyboard==3)//计数加1 {
TL0++;
}
else if (keyboard==4)//计数总值 {
TR1=0;
z=256*x+TL0;
show2();
}
else if (keyboard==5)//重新显示计数值
{
TR1=1;
TL0=z%256;
}
else
{
TR0=1;
TR1=1;
} //继续计数
}
void timer0(void) interrupt 2//计数器中断程序
{
x++;//高位计数
}
void timer1(void) interrupt 3//50ms定时器中断程序
{
while(y<10)
{
TH1=0x3C; //50ms
TL1=0x0B0;
y++;
}
y=0;
show1();
} //目的是每0.5s扫描一次数值,使计数值一直显示在数码管上
/*显示函数*/
void show1(void)
{
COM8279=0x92;//设置写显示命令,8279命令字
LED[0]=TL0%10;//显示低位计数0-255
LED[1]=TL0%100/10;
LED[2]=TL0%1000/100;
LED[3]=x%10;//显示高位计数
LED[4]=x%100/10;
LED[5]=x%1000/100;
for(i=0;i<6;i++)
{
DATA8279=table[LED[i]];//显示display数组 }
}
void show2(void)//显示计数总值
{
COM8279=0x92;//设置写显示命令,8279命令字
LED[0]=z%10;
LED[1]=z%100/10;
LED[2]=z%1000/100;
LED[3]=z%10000/1000;
LED[4]=z%100000/10000;
LED[5]=z%1000000/100000;
for(i=0;i<6;i++)
{
DATA8279=table[LED[i]];//显示display数组 }
}。