280 likes | 489 Views
06 级机电三班 许信. 阀门控制系统设计. 项目要求. 阀门控制系统设计:某化工厂输气管道用压力自动控制阀门,设计电路实现如下控制:( 1 )可以把阀门开、关至某一设定值;( 2 )自动检测管道压力,并设定管道压力值,当高于设定压力时阀门开度增大,当低于设定值时,阀门开度减小,至设定值停止。设计系统实现上述控制,并能记录阀门开度。. 项目连线图. 项目连线图. 8255A 端口地址表. 8255 端口地址表. 项目工作简要说明.
E N D
06级机电三班许信 阀门控制系统设计
项目要求 阀门控制系统设计:某化工厂输气管道用压力自动控制阀门,设计电路实现如下控制:(1)可以把阀门开、关至某一设定值;(2)自动检测管道压力,并设定管道压力值,当高于设定压力时阀门开度增大,当低于设定值时,阀门开度减小,至设定值停止。设计系统实现上述控制,并能记录阀门开度。
项目工作简要说明 • 8255A用C口输入、工作在方式0,B口与A口输出、工作在方式0,另一个8255A口和C口输出,工作在方式0,B口输入,工作在方式0。实际连线时,8255的C口不参与工作。
K0 总上电按钮K1 设定开门度按钮 K2 设定压力按钮L0 总上电工作指示灯 L1 设定开门度指示灯 L2 正转指示灯 L3 反转指示灯 L4 设定压力指示灯
当总上电按钮被按下的时候,整个系统才能开始工作。阀门的初始状态为完全关闭,所以要先将阀门打开。当设定开门度灯亮的时候,在键盘上输入设定开门度,阀门则逐渐打开到设定值。数码管可以显示从初始值到设定值的变化过程,当做是阀门运动的数字显示,期间设定灯是灭的。当总上电按钮被按下的时候,整个系统才能开始工作。阀门的初始状态为完全关闭,所以要先将阀门打开。当设定开门度灯亮的时候,在键盘上输入设定开门度,阀门则逐渐打开到设定值。数码管可以显示从初始值到设定值的变化过程,当做是阀门运动的数字显示,期间设定灯是灭的。
阀门开了以后,可以继续设定开门度,或者接下来根据压力设定值。设定压力值与前面设定开门度是一样的,且压力的自动检测值是已经给定了的。数码管显示从自动检测值到设定压力值变化的过程,然后亦可以根据按钮的情况进行两种设定或结束系统工作。阀门开了以后,可以继续设定开门度,或者接下来根据压力设定值。设定压力值与前面设定开门度是一样的,且压力的自动检测值是已经给定了的。数码管显示从自动检测值到设定压力值变化的过程,然后亦可以根据按钮的情况进行两种设定或结束系统工作。
设计程序 • DATA SEGMENT • press dw 5 • num dw ? • num1 dw ? • left dw ? • left1 dw ? • array db 3fh,6h,5bh,4fh,66h,6dh,7dh,7h,7fh,6fh • char db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h • table dw 0fe0eh,0fe0dh,0fe0bh,0fe07h,0fd0eh, • 0fd0dh,0fd0bh,0fd07h,0fb0eh,0fb0dh • ;此处输入数据段代码 • DATA ENDS
STACK SEGMENT stack db 1024 dup(0);此处输入堆栈段代码STACK ENDSCODE SEGMENT 'code' ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA MOV DS,AX mov al,10000001b ;8255A设置out 0e3h,al mov al,10000010b ;8255b设置out 063h,alA: mov al,0ffh out 0e1h,al ;使灯全灭in al,0e2h and al,00000001b jnz A mov al,11111110b out 0e1h,al ;总上电灯亮mov num1,0 ;初值为0,门关闭
B: in al,0e2h and al,00000011b jnz B ;设定按钮被按下才执行设定开门F: mov al,11111100b out 0e1h,al ;设定灯亮call zong mov al,11111110b out 0e1h,alC: in al,0e2h and al,00000101b jnz F ;按下设定压力按钮则继续,否则再返回执行设定开门mov dx,press mov num1,dx ;压力检测值为press
E: mov al,11101110b out 0e1h,al call zong mov al,11111110b out 0e1h,alD: in al,0e2h ;读入A口按钮状态and al,00000101b jz E in al,0e2h ;按下设定压力按钮,返回执行and al,00000011b jz F ;按下设定开门按钮,返回执行
mov cl,al and cl,00000001b jz D ;总上电按钮有效,继续比较,否则关闭系统mov al,0 out 0e0h,al ;关闭数码管mov al,0ffh out 0e1h,al ;关闭灯out 062h,al out 061h,al ;此处输入代码段代码MOV AX,4C00H INT 21H
zong procpush ax call key ;设定开门值或压力值mov ax,num1 mov num,ax and bx,00ffh mov left,bx call cha ;算差值call zhuan ;显示正反转call led ;数码管显示pop ax retzong endp
key proc;键盘扫描第1段:判断是否有键按下key1: mov al,00 out 62h,al ;使所有行线为低电平in al,61h and al,0fh ;判定是否有列线为低电平cmp al,0fh jz key1 ;没有,无闭合键,则循环等待call delay1 ;有,则延时清除抖动
;键盘扫描第2段:识别按键(扫描法) mov cx,3 ;行数送CX mov ah,0feh ;扫描初值送AH key2: mov al,ah out 62h,al ;输出行值(扫描值)in al,61h ;读进列值and al,0fh cmp al,0fh ;判断有无低电平列线jnz l1 ;有,则转入下一步处理rol ah,1 ;无,则移位扫描值loop key2 ;准备下一行扫描jmp key1 ;所有行都没有键按下,则返回继续 检测;此时,AL=列值,AH=行值,进行后续处理
;键盘扫描第3段:查找键代码l1: mov si,offset table ;table为键行列值表mov di,offset array ;array为数码管显示表mov bx,offset char ;char为键代码表mov cx,10 ;CX=键的个数key3: cmp ax,[si] ;与键值比较jz key4 ;相同,说明查到inc si inc si ;不相同,继续比较inc di inc bx loop key3 jmp key1 ;全部比较完,仍无相同,说明是重键
key4: call delay1 ;按键释放,延时消除抖动mov al,[di] out 0e0h,al ;数码管显示设定值mov bl,[bx] ;取键代码送bl ;jmp key1 retkey endp
cha proc push dx mov dx,num sub left,dx mov dx,left mov left1,dx cmp left,0 jnl next ;大于等于0则left加1 neg left ;小于0则取反next:inc left pop dx retcha endp
zhuan proccmp left1,0 jnl z1 ;大于等于0则跳转mov al,11110110b out 0e1h,al ;小于0则反转,设定灯灭,门关小jmp z2 z1: cmp left1,0 je z2 ;等于0则无动作mov al,11111010b out 0e1h,al ;大于0则正转,设定灯灭,门打开z2: call delay retzhuan endp
led procpush ax push bx push cx mov cx,leftread:mov ax,num1 mov bx, offset array and ax,0ffh xlat out 0e0h,al ;显示当前值cmp left1,0 jnl read1 ;大于等于0 dec num1 jmp read2 ;小于0
read1:inc num1read2:call delay loop read cmp left1,0 jnl read3 ;大于等于0 jmp read4 ;小于0read3:dec num1 jmp read5read4:inc num1read5:pop cx pop bx pop ax retled endp
delay procpush cx push di mov cx,300hY1: mov di,100X1: dec di jnz X1 loop Y1 pop di pop cxdelay endp
delay1 procpush cx push di mov cx,30Y: mov di,100X: dec di jnz X loop Y pop di pop cxdelay1 endp CODE ENDS END START
演示到此结束 Thank you for your watching !