流水线产品计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
流水线产品计数器
姓名:杨海龙
学号:200900840237
学院:机电与信息工程学院
专业:自动化
2011年11月21日
摘要
电子计数器在科学技术领域、工农业生产以及日常生活中发挥着越来越重要的作用。人类社会对电子计数器提出的越来越高的要求,电子计数器技术的发展和电子技术的高速发展密不可分,从而为现代科学技术突飞猛进则提供了坚强的后盾。
本电路的制作是根据生活中的需要而设计出来的一种计数器。它适用于工厂生产流水线的计数和产品的包装等方面,具有成本低、灵敏度高和制作简单等优点。
该模拟计数器用于工厂流水线计数,传送带传送物体通过红外线,在数码管上计数。电路主要是通过输出+5V的直流电压来对各个小模块主控供电。由红外线传感器检测产生模拟信号,通过NE555构成施密特触发器对传感器模拟信号进行波形整形,LM567信号进行鉴频,信号进入stc89c52进行计数、译码、驱动数码管,最终通过数码管显示出来。
关键字:计数器、NE555、LM567、单片机
第一章电路设计方案
1.1 电路系统方框图
1.2 电路系统原理图
图一红外线发射电路
图二红外线接收电路
2.3 电路工作原理
如图一所示,红外线发射电路以时钟定时集成芯片NE555为核心。当接通电源时,产生一个脉冲波,其频率为f1=1.443/(R1+2R2)C1,并通过3脚输出脉冲波,由红外线发射二极管发射出去。
图三:NE555芯片电路引脚以及芯片外形
Pin 1 (接地) -地线(或共同接地) ,通常被连接到电路共同接地。
Pin 2 (触发点) -这个脚位是触发NE555使其启动它的时间周期。触发信号上缘电压须大于2/3 VCC,下缘须低于1/3 VCC 。
Pin 3 (输出) -当时间周期开始555的输出输出脚位,移至比电源电压少1.7
伏的高电位。周期的结束输出回到O伏左右的低电位。于高电位时的最大输出电流大约200 mA 。
Pin 4 (重置) -一个低逻辑电位送至这个脚位时会重置和定时器使输出回到一个低电位。它通常被接到正电源或忽略不用。
Pin 5 (控制) -这个接脚准许由外部电压改变触发和闸限电压。当计数器经营在稳定或振荡的运作方式下,这输入能用来改变或调整输出频率。
Pin 6 (重置锁定) - Pin 6重置锁定并使输出呈低态。当这个接脚的电压从1/3 VCC电压以下移至2/3 VCC以上时启动这个动作。
Pin 7 (放电) -这个接脚和主要的输出接脚有相同的电流输出能力,当输出为ON时为LOW,对地为低阻抗,当输出为OFF时为HIGH,对地为高阻抗。
Pin 8 (V +) -这是555个计时器IC的正电源电压端。供应电压的范围是+4.5V (最小值)至+16V(最大值)。
红外线接收电路如图二,以LM567为核心构成一个鉴频电路。红外线接收二极管感应到脉冲信号通过电容C1耦合到三极管的基极,由放大电路把信号放大后送给LM567的3脚,并完成鉴频。如果接收信号在LM567的捕捉带宽内,8脚就会输出低电平,否则维持高电平。5、6脚上的电容、电阻决定了内部中心频率f,f=1/1.1R4C5。当f=f1时,LM567开始工作。
图四 LM567内部原理图
第三章程序流程
主程序
具体程序:
#include
sbit shuma1=P2^1;
sbit shuma2=P2^2;
sbit shuma3=P2^3;
sbit shuma4=P2^4;
sbit p37=P3^7;
#define uint unsigned int
#define uchar unsigned char
uchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint temp,qian,bai,shi,ge ,num1,num2,time,times,timefen;
void delayf(uint z)//延迟函数
{
uint x,y;
for (x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()//初始化函数
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=0;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TF0=0;
TR0=1;
}
void change(temp)
{
qian=temp/1000;
bai=(temp%1000)/100;
shi=((temp%1000)%100)/10;
ge=temp%10;
}
void display()//显示函数
{
shuma1=0;
P0=num[qian];
delayf(5);
shuma1=1;
shuma2=0;
P0=num[bai];
delayf(5);
shuma2=1;
shuma3=0;
P0=num[shi];
delayf(5);
shuma3=1;
shuma4=0;
P0=num[ge];
delayf(5);
shuma4=1;
}
void main ()
{
init();
num1=0;
while(1)
{
display();
delayf(5);
if(num1%10==0&&num1!=0)
{
p37=0;
}
}