应用电子毕业
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
基于单片机的圆珠分类系统的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
圆珠分类系统的设计
第一章 绪论
1.1 引言
在科学技术高度发达的现代社会中,人类已进入了瞬息万变的信息时代,人们在从事工业生产和科学实验的活动中,极大地依赖于对信息资源的开发、获取、传输和处理。传感器处于研究对象与测控系统的接口位置,是感知、获取和检测信息的窗口,一切科学实验和生产过程,特别是在自动检测和自动控制系统,都要通过传感器转换为容易传输与处理的电信号。在工业生产和科学实验中提出的检测任务是正确及时地掌握各种信息,大多数情况下是要获取被测信息的大小,即被测量的数值大小。这样,信息采集的主要含义就是取得测量数据。在工程中,需要有传感器与多台仪
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
组合在一起才能完成信号的检测,这样便形成了测量系统。尤其是随着计算机技术及信息处理技术的发展,测量系统所涉及的
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
也不断得以充实。
根据电涡流效应制成的传感器称为电涡流式传感器,电涡流式传感器的最大特点是能对位移、厚度、表面温度、速度、应力、材料损伤等进行非接触式连续测量,另外还具有体积小、灵敏度高等特点,应用极其广泛。
1.2系统功能简介
本系统接通电源后,液晶显示器全部清零,等待圆珠滚入,当圆珠通过时,经过涡流传感器测得圆珠直径,传感器把测得信息送入A/D转换器开始转换,8051单片机根据圆珠直径的大小分别放入不同的盒中,液晶显示器显示当前圆珠直径和和不同盒中圆珠的个数。每个盒中最多能装999个圆珠,当某盒中的圆珠数超过999个时,系统发出警报,提示使用者有盒已经装满圆珠。
测
量微机 直
径
的
传
感
器
盒
子
1 1
圆珠分类系统的设计
第二章 主要器件介绍
2.1 8051单片机的介绍
8051各引脚说明如下:
I/O端口:P0.0—P0.7,P1.0—P1.7,P2.0—P2.7,P3.0—P3.7。
8051共有4个I/O端口,为P0、P1、P2、P3,4个I/O口都是双向的,且每个口都具有锁存器。每个口有8条线,共计32条I/O线。各端口的功能叙述如下:
1、P0 有三个功能:
(1) 外部扩充存储器时,当作数据总线(D0—D7)
(2) 外部扩充存储器时,当作地址总线(A0—A7)
(3) 不扩充时,可做一般I/O使用,但内部无上拉电阻,作为
输入或输出时应在外部接上拉电阻。
2、P1 只做I/O使用,其内部有上拉电阻。
3、P2 有两个功能:
(1) 扩充外部存储器时,当作地址总线(A8—A15)
(2) 做一般I/O使用,其内部有上拉电阻。
4、P3 有两种功能:
除了作为I/O使用外(内部有上拉电阻),还有一些特殊功能,如下表所示,由特殊寄存器来设置。
表格 1 端口引脚的特殊功能
端口的引脚 特 殊 功 能
P10(8052) T2 TIMER2的外部输入引脚(8052)
P11(8052) /T2EX(TIMER2的捕捉(Capture)/重新加载(Reload)的触发输入)(8052)
P30 RXD(串行输入口)
P31 TXD(串行输出口)
P32 /INT0(外部中断)
P33 /INT1(外部中断)
P34 T0(TIMER0的外部输入脚)
P35 T1(TIMER1的外部输入脚)
P36 /WR(外部数据存储器的写入控制信号)
P37 /RD(外部数据存储器的读取控制信号)
端口1、2、3有内部上拉电路,当作为输入时,其电位被拉高,若输入为低电平可提供电流源;其作为输出缓冲器时可驱动8个LSTTL(需要外部的上拉电路)。
5、DD:电源+5V。
VSS:GND接地。
6、REST 此脚为高电平时(约2个机器周期),可将CPU复位,CPU复位后其累加器及寄存器的内容如下表:
表格 2 CPU 复位后其累加器及寄存器的内容
2 1
圆珠分类系统的设计
寄存器 二进制值
ACC 00000000
B 00000000
PSW 00000000
SP 00000111
P0/P1/P2/P3 11111111
1P XXX00000
1E 0XX00000
TMOD 00000000
TCON 00000000
7、ALE/PROG(ADDRESS LATCH ENABLE)地址锁存使能信号端,有三种功能:
(1)8051外接RAM/ROM:ALE接地址锁存器8282(8212)的STB脚,74373的EN脚,当CPU对外部存储器进行存取时,用以锁住地址的低位地址。
(2)8051未外接RAM/ROM:在系统中未使用外部存储器时,ALE脚也会有1/6石英晶体的振荡频率可作为外部时钟。
(3)在烧写EPROM:ALE作为烧写时钟的输入端。
8、PSEN(PROGRAM STORE ENABLE):程序储存使能端。
(1) 内部程序存储器读取:不动作。
(2) 外部程序存储器读取(ROM):在每个机器周期会动作两次。
(3) 外部数据存储器读取(RAM):两个/PSEN脉冲被跳过不会输出。
(4) 外接ROM时,与ROM的/OE脚连接。
9、EA/VPP
(1)接高电平时:
? CPU读取内程序存储器(ROM),如8051/8052。
? 扩充外部ROM:当读取内部程序存储器超过0FFFH(8051)、1FFFH(8052)时,自动读取外部ROM。
(2)接低电平时:CPU读取外部程序存储器(ROM),如8031/8032。
(3)8751烧写内部EPROM时,利用此脚输入21V的烧写电压。
10、XTAL1 XTAL2:接石英晶体振荡器。
机器周期=石英晶体*12,如12MHZ石英晶体/12=1微秒。
2.2 ADC0804的介绍
2.2.1 A/D转换器概述
所谓A/D转换器就是模拟/数字转换器(Analog to Digital Converter 简称 ADC),是将输入的模拟信号转换成为数字信号。信号输入端的信号可以是传感器(Sensor)或转换器(Transducer)的输出,而ADC输出的数字信号可以提供给微处理器,以便更广泛地应用。
2.2.2 ADC0804的规格及引脚图
(1)8位COMS逐次逼近型的A/D转换器; (2)三态锁定输出;
(3)存取时间:135μs; (4)分辨率:8位;
3 1
圆珠分类系统的设计
(5)转换时间:100μs; (6)总误差:?1LSB;
(7)工作温度:ADC0804 LCN—0?,+70?; (8)ADC0804 LCD— -40?,+85?;
(9)引脚图及说明如图2.1所示。
1/CSVCC (VREF)20
2/RDCLK R19
3/WRDB018
4CLK INDB117
5/INTRDB216
6VIN(+)DB315
7VIN(--)DB414
8AGNDDB513
9VREF/2DB612
10DGNDDB711
ADC0804
ADC0801
图2.1 A/D转换器件引脚图
/CS:芯片选择信号。
/RD:外部读取转换结果的控制脚输出信号。/RD为HI时,DB0,DB7处于高阻抗;/RD
为LO时,数字数据才会输出。
/WR:用来启动转换的控制输入,相当于ADC的转换开始(/CS=0时),当/WR由HI变
为LO时,转换器被清除;当/WR回到HI时,转换正式开始。 CLK IN,CLK R:时钟输入或接振荡元件(R,C),频率约限制在100kHZ,1460kHZ,如
果使用RC电路则其振荡频率为1/(1.1 RC)。 /INTR:中断请求信号输出,低电平动作。
VIN(+)、VIN(-):差动模拟电压输入。输入单端正电压时,VIN(-)接地;而差动输
入时,直接加入VIN(+)、VIN(-)。
AGND,DGND:模拟信号以及数字信号的接地。
VREF:辅助参考电压。
DB0,DB7:8位的数字输出。
VCC:电源供应以及作为电路的参考电压。
2.2.3 ADC0804电压输入与数字输出关系如表2-1所示。
表2-1 ADC0804 电压输入与数字输出关系表
4 1
圆珠分类系统的设计
十 六 二 进 与满刻度的比率 相对电压值VREF=2.560伏
进 制 制 码 高4位字节 低4位字节 高4位字节电压 低4位字节电压
F 1111 15/16 15/256 4.800 0300
E 1110 14/16 14/256 4.480 0280
D 1101 13/16 13/256 4.160 0260
C 1100 12/16 12/256 3.840 0240
B 1011 11/16 11/256 3.520 0220
A 1010 10/16 10/256 3.200 0200
9 1001 9/16 9/256 2.880 0180
8 1000 8/16 8/256 2.560 0160
7 0111 7/16 7/256 2.240 0140
6 0110 6/16 6/256 1.920 0120
5 0101 5/16 5/256 1.600 0100
4 0100 4/16 4/256 1.280 0080
续表2,1
十 六 二 进 与满刻度的比率 相对电压值VREF=2.560伏
进 制制 码 高4位字节 低4位字节 高4位字节电压 低4位字节电压
3 0011 3/16 3/256 0.960 0060
2 0010 2/16 2/256 0.640 0040
1 0001 1/16 1/256 0.320 0020
0 0000 0 0
例:VIN=3V,由上表可知2.880+0.120=3V为10010110B=96H。 2.3 LCD显示器介绍 (型号:TS12864A-3(带汉字库)) 图形点阵液晶显示模块
极限参数
5 1
圆珠分类系统的设计
项目 符号 标准值 单位
Vdd -0.3 ~ +7.0 V 电源电压
Vlcd Vdd-19.0 ~Vdd+0.3 V 液晶驱动电压
Vin - 0.3 ~Vdd+0.3 V 输入电压
Top -20 ~+70 工作温度 ?
Tstg 30~+80 储存温度 ? 极限参数
项目 符号 标准值 单位
Vdd -0.3 ~ +7.0 V 电源电压
Vlcd Vdd-19.0 ~Vdd+0.3 V 液晶驱动电压
Vin - 0.3 ~Vdd+0.3 V 输入电压
Top -20 ~+70 工作温度 ?
Tstg 30~+80 储存温度 ? 引脚功能 :
引脚序号 符号 电平 功能
1 VSS 0V 电源地
2 VDD +5V 电源输入
3 VO 液晶显示对比度调节
4 RS ( D/I ) H/L H:Display Data, L:display Instruction
5 R/W H/L H:读信号, L:写信号
6 E 读写使用
7-14 DBO-DB7 H/L 数据总线
15 PSB H/L H:8位或4位并口方式,L:串口方式
16 NC
17 /RES H/L 复位端,低电平有效
18 NC
19 LED(+) 背光源正端(+5V)
20 LED(-) 背光源负端
*注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平 电气特性
直流特性(Ta= =25? Vdd=5.0v?10%)
参数 符号 条件 最小 典型 最大 单位
VDD 4.5 5.0 5.5 V 电源电压
Vih 2.0 VDD V 输入高 E,R/W,D/I,
信号DB0~DB7
Vil 0 0.8 低 电压 Terminals
2.4 V 输出高 Voh DB0~DB7,
信号Terminal 0.4 低 Vol 电压
2750 uA Idd 显示期间 工作电流
1、指令表1:(RE=0:基本指令集)备注:
6 1
圆珠分类系统的设计
7
1
圆珠分类系统的设计
1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,
即读取BF 标志
时BF 需为0,方可接受新的指令;如果在送出一个指令前并不检查BF 标志,
那么在前
一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个
指令确实执行完
成,指令执行的时间请参考指令表中的个别指令说明。
2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往
后的指
令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指
8
1
圆珠分类系统的设计
令集时,不需
每次重设“RE”位元。
具体指令介绍:
1、清除显示
功能:清除显示屏幕,把DDRAM 位址计数器调整为“00H”
2、位址归位
RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
功能:把DDRAM 位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM
3、位址归位
功能:把DDRAM 位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM 功能:执
行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z 地址计数器控制的,该
命令自动将A0-A5 位地址送入Z 地址计数器,起始地址可以是0-63 范围内任意一行。Z 地址
计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
4、显示状态开/关
功能:D=1 ;整体显示ON C=1;游标ON B=1 ;游标位置ON 5、游标或显示移位控制
功能:设定游标的移动与显示的移位控制位:这个指令并不改变DDRAM 的内容
6、功能设定
9
1
圆珠分类系统的设计
功能:DL=1(必须设为1)RE=1;扩充指令集动作 RE=0:基本指令集动
作
7、设定CGRAM 位址
功能:设定CGRAM 位址到位址计数器(AC)
8、设定DDRAM 位址
功能:设定DDRAM 位址到位址计数器(AC)
9、读取忙碌状态(BF)和位址
10 1
圆珠分类系统的设计
3.1 确定总体方案
在工业生产当中,很多方面都要用到圆珠分类系统,该系统可以根据圆珠直径的大小进行分类统计。
根据设计任务的要求,采用8051单片机系统组成的数字控制器。整个系统在规定的测量时刻经过A/D转换器转换采集由涡流传感器反馈回来的圆珠直径测量值,并和设定值进行比
较,判断直径大小,然后确定应该打开哪个盒子。模拟圆珠分类系统总体框图如图3.1所示
单 信号变换电路 涡流传感器检测电路
片
液晶显示模块 机
系
隔离、驱动 执 行 器 统
图3.1圆珠分类系统总体框图
按前面的总体设计方案,本系统硬件的设计包括以下几个部分。
3.2 涡流传感器检测电路
本系统允许用户根据需要随时改变系统的设定温度(即允许值),为此设置了6位LED显示器和相应的操作键盘,并由专用控制芯片74C922实现与CPU的接口。采用专用控制芯片74C922后,可以节省CPU用于查询键盘输入的时间,降低了对CPU处理速度的要求,同时也减少了软件工作量。
6位LED显示器完成的是显示现在温度和设定温度,在本硬件电路中
30H(D0):现在温度的个位 33H(D3):设定温度的个位
11 1
圆珠分类系统的设计
31H(D1):现在温度的十位 34H(D4):设定温度的十位
32H(D2):现在温度的百位 35H(D5):设定温度的百位 这样就能更直观的掌握现在温度和设定温度,便于人工做出相应的操作,人机接口总体电路
[5]如图3.2所示。
VCCD5D3D4D2D1D0U2100*71413aaaaaaBI/RBOa2512bbbbbbRBIbaaaaaa3311ccccccLTc4fbfbfbfbfbfb710ddddddggggggAd519eeeeeeBe6ecececececec215ffffffCfdddddd7614ggggggDgdpdpdpdpdpdp8dpdpdpdpdpdp++++++74LS47999999U34.7K*6115901290129012901290129012AY0214BY1313CY212Y311Y4610PNPPNPPNPPNPPNPPNPVCCG1Y549VCCG2AY657G2BY774LS138Y5Y4Y3Y2Y1Y0
U1U413918DB0VI+6P10P0023817DB1P11P01Port3370---5V16DB2P12P0243615DB3VI--7OPAMPP13P0353514DB4P14P0463413DB5CLKR19P15P0573312DB6P16P0610k83211DB7CLK4150PP17P07pass zero signal13211/CSVREF9INT1P20INTR1222Port/RD2/RDINT0P2123Port/WR3/WRAGND8+5P2215245INTRT1P23INTR1425T0P240.1U26U5P25heating30PF3127+5OSCADC0804EA/VPP26VCC28A17470P27P2.4196KBMB16X1P2.51UCAP12MHZ18C15X2P2.630PFXTAL+11X1D14P2.791010X2RESETRXD+5119X3TXD360CAP17308X4/RDRDALE/PX1X2X31629/WR5kLEDWRPSEN10UF2.71Y180511232Y2DA12P2.3VCC3Y3CAP4Y4/OE13Y1VCC: 40 PIN10K456panalarmRES274922GND: 20 PINY2789Y3*0#Y4
图3.2 8051人机接口电路
为了便于阅读,下面分别画出了人机接口电路中的各部分电路,单片机最小系统电路如图3.3所示, A/D转换电路如图3.4所示, 6位数码显示电路如图3.5所示,键盘电路如图3.6所示。
U1139P10P00238P11P01337P12P02436to the Show circuitP13P03to A/D535P14P04634P15P05733P16P06832P17P07pass zero signalINTR1321PortINT1P201222INT0P21Port23P221524T1P23heating1425T0P2426P2530PF3127VCCEA/VPP2628P2719X1CAP12MHZ18X230PFXTAL910+5RESETRXD11360TXDCAP/RD1730RDALE/PLED/WR1629WRPSEN10UF8051VCCVCC: 40 PINCAPGND: 20 PINpanalarm10KRES2
to the Keyboard circuit
图3.3 单片机最小系统
12 1
圆珠分类系统的设计
U4
P0.018DB0VI+6
P0.117DB1PortP0.216DB2P0.315DB3VI--7OPAMP0--5VP0.414DB4P0.513DB5CLKR19P0.612DB610kP0.711DB7CLK4150P
+5
1/CSVREF9
/RD2/RD470/WR3/WRAGND8
INTR5INTR
5k
2.7
ADC0804
图3.4 A/D转换电路
VCCD5D3D4D2D1D0U2100*74131aaaaaaBI/RBOa5122bbbbbbRBIbaaaaaa3311ccccccLTcp1.0fbfbfbfbfbfb4710ddddddggggggAdp1.1519eeeeeeBep1.2ecececececec2156ffffffCfddddddp1.36147ggggggDgdpdpdpdpdpdpp1.48dpdpdpdpdpdp++++++p1.574LS47p1.6999999
U34.7K*6115901290129012901290129012AY0214BY1313CY212Y311Y4610PNPPNPPNPPNPPNPPNPVCCG1Y549VCCG2AY657G2BY774LS138
Y5Y4Y3Y2Y1Y0
图3.5 6位数码显示电路
13
1
圆珠分类系统的设计
U50.1U+P2.45OSCP2.5A17P2.66KBMB16P2.7C151U+11X1D1410X29X3X1X2X38X4
P2.31Y11232Y2DA123Y3Y14Y4/OE1345674922Y2789
Y3*0#
Y4
图3.6 键盘电路
3.3 直径检测和运算放大电路
电涡流式传感器结构工作原理
高频反射式电涡流传感器结构比较简单,主要由一个在安装在框架上的扁平圆形圈构成。此线圈可以粘贴于框架上,或在框架上开一条槽沟,将导线绕在槽内。传感器由高频信号激励,是它产生一个高频交流磁场,当被测导体靠近线圈时,在磁场作用范围的导体表层,产生了与此相交链的电涡流,而此电涡流又将产生一个交变磁场阻碍外磁场的变化,从能量角度看,在被测导体内存在电涡流损耗(当频率较高时忽略损耗)。能量损耗使传感器的Q值、等效阻抗Z降低,因此,当被测体与传感器的距离d改变时,传感器的Q值、等效阻抗Z、电感L均发生变化,于是,把位移量转换成能量。这便是电涡流传感器的基本原理。 线圈形状、尺寸对性能的影响
线圈外径大时,线圈的磁场轴向分布范围大,但磁感应强度的变化梯度小;而线圈外径大时,线圈的磁场轴向分布范围,但磁感应强度的变化梯度大。这就是说,电涡流传感器线圈外径越大,线性范围将越大,灵敏度越低;与此相反,线圈外径越小,传感器的灵敏度将越高,而线性范围越小。线圈内径的变化,只是靠近线圈处灵敏度稍有不同。同样,线圈的厚度变化,也仅在线圈处对灵敏度踩稍有影响。
另外,为使传感器的温度新能优良,并且使Q值增大,要求线圈框架材料损耗小,热膨胀系数小,电性能好,一般可以选用聚四氟乙烯、陶瓷、碳化硼等材料。在高温条件下使用时可以使用碳化硼。线圈的导线一般采用高强度漆包线,多股适当组合。如果要求减少导线损耗电阻,可以使用银线或银合金线,在高温条件下则可以使用铼钨合金线。
应该指出,线圈仅是传感器的一个组成部分,而另一组成部分则是被测体。在测量过程中静磁效应于、与电涡流效应对传感器等效阻抗部虚部的改变是相互制约的。因此,若此被测体是非磁性材料时,传感器的灵敏度较被测体是磁性材料时为高。
测量电路
根据电涡流传感器的基本原理,将传感器与被测体的距离变换为Q值、等效阻抗Z和等效电感L等三个参数,用相应的测量电路来测量。电涡流式传感器的测量电路可以归纳为:
高频载波调幅使和调频式两类。而高频载波调幅式又可以分为恒定频率的载波调幅与频
14 1
圆珠分类系统的设计
率变化的载波调幅两种。所以,根据测量电路可以把涡流式传感器分为三类,即:恒定频率调幅式、变频条幅式和调频式。
(1) 载波频率改变的调幅法和调频法
该测量电路的核心是一个电容三点式振荡器,传感器线圈是震荡回路的一个电感元件,这种测量电路的测量原理如下。
当无被测导体时,回路谐振于f0;此时Q值最高,所以对应的输出电压U0最大。当被测导体接近传感线圈时,振荡器的谐振频率发生变化,谐振曲线不但向两边移动,而且变得平坦,此时由传感器回路组成的震荡输出电压的频率和幅值均发生变化,假如我们直接取他的输出电压作为显示量,这种线路就成为载波频率改变的调幅法,它直接反应了Q值的变化,因此可以用于以Q值作为输出的电涡流传感器。若改为频率作为显示量,哪么就用来测量传感器的等效电感,这种方法称为调频法。
这个测量电路由以下三个部分组成
1、电容三点式振荡器。其作用是将位移变化一起振荡回路的Q值变化成高频载波信号的幅值变化。为使电路具有较高的效率而自行起振,电路采用自给变压的办法。适当选择振荡管的分压电阻的比值,使电路静态工作点处于甲乙类。
2、检波器。检波器由检波二极管和?形滤波器组成。采用?形滤波器可适应电流变化较大,而又要求纹波很小的情况,可以获得平滑的波形。这部分作用是将高频载波中的测量信号不失真的取出。
3、射级跟随器。由于射级跟随器具有输入阻抗高,并有良好的跟随性等特点,所以采用其作为输出级可以获得尽可能大的不失真输出的幅度值。
(2)调频式测量电路
该测量电路的的测量原理是位移的变化引起传感器线圈电感的变化,而电感的变化导致振荡频率的变化,以频率变化作为输出量,是我们需要的测量信息,因此,电涡流传感器线圈在这个电路的振荡器中作为一个电感元件接入电路之中。该测量电路由两大部分组成,即克拉泼电容三点式振荡器和射级输出器。
克拉泼振荡器产生的一个高频正弦波,这个高频正弦波频率是随传感器线圈的电感变化而变化。射级输出器起阻抗匹配的作用,以便和下级电路相连接。频率可以直接由数字频率计记录或通过频率—电压转换为电压量输出,再由其它记录仪器记录。
由于使用这种调频式测量电路,传感器输出电缆的分布电容的影响是不能忽视的,它使振荡频率发生变化,从而影响测量结果。
15 1
圆珠分类系统的设计
t0t0MM
tA30Ct0t0NN
10k1kV13KVo1kV21001k1kvin+4.132V177410--5V1774112.396VNOT177411k981K1.479K
1k
如图3.7 热电偶温度检测电路和放大电路
运放用于把热电偶输出的0-41.32mV的电压经过第一级差分变换电路,由双端输入变换为单端输出(VO=V2-V1),再经过第二级放大电路,放大100倍(输出电压为4.132V),经过第三级放大电路,放大3倍(输出电压为12.396V),再经过一个分压电路,最后信号还经过一个反向器变换成0-5V的电压,这样就大大的简化了硬件电路,降低了成本,而这对于模拟电阻炉温度控制系统没有丝毫的影响,如果是在实际工业应用中,就需要用到变送器和I/V变换器,它的作用是把热电偶输出的电压转变为4-20mA的电流,目的是便于远距离传
[7] [8]送,再通过I/V变换电路把4-20mA的电流变换为0-5V的电压。
3.4 温度控制电路
电阻丝由过零触发型的双向晶闸管整流电路驱动,通过调节加热电阻丝上的平均电压来控制加热功率,最终达到控制炉温的目的,其原理如图3.9所示.MOC3021是晶闸管型光电隔离器件,它只能触发小功率晶闸管。因此,本系统中通过MOC3021控制双向晶闸管T1,再由T1控制主电路的双向晶闸管T2。
晶闸管是晶体闸流管(Thyristor)的简称,俗称可控硅,它是一种大功率开关型半导体器件,在电路中用文字符号为“V”、“VT”表示(旧标准中用字母“SCR”表示),晶闸管具有硅整流器件的特性,能在高电压、大电流条件下工作,且工作过程可以控制,被广泛应用于可控整流、交流调压、无触点电子开关、逆变及变频等电子电路中;双向晶闸管(TRIAC)是由NPNPN五层半导体材料构成的,相当于两只普通晶闸管反相并联,它也有三个电极,分别是主电极T1、主电极T2和门极G,双向晶闸管可以双向导通,即门极加上正或负的触发电压,均能触发双向晶闸管正、反两个方向导通,如图3.8所示。
16 1
圆珠分类系统的设计
++
TT22
II
IIGGGGT1T1
a)b)
T2T2
IIIGIGGGT1T1
++
c)d)
如图3.8 双向晶闸管的触发状态
[21,1]VTVTVGVT>>当门极G和主电极T2相对于主电极T1的电压为正或门极G
[12,2]VTVTVGVT<<和主电极T1相对于主电极T2的电压为负时,晶闸管的导通方向
T1T2为,此时T2为阳极,T1为阴极;当门极G和主电极T1相对于主电极T2为正[12,2]VTVTVGVT>>或门极G和主电极T2相对于主电极T1的电压为负
T2T1[21,1]VTVTVGVT<<,晶闸管的导通方向为,此时T1为阳极,T2为阴极,双向晶闸管的主电极T1与主电极T2间,无论所加电压极性是正向还是反向,只要门极G和主电极T1(或T2)间加有正、负极性不同的触发电压,满足其必须的触发电流,晶闸管即可触发导通呈低阻状态。此时,主电极T1、T2间压降约为1V左右。双向晶闸管一旦导通,即使失去触发电压,也能继续维持导通状态。当主电极T1、T2电流减小至维持电流以下或T1、T2间电压改变极性,且无触发电压时,双向晶闸管阻断,只有重新施加触发电压,
[9] [10]才能再次导通。
在图3.9中,R4)R6为压敏电阻器,压敏电阻器简称VSR,是一种对电压敏感的非线性过电压保护半导体元件,当所加电压低于标称额定电压值时,压敏电阻器的电阻值接近无穷大,内部无电流流过,当压敏电阻器两端电压略高于标称值时,压敏电阻器将迅速击穿导通,并由高阻状态变为低阻状态,工作电流也急剧增大,在此电路中,R4)R6的型号为:MYJ05K271,标称电压为270V,起到防雷)吸收尖峰脉冲、抑制浪涌电流等作用,从而能有效的保护好晶闸管;电路中C1)C2的作用:当电路产生过电压时,由于电容电压不能突变,电容充电,使其两端电压逐渐升高,当晶闸管触发导通后,电容放电,使晶闸管避免了
[9]过电压的袭击;R5)R7的作用:与电容串联的电阻R,用来限制放电电流和增加放电时间。
17 1
圆珠分类系统的设计
双向晶闸管和加热丝串接在交流220V、50Hz市电回路。在给定周期T内,8051只要改变双向晶闸管的接通时间既可改变加热丝的功率,以达到调节温度的目的。晶闸管接通时间可以通过晶闸管控制极上触发脉冲控制。该触发脉冲由8051用软件在P2.1引脚上产生,在过零同步脉冲同步后经光电耦合管和驱动器输出送到可控硅的控制极上。
+12
R1200
R2Port200P2.18051R5T2R7R4R6outputMOC 3021T15151MYJ05K271UU
220VACMYJ05K271
0.1uC10.1uC2200R3Portload
图3.9 加热控制电路原理图
电路中采用的过零触发型双向晶闸管的特性如图3.10所示,只有当其两端电压过零时控制端上施加触发信号,它才导通;一旦导通,只有再次过零时才关断。针对这一特点,本系统采取了控制在M个电网周期内晶闸管导通的周期m(0?m?M)的方法控制输出平均电压。
[1]为简单起见,可以使控制运算所得控制量u和实际导通周期数m直接对应,既
0 , u<=0
u , 0
=M
v1
Ot
(a)电网电压
v2
Ot
(b)控制端信号
18 1
圆珠分类系统的设计
v3
tO
(c)负载电压
图3.10过零型双向晶闸管的触发特性
3.5 同步检测电路
本系统中的同步检测电路即为过零检测电路,过零检测电路检出电网电压信号的过零点,形成过零同步信号,并接到CPU的中断请求输入端INT1,以提供触发参考点,便于对过零型双向晶闸进行控制,如图3.11所示,220V的交流电压通过R1、R2电阻分压,再通过稳压管D1、D2,使交流电压稳定在7V左右,然后再通过整流二极管D3、D4、D5、D6进行全波整流,最后通过一个分压电阻R3进行分压,TLP621是一个光电耦合器,额定电压为5V,最大工作电压为24V,内部电路图如图3.12所示,当TLP621R的1脚来一个半波,内部的发光二极管导通,其内部的光敏三极管也饱和导通,此时其3、4脚就短接,同为低电平,Q2就截止,zero点就输出一个高电平;当TLP621的1脚为接近零电平时,就不能使其内部的发光二极管导通,那么其内部的光敏三极管就截止,4脚就为高电平,三极管Q2就饱和导通,输出zero为低电平(零电平);需要注意的是,同步检测电路和电阻炉加热回路的电源必须是同相的,以保证触发信号的同步
VCC
R510K
R410KzeroyINT1D34007R1xQ2PortQ147K/1WNPNyx14IN+CD1D54007R32706V82IN-3E220VACD64007TLP621
D26V8
D44007R2Port47K/1W
图3.11过零检测电路
Q1TLP62114
23
图3.12 光电耦合器TLP621
3.6 单片机基本系统
19 1
圆珠分类系统的设计
单片机是整个系统的核心,它负责协调)控制系统的各个部分完成规定的功能。在设计系统时,过零同步信号接到8051CPU的外部中断输入端INT1上,在INT1中断服务程序中进
[1]行触发控制,电阻炉温度控制系统的硬件原理框图见图3.13所示
图3.13 电阻炉温度控制系统的硬件原理框图
3.7 直流稳压电源电路设计
本电源采用桥式全波整流、大电容滤波、三端稳压器件稳压的方法,产生各种直流电压,如正负15V(作为运放电源),正5V等都可以买到相应的固定输出的三端稳压芯片,如LM7815、LM7805。为了设计的需要,我们采用LM317,LM337可变输出的稳压器件,范围为正负20V,如图3.14所示。
交流输入经过电容滤波后的稳定的直流电送到三端稳压集成电路LM317的VIN端,LM317的工作原理是:由VIN端给它提供工作电压以后,它便可以保持其+VOUT端比其ADJ端的电压高1.25V,因此,我们只需要用极小的电流来调整ADJ端的电压,便可在+VOUT端得到比较大的电流输出,并且电压比ADJ端高出恒定的1.25V。
LM317的ADJ端加一个接地的滤波电容,会使纹波抑制比大幅度的提高,给高频小信号的运算放大器提供非常稳定的电源。二极管的作用是当有意外情况使得LM317的输入电压比输出电压还低的时候防止从输入端有电流倒灌入LM317引起其损坏。其电源电路如图。
LM337的工作原理与LM317基本相同,要注意的是LM337输出的是负电压,这样就很好
[11]的完成了正负电压可调功能。输出电压范围:
VCC=1.25(1+Rp1/R2)或–VCC=–1.25(1+Rp2/R5)
20 1
圆珠分类系统的设计
LM31723Vin+VoutPort+VCC2
ADJR2D1R11220330T113PortC1++220VAC1uFC30.01uF+2200uFPortD3Rp1410uFLED10K
R3C9330++Rp210uF2200uF0.01uF10KC2+1uF
R5D2D4220LED
ADJ32Port-VCC1Vin-Vout
LM337MC780513Port+5VVin+5V2
GNDR423303T21Port2200uFC5++1uFC4220VAC0.33uF
PortD54LED
图3.14 直流稳压电源电路
21
1
圆珠分类系统的设计
第四章 软件设计
4.1主程序
主程序完成显示器显示、启动A/D转换器进行转换,然后对,如果没有按键,就检测A/D转换器,如果A/D转换器已转换好了,就将转换好的数据送入AD_DATA单元中,再调用十进制转换子程序和BCD码转换子程序,显示当前圆珠直径,最后判断圆珠直径范围,如果是0—1cm,则P1.5送出相应盒盖控制信号,1-2cm,则P1.6送出相应盒盖控制信号,2-3cm,则P1.7送出相应盒盖控制信号,再判断是否超限,如果超限则发出警报,解除警报后,再循环启动A/D转换器进行转换。程序流程图如图
4.2 液晶显示子程序
首先,LCD进行初始化,设置LCD显示位置,检查LCD是否忙,如过处于空闲状态,则写指令数据到LCD,然后再写显示数据到LCD进行显示。程序流程图如图4.2所示 4.3 十六进制转换为十进制子程序
十进制转换服务子程序完成由A/D转换过来的16进制数据转变为10进制数,程序流程图如图4.3所示。
4.4 AD转换子程序
判断AD转换是否开始,如果开始,则启动AD转换,判断AD转换是否完毕,如果完毕则读取准换数据,程序流程图如图4.4所示。
22 1
圆珠分类系统的设计
开 始
显示器刷新
有圆珠滚下没, N
Y
调用检测子程序
启动A/D转换
A/D转换完成
N 吗,
Y 将转换好的数据
放入指定单元
报警灯亮
N 十六进数转换
为十进制
N 圆珠超
Y 限,圆珠直径判断
控制各盒盖 显示当前圆珠直径
和各盒圆珠总数
图4.1 主程序流程图
23
1
圆珠分类系统的设计
进 入
LCD初始化
设置LCD第i=i+1行显示
位置
检查LCD 忙,
Y
写指令数据到LCD
N
写显示数据到LCD
LCD显示数据
图4.2 LCD显示子程序流程图
24
1
圆珠分类系统的设计
进 入 进 入
N 把转换好的数
AD转换开始, 据ad_data除 以51商存入
Y dis[0],余数
存入m
启动AD转换 把(m*10)除以51商ADssADadAAD 存入dis[1], 余数存ZHUANG 入m
N AD转换完, 入,余数存入30H
把(m*10)除以51商Y 存入dis[2], 余数存
入m 读取数据
图4.3 图4.4
十进制转换服务子程序流程图 AD转换子程序流程图 十六进制转换为十进制程序 AD转换子程序
25
1
圆珠分类系统的设计
第五章 结论
本系统以8051单片机为核心部件,利用软件编程和合理有效的硬件电路,基本实现了圆珠分类系统的预定功能。本系统可以自动按圆珠直径分类,同时利用LCD来显示当前圆珠直径和各直径范围内的圆珠总数,在硬件设计上,本系统尽量采用简单的电路来实现其功能,这样就可以大大的降低设计成本;在软件设计中,采用C语言编程,大大提高了编程效率,同时采用比较新的显示器件LCD来显示。采用8051单片机对圆珠分类系统进行控制, 采用涡流传感器进行数据采集,因此具有控制方便、组态简单和灵活性大等优点,成本低等特点。
当然,由于时间仓促和本人水平有限,本系统也存在一些问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
,如在软件设计中,如果采用模糊控制算法方案或采用仿人智能控制(SHIC)算法和PID控制算法的联合控制方案,会得到更加理想的效果。
26 1
圆珠分类系统的设计
参考文献
[1] 李元春 计算机控制系统[M] 北京:高等教育出版社 2005 [2] 胡汉才 单片机原理及其接口技术[M] 北京:清华大学出版社 1995 [3] 王飞跃 王成红 基于网络控制的若干基本问题的思考和分析[J] 自动化学报
2002
[4] 吴金戊 沈庆阳 郭庭吉 8051单片机实践与应用[M] 北京:清华大学出版社 2004 [5] 吉雷 Protel99从入门到精通[M] 西安:西安电子科技大学出版社 2000 [6] 王化祥 张淑英 传感器原理及应用[M] 天津:天津大学出版社 2003 [7] 谢自美 电子线路设计实验测试第二版[M] 武汉:华中科技大学出版社2000 [8] 童诗白 模拟电子技术基础[M] 北京:高等教育出版社 2001 [9] 王港元 电工电子实践指导[M] 南昌:江西科学技术出版社 2003 [10] 张庆双 电子元器件的选用与检测[M] 北京:机械工业出版社 2002 [11] 谢嘉奎 电子线路[M] 北京:高等教育出版社 2000
27
1
圆珠分类系统的设计
/********************************************************************/ /* */ /* 赣南师范学院物理与电子信息学院电子信息工程本科毕业设计 */
/* 圆珠分类系统 */ /* 采用LCD显示 */ /* LCD型号:TS12864A-3(带汉字库)显示 */
/* 参考电压接至5V电源 */ /* 最小输出电压:0.00V 最大输出电压:5.00V 分辨率:0.02V */
/* 时间: 2007/12/7 */ /* */ /********************************************************************/
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define channel_0 0x02 //单通道0输入选择
#define channel_1 0x03 //单通道1输入选择
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
/*TS12864A-3 端口定义*/
#define LCD_data P0 //数据口
sbit LCD_RS = P2^0; //寄存器选择输入
sbit LCD_RW = P2^1; //液晶读/写控制
sbit LCD_EN = P2^2; //液晶使能控制
sbit LCD_PSB = P2^3; //串/并方式控制
sbit LCD_RST = P2^4; //液晶复位端口
28
1
圆珠分类系统的设计
sbit ADC_CS = P2^6; //片选端
sbit ADC_CLK= P2^7; //时钟端
sbit ADC_DI = P1^1; //数据输入输出复用
sbit ADC_DO = P1^1; //DI和DO端都接在P1.1
sbit ALERT_1=P1^2; //0—1cm圆珠装满报警信号端 sbit ALERT_2=P1^3; //1-2cm圆珠装满报警信号端
sbit ALERT_3=P1^4; //2-3cm圆珠装满报警信号端
sbit Auto_Control1=P1^5; //0-1cm圆珠容器控制信号
sbit Auto_Control2=P1^6; //1-2cm圆珠容器控制信号
sbit Auto_Control3=P1^7; //2-3cm圆珠容器控制信号
sbit Auto_Control4=P3^1;
sbit ACC0=ACC^0; //通道与输入方式控制字
sbit ACC1=ACC^1; //通道与输入方式控制字
uint dis[]={0,0,0,0,0,0}; //定义6个显示数据单元和一个数据存储单元 uchar dis1[] = {"圆珠D:"};
uchar dis2[] = {"0-1cm: 个"};
uchar dis3[] = {"1-2cm: 个"};
uchar dis4[] = {"2-3cm: 个"};
uchar dis5[]={"."};
uchar dis6[]={"cm"};
uchar dis7[]={0,0,0}; //定义3个显示数据单元(存储0-1cm的圆珠个数) uchar dis8[]={0,0,0}; //定义3个显示数据单元(存储1-2cm的圆珠个数) uchar dis9[]={0,0,0}; //定义3个显示数据单元(存储2-3cm的圆珠个数) uchar flag1=0,flag2=0,flag3=0; //定义各直径范围标志位
void ADC_START(); //启动ADC转换函数 bit lcd_busy(); //检查LCD忙状态函数
void lcd_wcmd(uchar cmd); //写指令数据到LCD函数
void lcd_wdat(uchar dat); //写显示数据到LCD函数
29 1
圆珠分类系统的设计
void delay(int ms); //延时函数
void delay0(uchar x); //x*0.14MS
void lcd_init(); //LCD初始化设定函数
void lcd_pos(uchar X,uchar Y); //确定显示位置函数
void LCD_DISPLAY(); // LCD显示函数
void Auto_Control(); //自动控制继电器函数
void show_counter1(uint counter);//圆珠个数值转换为3为BCD码
void show_counter2(uint counter);
void show_counter3(uint counter);
void ALERT(bit BEEP); //蜂鸣器响一声子程序
void show_value(uchar ad_data); // 数据处理
uchar ADC_read(uchar mode); //AD转换函数
/*******************************************************************/
/* */
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
30
1
圆珠分类系统的设计
}
/*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
/* */ /*******************************************************************/ void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P0 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
/* */ /*******************************************************************/ void lcd_wdat(uchar dat)
{
31
1
圆珠分类系统的设计
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* LCD初始化设定 */
/* */
/*******************************************************************/
void lcd_init()
{
LCD_RST = 0; //液晶复位
delay(30);
LCD_RST = 1;
delay(5);
LCD_PSB = 1; //并口方式
lcd_wcmd(0x34); //扩充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
32 1
圆珠分类系统的设计
delay(5);
}
/*********************************************************/ /* */ /* 设定显示位置 */ /* */ /*********************************************************/ void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
lcd_wcmd(pos); //显示地址
}
/************************************************************/ /* */ /* LCD显示 */ /* */ /************************************************************/
void LCD_DISPLAY()
{
uchar i;
lcd_init(); //初始化LCD
33
1
圆珠分类系统的设计
lcd_pos(0,0); //设置显示位置为第一行的第1个字符
i = 0;
while(dis1[i] != '\0')
{ //显示字符
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(0,4); //设置显示位置为第一行的第3个字符
i=0;
while(dis5[i] != '\0')
{
lcd_wdat(dis5[i]); //显示字符"."
i++;
}
lcd_pos(0,7); //设置显示位置为第一行的第6个字符
i=0;
while(dis6[i] != '\0')
{
lcd_wdat(dis6[i]); //显示字符"cm"
i++;
}
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
i = 0;
while(dis2[i] != '\0')
{
lcd_wdat(dis2[i]); //显示字符
i++;
}
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
i = 0;
34
1
圆珠分类系统的设计
while(dis3[i] != '\0')
{
lcd_wdat(dis3[i]); //显示字符
i++;
}
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
i = 0;
while(dis4[i] != '\0')
{
lcd_wdat(dis4[i]); //显示字符
i++;
}
lcd_pos(0,3);
lcd_wdat(dis[0]+0x30);
lcd_pos(0,5);
lcd_wdat(dis[1]+0x30);
lcd_pos(0,6);
lcd_wdat(dis[2]+0x30);
lcd_pos(1,3);
lcd_wdat(dis7[0]+0x30);
lcd_wdat(dis7[1]+0x30);
lcd_wdat(dis7[2]+0x30);
lcd_pos(2,3);
lcd_wdat(dis8[0]+0x30);
lcd_wdat(dis8[1]+0x30);
lcd_wdat(dis8[2]+0x30);
lcd_pos(3,3);
lcd_wdat(dis9[0]+0x30);
lcd_wdat(dis9[1]+0x30);
lcd_wdat(dis9[2]+0x30);
35
1
圆珠分类系统的设计
}
/********************************************************************/ /* */ /* 启动ADC转换 */ /* */ /********************************************************************/
void ADC_start()
{
ADC_CS=1; //一个转换周期开始
_nop_();
ADC_CLK=0;
_nop_();
ADC_CS=0; //CS置0,片选有效
_nop_();
ADC_DI=1; //DI置1,起始位
_nop_();
ADC_CLK=1; //第一个脉冲
_nop_();
ADC_DI=0; //在负跳变之前加一个DI反转操作
_nop_();
ADC_CLK=0;
_nop_();
}
/********************************************************************/ /* */ /*AD转换函数 */ /*选择输入通道,输入信号的模式《单端输入,或差分输入》 */
36
1
圆珠分类系统的设计
/* */
/********************************************************************/
uchar ADC_read(uchar mode) {
uchar i;
ADC_start(); //启动转换开始
ACC=mode;
ADC_DI=ACC1; //输出控制位1,DI=1,单通道输入,DI=0,差分输入。
ADC_CLK=1; //第二个脉冲
_nop_();
ADC_DI=0;
ADC_CLK=0;
_nop_();
ADC_DI=ACC0; //输出控制位0,DI=0,通道0输入,DI=1,通道1输入。
ADC_CLK=1; //第三个脉冲
_nop_();
ADC_DI=1;
ADC_CLK=0; //输入模式和通道号已经选择完。
ADC_CLK=1; //第四个脉冲
ACC=0;
for(i=8;i>0;i--) //读取8位数据
{
ADC_CLK=0; //脉冲下降沿
ACC=ACC<<1;
ACC0=ADC_DO; //读取DO端数据
_nop_();
37
1
圆珠分类系统的设计
_nop_();
ADC_CLK=1;
}
ADC_CS=1; //CS=1,片选无效。
return(ACC);
}
/********************************************************************/
/* */
/* 数据处理 */
/* 将采集到的数据进行16进制转换为10进制的处理,然后送显示。 */
/* */
/********************************************************************/
void show_value(uchar ad_data)
{ uchar m;
dis[0]=ad_data/51; //AD值转换
m=ad_data%51; //余数暂存
m=m*10; //计算小数第一位
dis[1]=m/51;
m=m%51;
m=m*10; //计算小数第二位
dis[2]=m/51;
if(((dis[0]>=0&&dis[0]<1)&&(dis[1]>0))||(dis[0]==1&&dis[1]==0&&dis[2]==0))//判
断圆珠直径,并控制相应继电器
{flag1=1;
dis[3]++;
if(dis[3]>999)
38
1
圆珠分类系统的设计
{dis[3]=0;
ALERT(ALERT_1);
}
}
if(((dis[0]>=1&&dis[0]<2)&&(dis[1]>0))||(dis[0]==2&&dis[1]==0&&dis[2]==0))
{flag1=1;
dis[4]++;
if(dis[3]>999)
{dis[3]=0;
ALERT(ALERT_1);
}
}
if(((dis[0]>=2&&dis[0]<3)&&(dis[1]>0))||(dis[0]==3&&dis[1]==0&&dis[2]==0))
{flag1=1;
dis[5]++;
if(dis[3]>999)
{dis[3]=0;
ALERT(ALERT_1);
}
}
}
/********************************************************************/ /* */ /*圆珠个数值转换为3位BCD码 */ /* */ /********************************************************************/ void show_counter1(uint counter)
{ uchar m;
dis7[0]=counter/100; //0-1cm圆珠个数值转换为3为BCD码
39
1
圆珠分类系统的设计
m=counter%100; //余数暂存
dis7[1]=m/10;
dis7[2]=m%10;
} //
void show_counter2(uint counter)
{ uchar m;
dis8[0]=counter/100; //1-2cm圆珠个数值转换为3为BCD码
m=counter%100; //余数暂存
dis8[1]=m/10;
dis8[2]=m%10;
}
void show_counter3(uint counter)
{ uchar m;
dis9[0]=counter/100; //2-3cm圆珠个数值转换为3为BCD码
m=counter%100; //余数暂存
dis9[1]=m/10;
dis9[2]=m%10;
} //
/*****************************************/
/*自动控制继电器函数 */ /*****************************************/
void Auto_Control()
{ if(flag1==1)
{ Auto_Control1=1;
Auto_Control2=0;
Auto_Control3=0;
Auto_Control4=1;
40 1
圆珠分类系统的设计
delay(30);
Auto_Control4=0;
}
if(flag2==1)
{ Auto_Control1=0;
Auto_Control2=1;
Auto_Control3=0;
Auto_Control4=1;
delay(30);
Auto_Control4=0;
}
if(flag3==1)
{ Auto_Control1=0;
Auto_Control2=0;
Auto_Control3=1;
Auto_Control4=1;
delay(30);
Auto_Control4=0;
}
}
/*******************************************************************/
/* */
/* 延时函数 */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
41 1
圆珠分类系统的设计
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*********************************************************/ /* */
/* 蜂鸣器响一声子程序 */
/* */ /*********************************************************/ void ALERT(bit BEEP)
{
uchar i;
for (i=0;i<100;i++)
{
delay0(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
}
/*********************************************************/ /* */
/* 延时x*0.14ms子程序 */
/* */ /*********************************************************/
42
1
圆珠分类系统的设计
void delay0(uchar x) //x*0.14MS
{
uchar i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
/********************************************************************/
/* */
/* 主函数 */
/* */
/********************************************************************/
void main()
{
uchar i,j;
while(1)
{i=ADC_read(channel_0);
for(j=0;j<20;j++)
{show_value(i);
Auto_Control();
show_counter1(dis[3]);
show_counter2(dis[4]);
show_counter3(dis[5]);
LCD_DISPLAY();
}
}
}
43
1