摘要霓虹灯主要是通过8255A对LED亮灭状态的控制,和8254定时/计数器的定时功能实现霓虹灯闪烁控制系统,外设是红、绿、黄三种颜色的发光二极管,在程序自动控制下,按照不同规律闪烁同时由数码管显示相应的闪烁方式。
关键字: 8255A 8254 LED 数码管一、设计的任务和要求设计霓虹灯闪烁控制系统,是外设的红、绿、黄三种颜色的发光二极管,在开关的控制下或者在程序自动控制下,按照不同规律闪烁。
要求发光二极管的亮、灭变化有一定的规律;发光二极管变化规律要求有多种状态。
二、设计小组成员及分工本次课设由冀任共同完成,在课设中遇到的问题四个人共同思考解决。
三、总体设计1、8254用于定时:定时/计数器0与定时器/计数器1共同构成100ms的定时器,确定执行相邻闪烁方式的间隔时间。
2.8255A用于控制LED的状态和数码管显示:PA0接8254的输出,B口接数码管,显示对应的闪烁方式,C口输出控制LED的状态。
3、六种闪烁方式:方式1:从左向右依次点亮8个LED灯,数码管显示1方式2:从右向左依次点亮8个LED灯,数码管显示2方式3:从左向右依次点亮4个的红灯、2个黄灯和2个绿灯,数码管显示3 方式4:从左向右两个两个的点亮8个LED灯,数码管显示4方式5:从两边向中间依次点亮8个LED灯,数码管显示5方式6:按红、绿、黄顺序点亮相同颜色的灯,数码管显示61、芯片介绍(1)芯片8255A8255A是具有3个8位并行I/O口3种工作方式的可编程并行接口芯片。
8255共有40个引脚,采用双列直插式封装。
D0--D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:片选信号线,低电平有效,表示芯片被选中。
RD:读出信号线,低电平有效,控制数据的读出。
WR:写入信号线,低电平有效,控制数据的写入。
Vcc:+5V电源。
PA0--PA7:A口输入/输出线。
PB0--PB7:B口输入/输出线。
PC0--PC7:C口输入/输出线。
RESET:复位信号线。
A1、A0:地址线,用来选择8255内部端口。
GND:地线。
三种工作状态:1) 工作方式 0 :这是 8255A 中各端口的基本输入 / 输出方式。
它只完成简单的并行输入 / 输出操作, CPU 可从指定端口输入信息,也可向指定端口输出信息,如果三个端口均处于工作方式 0 ,则可由工作方式控制字定义 16 种工作方式的组合。
2) 工作方式 1 :被称作选通输入 / 输出方式。
在这种工作方式下,数据输入 / 输出操作要在选通信号控制下完成。
3) 工作方式 2 :被称作带选通的双向传送方式。
8255A 中只允许端口 A 处于工作方式 2 ,可用来在两台处理机之间实现双向并行通信。
其有关的控制信号由端口 C 提供,并可向 CPU 发出中断请求信号。
(2)芯片82548254 芯片是可编程定时/计数器芯片,片内有3个独立的16位计数器,每个计数器可编程设定为6中不同的工作方式。
8254的引脚图和引脚说明8254芯片的工作方式:8254芯片共有六种工作方式,分别对应与六种不同的用途。
1)方式0:计数结束产生中断。
2)方式1:可重触发单稳方式。
3)方式2:分频器。
4)方式3:方波发生器。
5)方式4:软件触发计数。
6)方式5:硬件触发计数。
2、硬件连接图五、软件编程 1、软件流程图开始数码管显示1,点亮L7灯CX=19(循环19次)点亮L0灯 8254定时器1置初值10,定时100mSN开始PC0=18254计数器1,方式0,只读写低八位。
(1)8254定时程序结束延时AL 给8255C 口(2)方式1Y 循环结束?结束 AL 左移NY(3)主程序2、汇编语言源程序DATA SEGMENT IOPORT EQU 0D880H-280HIO8255A EQU IOPORT+280HIO8255B EQU IOPORT+281HIO8255C EQU IOPORT+282HIO8255T EQU IOPORT+283HIO82540 EQU IOPORT+288HIO82541 EQU IOPORT+289HIO8254K EQU IOPORT+28BH ;地址PB DB ?DATA ENDSSTACK SEGMENT STACKS TA DW 50 DUP(?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;定义代码段START: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX,IO8255T ; 8255控制字为81H,端口C低四位为输入MOV AL,10000001BOUT DX,ALMOV DX,IO8255C ;读端口C数据并保存IN AL,DXMOV PB,ALMOV DX,IO8255T ;8255设控制字为90HMOV AL,90H ; (端口A输入,端口B和C输出)OUT DX,ALMOV DX,IO8254K ;定时器0,方式三,先读写低八位,再读写高八位MOV AL,36HOUT DX,AL ;输入时钟,1MHZMOV DX,IO82540MOV AX, 10000 ;初值10000,输出时钟周期10MSOUT DX,ALNOPNOPMOV AL,AHOUT DX,ALMOV DX,IO8254K ;计数器1,方式0,只读写低八位MOV AL,50HOUT DX,ALCHXU1: MOV DX,IO8255BMOV AL,06HOUT DX,AL ;数码管显示1MOV CX,17 ;循环17次MOV AL,00000001B ;点亮L7灯A: CALL DELAY10 ;延时MOV DX,IO8255COUT DX,ALROL AL,1 ;AL循环左移一位LOOP A ;循环是否结束?没有结束,跳到AMOV AL,00H ;灯全灭OUT DX,ALMOV AH,01H ;有无键入INT 16HJNZ pppCHXU2: MOV DX,IO8255B ;数码管显示2MOV AL,5BHOUT DX,ALMOV DX,IO82541MOV AL,10 ;初值10,检测1秒OUT DX,ALDING2: MOV DX,IO8255A ;读入PA0值IN AL,DXAND AL,01HJZ DING2 ;8255的PA0=1停止计时MOV CX,17 ; 循环17次MOV AL,10000000B ;点亮L1灯B: CALL DELAY10 ;延时MOV DX,IO8255COUT DX,ALROR AL,1 ;AL循环右移一位LOOP B ;循环是否结束?没有结束,跳到BMOV AL,00HOUT DX,AL ;灯全灭MOV AH,01H ;有无键入INT 16HJNZ pppCHXU3: MOV DX,IO8255B ;数码管显示3MOV AL,4FHOUT DX,ALMOV DX,IO82541MOV AL,10 ;初值10OUT DX,ALDING3: MOV DX,IO8255AIN AL,DXAND AL,01HJZ DING3 ; 8255的PA0=1停止计时MOV CX,2 ; 循环2次C0: PUSH CXMOV DX,IO8255CMOV AL,01H ;左起第一展红灯亮OUT DX,ALCALL DELAY10MOV AL,08H ;左起第二展红灯亮OUT DX,ALCALL DELAY10MOV AL,40H ;左起第三展红灯亮OUT DX,ALCALL DELAY10MOV AL,80H ;左起第四展红灯亮OUT DX,ALCALL DELAY10MOV AL,02H ;左起第一展黄灯亮OUT DX,ALCALL DELAY10MOV AL,10H ;左起第二展黄灯亮OUT DX,ALCALL DELAY10MOV AL,04H ;左起第一展绿灯亮OUT DX,ALCALL DELAY10MOV AL,20H ;左起第二展绿灯亮OUT DX,ALCALL DELAY10POP CXMOV AH,01H ;有无键入INT 16HJNZ pppLOOP C0MOV AL,00H ;灯全灭OUT DX,ALCHXU4: MOV DX,IO8255B ;数码管显示4MOV AL,66HOUT DX,ALMOV DX,IO82541MOV AL,10 ;初值10OUT DX,ALDING4: MOV DX,IO8255A ;读入PA0值IN AL,DXAND AL,01HJZ DING4 ;8255的PA0=1停止计时MOV CX,9 ; 循环9次MOV AL,00000011B ;点亮L6,L7灯D: PUSH CXCALL DELAY10 ;延时MOV DX,IO8255COUT DX,ALMOV CL,2ROL AL,CL ;AL左移两位POP CXLOOP D ;循环若没有结束,跳到DMOV AL,00H ;灯全灭OUT DX,ALMOV AH,01H ;有无键入INT 16HJNZ pppCHXU5: MOV DX,IO8255B ;数码管显示5MOV AL,6DHOUT DX,ALMOV DX,IO8254KMOV AL,50HOUT DX,AL ;计数器1,方式0,只读写低8位MOV DX,IO82541MOV AL,10 ;初值100OUT DX,ALDING5: MOV DX,IO8255A ;读入PA0值IN AL,DXAND AL,01HJZ DING5MOV CX,2E: PUSH CXMOV DX,IO8255CMOV AL,81H ;L7 ,L0亮OUT DX,ALCALL DELAY10MOV AL,42H ;L6,L1亮OUT DX,ALCALL DELAY10MOV AL,24H ;L5,L2亮OUT DX,ALCALL DELAY10MOV AL,18HOUT DX,ALCALL DELAY10POP CXMOV AH,01H ;有无键入JNZ pppLOOP E ;循环若没有结束,跳到EMOV AL,00HOUT DX,ALCHXU6: MOV DX,IO8255B ;数码管显示6MOV AL,7DHOUT DX,ALMOV DX,IO8254KMOV AL,50HOUT DX,AL ;计数器1,方式0,只读写低8位MOV DX,IO82541MOV AL,10 ;初值100OUT DX,ALDING6: MOV DX,IO8255A ;读入PA0值IN AL,DXAND AL,01HJZ DING6MOV CX,2F: PUSH CXMOV DX,IO8255CMOV AL,01H ;L7亮OUT DX,ALCALL DELAY10MOV AL,04H ; L5亮OUT DX,ALCALL DELAY10MOV AL,10H ; L3亮OUT DX,ALCALL DELAY10MOV AL,40H ; L1亮OUT DX,ALCALL DELAY10MOV AL,02H ; L6亮OUT DX,ALCALL DELAY10MOV AL,08H ; L4亮OUT DX,ALCALL DELAY10MOV AL,20H ; L2亮OUT DX,ALCALL DELAY10MOV AL,80H ; L0亮OUT DX,ALPOP CXMOV AH,01H ;有无键入INT 16HJNZ pppLOOP F ;循环若没有结束,跳到FMOV AL,00H ;灯全灭OUT DX,ALCALL DELAY10JMP CHXU1 ;循环致信程序PPP: MOV DX,IO8255B ;数码管熄灭MOV AL,00HOUT DX,AL ;退出DOSMOV AX,4C00HINT 21HDELAY1 PROC NEARPUSH CXMOV CX,0FFFFHCCC: LOOP CCCPOP CXRETDELAY1 ENDPDELAY10 PROC NEARPUSH AXPUSH CXMOV CX,0800HUUU: CALL DELAY1LOOP UUUPOP CXPOP AXRETDELAY10 ENDPCODE ENDSEND START六、程序运行的结果程序按照以下四种工作方式依次执行,当有按键按下时,执行完此时正在执行的方式就停止。