实验 并行IO口8255扩展

合集下载

单片机可编程并行接口芯片8255的应用实验

单片机可编程并行接口芯片8255的应用实验

单片机可编程并行接口芯片8255的应用实验一:实验目的和要求1、掌握中断系统外部中断源的使用方法。

2、掌握延时程序的编程及使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二:设计要求1、用Proteus软件画出电路原理图,在单片机的外部扩展片外三总线,并通过片外三总线与8255接口。

2、在8255PA口或PB口的某一口线上产生周期500μS的连续方波,接示波器观察波形。

3、在8255PC口的PC0-PC3上接4个按键作输入,PC4-PC7上接4个发光二极管作输出,编程实现发光二极管正确指示按键的状态三:电路原理四:流程框图五:实验结果六:实验总结通过本次试验,掌握了如何在单片机外部扩展I/O口,并且如何在程序中使用这些扩展出来的I/O口,为以后的学习和使用打下了一定的基础,存在的问题是在编写程序时不够熟练,需要多练习七:思考题1、在8255PC口上外接8个发光二极管,利用8255PC口的置位/复位控制字控制其按某种规律变化四:流程框图开始工作方式初始化开定时器定时器初始化查询计数标志位溢出否取反输出口A中内容送DPTR设置C口命令DPTR指向控制位是否开始DPTR指向C口C口内容送累加器DPTR指向控制位交换累加器内容高低位累加器中内容送C开始DPTR指向控制位A中内容送DPTR 定义查表执行次数查表数据送C口调用延时子程序查询次数完否否是修改变量值1秒延时程序子程序返回程序清单ORG 0000H MOV DPTR, #0003H MOV A, #80H MOVX @DPTR, AMOV DPTR, #0000H MOV A, #0FFH MOVX @DPTR, AMOV IE, #00H MOV TMOD, #20H SETB TR1MOV TL1, #06H MOV TH1, #06H LOOP0:JBC TF1, LOOP1 AJMP LOOP0 LOOP1:CPL ACC.0 MOVX @DPTR, A AJMP LOOP0 END#include<reg52.h>#include<absacc.h>#define uchar unsingned char #define uint unsingned int #define COM8255 XBYTE[0X0003] #define PA8255 XBYTE[0X0000] #define PB8255 XBYTE[0X0001] char A;void main(){TMOD=0X11;IE=0;TH1=0XFF;TL1=0X06;PA8255=0XFF;TR1=1;A=1;for( ; ;){do {} while(!TF1);A=!A;if(A==0){PA8255=0XFE;TL1=0X06;TH1=0XFF;TF1=0;}if(A==1){PA8255=0XFF;TL1=0X06;TH1=0XFF;TF1=0;}}}ORG 0000HMOV DPTR, #0003HMOV A, #81HMOVX @DPTR, AMOV DPTR, #0002H LOOP: MOVX A, @DPTRSWAP AMOVX @DPTR, ALJMP LOOPEND#include<reg52.h>#include<absacc.h>#define uchar unsingned char#define uint unsingned int#define COM8255 XBYTE[0X0003]#define PA8255 XBYTE[0X0000]#define PB8255 XBYTE[0X0001]#define PC8255 XBYTE[0X0002]void main(){COM8255=0X81;PC8255=0XFF;while(1){PC8255=PC8255/16+PC8255%16*16;}}ORG 0000HLOOP2: MOV DPTR, #0003HMOVX @DPTR, AMOV R0, #00HMOV R1, #10HLOOP:MOV DPTR, #TABLEMOV A, R0MOVC A, @A+DPTRMOVX @DPTR, ALCALL DELAY1SINC R0DJNZ R1, LOOPLJMP LOOP2TABLE:DB 00H,01H,02H,03H,04H,05H,06H,07H08H,09H,0AH,0BH,0CH,0DH,0EH,0FH DELAY1S:MOV R7, #0A7HDL1:MOV R6, #0ABHDL0:MOV R5, #10HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1NOPRETEND#include <reg52.h>#include <absacc.h>#include <intrins.h>#define uchar unsigned char#define PROTECT XBYTE[0X0003]#define PA8255 XBYTE[0X0000]#define PB8255 XBYTE[0X0001] #define PC8255 XBYTE[0X0002] void delay1s();main(){uchar n=16;uchar h=0xfe;PROTECT=0x80;while(1){PC8255=h;delay1s();h=_crol_(h,1);}}void delay1s(void){unsigned char a,b,c;for(c=167;c>0;c--)for(b=171;b>0;b--)for(a=16;a>0;a--);_nop_(); }五:实验结果。

微机实验_8255并行输入输出

微机实验_8255并行输入输出

实验六8255并行输入输出一、实验目的1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示。

2)掌握8段数码管的动态刷新显示控制。

3)分析掌握8255工作方式1时的使用及编程,进一步掌握中断处理程序的编写。

二、实验内容(1)8255方式0:简单的输入输出按图连接好电路,8255C口输入接逻辑电平开关K0~K7,编程A口输出接LED 显示电路L0~L7;用指令从C口输入数据,再从A口输出。

程序为:ioport equ 0b800h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhio8255c equ ioport+28ahstacks segment stackdb 100 dup(?)stacks endscode segmentassume cs:code,ss:stacks main proc farstart: mov ax,stacksmov ss,axmov dx,io8255bmov al,8bh out dx,al inout: mov dx,io8255c in al,dxmov dx,io8255a out dx,almov dl,0ffhmov ah,06hint 21hjz inoutmov ah,4chint 21hmain endpcode endsend start运行结果为:用逻辑电平开关可以控制LED灯的亮灭。

(2)电路图如(1)图,编程将A口L0~L7控制成流水灯,流水间隔由软件产生,流水方向由K0键产生,流水间隔时间也可由K4~K7键编码控制。

程序为:data segmentioport equ 0b800h-0280h io8255a equ ioport+288h io8255b equ ioport+28bh io8255c equ ioport+28ah data endsstacks segment stackdb 100 dup (?)stacks endscode segmentassumecs:code,ds:data,ss:stacks start: mov ax,stacksmov ss,axmov dx,io8255bmov al,8bhout dx,alinout: mov cl,01hmov dx,io8255cin al,dxtest al,01jne rightjmp leftright: mov dx,io8255cin al,dxand al,11110000b cmp al,00h je rightmov al,clcall delay1 rol cl,1 mov dx,io8255c in al,dx test al,01 jne right jmp left left: mov dx,io8255c in al,dx and al,11110000b cmp al,00h je left mov al,cl call delay1 ror cl,1 mov dx,io8255c in al,dx test al,01 jne right jmp left delay1 proc near mov dx,io8255aout dx,alcall delaymov al,0out dx,alcall delayretdelay1 endpdelay proc near push cxpush bxmov bx,0fffhcc: mov cx,0ffffhccc: loop cccdec bxjnz ccpop bxpop cxretdelay endpcode endsend start运行结果为:K0控制流水方向,K4~K7为0000时停止,0001时为1秒。

实验5(8255并行接口键盘及显示实验)

实验5(8255并行接口键盘及显示实验)

8255接口键盘及显示综合设计实验(曹建文2009年10月10日)一、实验目的1、掌握8255的工作方式及应用编程。

2、自行设计、制作和连接基于8255并行接口的键盘及显示实验电路。

3、实现扫描式矩阵键盘的功能和作用。

二、实验设备PC机1台,TD-PIT实验台1台,实验元器件若干。

三、实验内容1、使用8255实现键盘按键和七段LED数码显示管显示功能。

2、根据实验要求自行设计实验线路图,制作和焊接实验电路板和实验元器件。

3、按照实验要求和实验电路图编写实验程序,使得按下不同的数字按键后数码管显示相应的数字值(4位数码管)。

4、按照实验要求设计和编写实验程序,实现普通计算器的加/减法功能。

四、实验原理1、8255结构及原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。

CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。

8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。

8255的内部结构及引脚如图-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图-2所示。

图-1:8255内部结构及引脚图(a)工作方式控制字(b)c口按位置位/复位控制字图-2:8255控制字格式(1)8255的内部结构如图-1所示,8255的内部结构由以下4个部分组成:(1)输入/输出端口A、B、C 。

这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。

A口和B口是一个独立的8位I/O口。

C口可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。

(2)A组和B组控制电路。

这是两组根据CPU命令控制8255工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255的工作方式,也可以根据编程命令来对C口的指定位进行置位/复位的操作。

微机实验 可编程并行接口8255

微机实验  可编程并行接口8255

微机原理实验报告实验题目:可编程并行接口8255一、实验目的1、掌握8255的基本输入输出和PC端口位控的工作方式及应用编程。

2、掌握8255的典型应用电路接法。

二、实验知识回顾8255控制字1、控制方式2、C端口置位复位控制字三、实验内容1、 8255流水灯显示,首先用逻辑电平开关预置一个数字,从A口读入,写入01H到C端口上,左移一次在进行输出,A口读入数据作为左移次数,这样循环下去,从而实现流水灯的显示。

2、用PC端口位控制法控制LED灯,依次点亮LED灯。

四、实验器材微机原理实验箱1个电脑(带TPC-USB软件)1台插线若干五、实现过程1、8255流水灯显示(1)流程图(2)程序源代码io8255a equ 2a0h ;8255A口地址io8255b equ 2a1h ;8255B口地址io8255c equ 2a2h ;8255C口地址io8255mode equ 2a3h ;控制寄存器地址stack1 segment stackdw 256 dup(?)stack1 endsdata segmentla db ? ;定义数据变量lb db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data ;程序由start处开始mov ds,axmov dx,io8255mode ;定义8255的工作方式mov al,90h ;方式0A口输入C口输出out dx,al ;mov dx,io8255a ;A口的地址存入dxin al,dx ;从dx也就是A口读入数据mov la,al ;读入的数据暂存在la变量mov dx,io8255c ;C口的地址存入dxmov al,01h ;将寄存器最低位置零out dx,al ;置位后的值输入给dx,也就是C口mov lb,al ;置位后的值暂存于变量lbloop1:call delaymov al,la ;将A口数据写入CX用以计数mov ch,00hmov cl,laloop2:call delaymov al,lbrol al,1 ;在寄存器内进行位移操作mov lb,al ;将操作后的结果重新写入变量al,为后面调用做准备mov dx,io8255c ;dx代表C口的地址out dx,al ;将al中存储的值写入dx,即C口mov ah,1 ;选择dos的模式为从键盘读取数据int 16h ;进入中断jnz quit ;ZF为0则跳到quitdec cx ;计数器减一jnz loop2 ;若cx!=0,跳到loop2quit:mov ax,4c00h ;结束程序并退出int 21hdelay proc near ;延时子程序push cxpush axmov cx,01fhd1: mov ax,0ffffhd2: dec axjnz d2loop d1pop axpop cxretdelay endpcode endsend start2、位控设置C口输出点亮LED(1)流程图(2)程序源代码io8255a equ 2a0h ;8255A口地址io8255b equ 2a1h ;8255B口地址io8255c equ 2a2h ;8255C口地址io8255mode equ 2a3h ;控制寄存器地址stack1 segment stackdw 256 dup(?)stack1 endsdata segmentla db ? ;定义数据变量lb db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data ;程序由start处开始mov ds,axmov dx,io8255mode ;定义8255的工作方式mov al,00001111b ;位控设置C口最高位为1out dx,almov cx,7 ;剩余未点亮灯数为7 loop1:call delaydec aldec alout dx,aldec cxjnz loop1delay proc near ;延时子程序push cxpush axmov cx,01fhd1: mov ax,0ffffhd2: dec axjnz d2loop d1pop axpop cxretdelay endpcode endsend start(3)实验结果图六、小结通过本次试验,我进一步了解了8255的可编程性,以及如何正确的通过程序控制8255,也更加熟悉了8255 C 端口的位控输出。

并行IO扩展芯片8255

并行IO扩展芯片8255

1
1
1
PC7
8255与单片机的连接
74LS373
AT89C51
P0.0-P0.7 ALE P2.7 WR RD RESET 8D G Q0 Q1 OE
D0-D7
PA
A0 A1
8255
CS WR RD RESET
PC
PB
EA
+5V
接片选/CS端,8255的(一组)寄存器地址可以是:
PA口:7000H PB口:7001H PC口:7002H 命令口:7003H
8255与单片机的连接
74LS373
AT89C51
P0.0-P0.7 ALE 8D G Q0 Q1 Q7 OE WR RD RESET
D0-D7 PA A0 A1 CS PC7 PC0
微型 打印机
8255
WR RD RESET
EA
+5V
Q7接片选/CS端,8255的(一组)寄存器地址可以是:
PA口:0000H PB口:0001H PC口:0002H 命令口:0003H
CPU向PA口输出数据
CPU向PB口输出数据 CPU向PC口输出数据 对控制寄存器写控制字 初始化8255时必须做的工作 没有选中,8255不工作 非法状态 非法状态 8255对系统总线呈高阻态 控制寄存器只能写不能读 8255对系统总线呈高阻态 向8255的I/O口写有效
注意:对PA,PB,PC三个口的任何读/写操作,就是对 PA,PB,PC这三个寄存器进行I/O操作.第4个寄存器是 控制字寄存器(命令字寄存器)
K0 K1 K2 K3 K4 K5 K6 K7
图8.5 简单I/O接口扩展电路
74HC244
简单并行I/O扩展(锁存器扩展) 在单片机的I/O口线不够用的情况下,可以借助 外部器件对I/O口进行扩展。可资选用的器件很 多,方案也有多种。

实验二可编程并行接口(8255方式0).doc

实验二可编程并行接口(8255方式0).doc

实验二一、实验题目:可编程并行接口(8255方式0)二、实验目的掌握8255方式0的工作原理及使用方法。

三、实验内容1、按下图连线。

2、编程从8255C口输入数据,再从A口输出.四、程序流程图五、源程序ioport equ 0d400h-0280hio8255a equ ioport+288hio8255b equ ioport+28bhio8255c equ ioport+28ahcode segmentassume cs:codestart: mov dx,io8255b ;设8255为C口输入,A口输出mov al,8bhout dx,alinout: mov dx,io8255c ;从C口输入一数据in al,dxmov dx,io8255a ;从A口输出刚才自C口out dx,al ;所输入的数据mov dl,0ffh ;判断是否有按键mov ah,06hint 21hjz inout ;若无,则继续自C口输入,A口输出mov ah,4ch ;否则返回DOSint 21hcode endsend start六、实验结果分析按上述的代码执行,观察LED灯的状态,可以发现实验结果和预期的相同:打开K0,关闭K1、K2、K3、K4、K5、K6、K7,L0亮;打开K1,关闭K0、K2、K3、K4、K5、K6、K7,L1亮;打开K2,关闭K0、K1、K3、K4、K5、K6、K7,L2亮;打开K3,关闭K0、K1、K2、K4、K5、K6、K7,L3亮;打开K4,关闭K0、K1、K2、K3、K5、K6、K7,L4亮;打开K5,关闭K0、K1、K2、K3、K4、K6、K7,L5亮;打开K6,关闭K0、K1、K2、K3、K4、K5、K7,L6亮;打开K7,关闭K0、K1、K2、K3、K4、K5、K6,L7亮;按任意键,退出该实验。

七、实验心得1、通过本次实验,了解了8255芯片的基本内部结构和它的管脚,掌握了8255方式0的工作原理及使用方法,2、本次实验前,自己认真地做了预习,实验过程中,认真思考,积极探索,实验后,查阅资料,提炼总结。

8255A并行口实验

8255A并行口实验

学号实习报告计算机应用综合实习—硬件起止日期:2009 年09月14日至2009 年09月21日学生姓名班级成绩指导教师(签字)电子与信息工程系2009年9 月20 日一、实习目的(1)利用微机接口芯片8255,并行控制LED点阵显示。

(2)掌握8088微机系统与LED点阵之间接口电路设计及编程。

二、实习要求利用589H实习系统扩展接口CZ7座,在控制板MC1上以并行方式控制LED点阵显示。

要求自建字库,编制程序将自己的姓名或图形实现左移、右移,上下移动。

三、编程指南根据提供I/O地址、功能,有不同I/O口分别提供自行代码送行,列扫描信号送列扫描行,凡字形代码位“1”、列扫描信号“0”该点点亮,否则灯熄,通过逐行扫描,循环点亮字形获曲线。

四、硬件连接图五、程序代码;CODE SEGMENT;ASSUME CS:CODE ;USR-LED 16X16XPA EQU 8000H ;L-SAO-1,CTL-MODE:BING XIN KO XPB EQU 8001H ;L-SAO-2;----------------------------------------------------------------------------------------------PA EQU 0FF28H ;H-CODE-1XPC EQU 8002H ;H-CODE-2XPCTL EQU 8003HPCTL EQU 0FF2BHDATA SEGMENT AT 0ORG 2db0HFL DB ? ;BL SAO FLAGR0 DW ?;H-CODER1 DB ? ;L-CODER6 DW ?;XPA/XPBDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAORG 2DC0HSTART: MOV DX,XPCTLMOV AL,80HOUT DX,ALMOV DX,PCTLOUT DX,ALCALL OFFLEDMOV AL,00HMOV FL,ALMOV R6,8000H ;XPAX0: MOV R0,0000HX1: CALL DEL1INC R0INC R0CMP R0,0130HJNZ X1JMP X0DISPW:PUSH R0 ;H-NUMMOV R1,01H ;L-NUMDISP1: MOV AX,R0MOV BX,OFFSET TAB ADD BX,AXMOV AL,CS:[BX]MOV DX,PAOUT DX,ALINC R0MOV AX,R0MOV BX,OFFSET TAB ADD BX,AXMOV AL,CS:[BX]MOV DX,XPCOUT DX,ALMOV DX,R6MOV AL,R1NOT ALOUT DX,ALMOV CX,0080HLOOP $CALL OFFLEDINC R0RCL R1,1JNC DISP1CMP FL,00HJNZ EXITINC FLCLCMOV R1,01HMOV R6,8001HJMP DISP1EXIT: MOV R6,8000H MOV FL,00HPOP R0RETOFFLED: MOV DX,XPA MOV AL,0FFHOUT DX,ALMOV DX,XPBOUT DX,ALDEL1: MOV CX,0020HCON1: PUSH CXCALL DISPWPOP CXLOOP CON1RETTAB: d b00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h db00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h DB02H,00H,04H,10H,08H,14H,10H,92H,20H,51H,0C0H,30H,60H,13H,1C H,1CHDB08H,10H,00H,00H,0E0H,1FH,04H,00H,02H,00H,0FCH,0FFH,00H,00H, 00H,00HDB00H,12H,00H,12H,80H,12H,7FH,14H,0A2H,0FFH,22H,14H,0A2H,10H, 22H,03HDB22H,7CH,22H,48H,22H,48H,0BFH,4FH,00H,48H,00H,48H,00H,08H,00 H,00HDB02H,00H,04H,10H,08H,14H,10H,92H,20H,51H,0C0H,30H,60H,13H,1C H,1CHDB08H,10H,00H,00H,0E0H,1FH,04H,00H,02H,00H,0FCH,0FFH,00H,00H, 00H,00HDB04H,00H,04H,40H,04H,40H,0FCH,43H,04H,40H,04H,40H,04H,40H,04 H,40HDB0FCH,7FH,04H,41H,04H,41H,04H,41H,04H,41H,04H,41H,04H,40H,00 H,00HDB06H,02H,0F8H,12H,04H,12H,02H,12H,0FEH,0FFH,42H,12H,42H,12H, 02H,41H0FAH,43H,12H,7DH,12H,41H,12H,45H,12H,43H,0FAH,7DH,02H,00H,00H,00HDB21H,00H,21H,00H,22H,01H,22H,7DH,24H,45H,28H,45H,30H,45H,0E0H,45HDB30H,45H,28H,45H,24H,45H,26H,7DH,23H,01H,22H,00H,20H,00H,00H,00HDB00H,02H,00H,04H,0FEH,0FH,00H,38H,00H,0E2H,80H,44H,80H,08H,90H,10HDB88H,28H,8EH,0E7H,94H,12H,0A0H,08H,0C0H,06H,80H,03H,00H,02H,00H,00HDB00H,00H,80H,08H,80H,30H,80H,24H,80H,24H,80H,24H,82H,24H,81H,0A4HDB0FEH,67H,80H,24H,80H,24H,80H,24H,80H,24H,80H,30H,00H,20H,00H,00Hdb00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00hdb00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00hdb00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00hdb00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00hCODE ENDSEND STAR T六、总结这次试验,硬件连接和软件使用起初并不是很熟练,而且在联机的时候出现问题,主要是硬件设施的连接牢固性。

实验七 8255 并行IO扩展实验

实验七 8255 并行IO扩展实验

实验七8255 并行I/O扩展实验一、实验要求利用8255 可编程并行口芯片,实现输入、输出实验,实验中用8255PA 口作读取开关状态输入,8255PB 口作控制发光二极管输出。

二、实验目的1、了解8255 芯片结构及编程方法。

2、了解8255 输入、输出实验方法。

三、实验电路及连线1、Proteus 实验电路2、硬件验证实验硬件连接表四、实验说明1、8255A 芯片简介:8255A 可编程外围接口芯片是INTEL 公司生产的通用并行接口芯片,它具有A、B、C 三个并行接口,用+5V 单电源供电,能在以下三种方式下工作:方式0:基本输入/ 输出方式方式l:选通输入/ 输出方式方式2:双向选通工作方式2、使8255A 端口A 工作在方式0 并作为输入口,读取Kl-K8 个开关量,PB 口工作在方式0作为输出口。

五、实验程序流程图六、实验步骤1、Proteus 仿真a.在Proteus 中打开设计文档8255_STM.DSN;b.建立实验程序并编译,仿真;c.如不能正常工作,打开调试窗口进行调试。

参考程序:CODE SEGMENTASSUME CS:CODEIOCON EQU 8006HIOA EQU 8000HIOB EQU 8002HIOC EQU 8004H START:MOV AL,90HMOV DX,IOCONOUT DX,ALNOPSTART1:NOPNOPMOV AL,0MOV DX,IOAIN AL,DXNOPNOPMOV DX,IOBOUT DX,ALJMP START1 CODE ENDSEND START2、实验板验证a.通过USB 线连接实验箱b.按连接表连接电路c.运行PROTEUS 仿真,检查验证结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define PC XBYTE[0x0002] //定义8255B地址
#define COM XBYTE[0x0003] //定义8255B控制寄存器地址
//待显示字符队列编码
uchar code DSY_CODE_Queue[ ]=
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
// 6:0x82
// 7:0xf8
// 8:0x80
// 9:0x90
// A:0x88
// B:0x83
// C:0xc6
// D:0xa1
// E:0x86
// F:0x8e
// DOT:0x7f
//数码管选通
uchar DSY_Index[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
// 9:0x90
// A:0x88
// B:0x83
// C:0xc6
// D:0xa1
// E:0x86
// F:0x8e
// DOT:0x7f
// -:0xaf
//数码管选通
uchar DSY_Index[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
//共阳极的7段集成式数码管对应编码
// 0:0xc0
// 1:0xcf
// 2:0xa4
// 3:0xb0
// 4:0x99
// 5:0x92
// 6:0x82
// 7:0xf8
// 8:0x80
while(1)
{
for (j=0;j<40;j++) //刷新一段时间,使显示内容不会滚动过快
{
for (k=0;k<8;k++) //在8只数码管上动态显示各字符
{
PB= DSY_Index[k]; //位码
PA= DSY_CODE_Queue[k+i]; //段码
DelayMS (1);
}
}
//刷新显示一段时间后递增1,形成滚动效果,最大索引为14
DelayMS (1);
}
}
//刷新显示一段时间后递增1,形成滚动效果,最大索引为14
i= (i+1)%15;
}
}
/*******************************************
实验33:用8255实现接口扩展
******************************************/
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
//PA,PB,PC端口及命令端口地址定义
#define PA XBYTE[0x0000]//定义8255A地址
#define PB XBYTE[0x0001]//定义8255B地址
#define PC XBYTE[0x0002]//定义8255B地址
//延时
void DelayMS (uint ms)
{uchar i;
while(ms--) for (i=0;i<120;i++);
}
/********主程序********/
void main( )
{
uchar i,j,k;
//8255工作方式选择:PA,PB均输出,工作方式0
COM=0x80;
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
uchar code DSY_CODE_Queue_TIME[ ]=//时间段码
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xcf, 0x82, 0x7f, 0xa4, 0xb0,
while(1)
{
for (j=0;j<40;j++) //刷新一段时间,使显示内容不会滚动过快
{
for (k=0;k<8;k++) //在8只数码管上动态显示各字符
{
PA= DSY_Index[k];//位码
PC= DSY_CODE_Queue_DAY[k+i];//日期段码
PB= DSY_CODE_Queue_TIME[k+i]; //时间段码
i= (i+1)%15;
}
}
2、用Proteus软件仿真
经过Keil软件编译通过后,可利用Proteus软件仿真。在Proteus ISIS编辑环境中绘制仿真电路图。开配套实验3仿真原理图文件“ex3.DSN”,将编译好的“ex3.hex”文件载入AT89C51,启动仿真。
五、思考题
本实验中仅使用了PA、PB端口,完成本次实验调试后,再加一组相同的8位数码管,用PA控制两组数码管,PB控制第一组数码管,PC控制第二组数码管,在两组数码管上同时显示出年月日和时分秒等信息。
实验三并行I/O口8255扩展
一、实验目的
1、了解8255A芯片的结构以及编程方法
2、掌握通过8255A并行口读取开关数据的方法
二、实验说明
本次实验用通过8255扩展接口,仅通过P0端口控制8只集成式7段数码管的显示控制。8255A的PA、PB端口分别连接8位数码管的段码和位码,程序控制数码管滚动显示一串数字。
0xA4,0xC0,0xC0,0x80,0xC0,0x80,0xF9,0x80,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
//共阳极的7段集成式数码管对应编码
// 0:0xc0
// 1:0xcf
// 2:0xa4
// 3:0xb0
// 4:0x99
// 5:0x92
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
//PA,PB,PC端口及命令端口地址定义
#define PA XBYTE[0x0000] //定义8255A地址
#define PB XBYTE[0x0001] //定义8255B地址
//延时
void DelayMS (uint ms)
{uchar i;
while(ms--) for (i=0;i<120;i++);
}
/********主程序********/
void main( )
{
uchar i,j,k;
//8255工作方式选择:PA,PB均输出,工作方式0
COM=0x80;
三、实验线路图
四、实验步骤
1、先建立文件夹“ex3”,然后建立“ex3”工程项目,最后建立源程序文件“ex3.c”,输入如下源程序;
/*******************************************
实验3:用8255实现接口扩展
******************************************/
#define COM XBYTE[0x0003]//定义8255B控制寄存器地址
//待显示字符队列编码
uchar code DSY_CODE_Queue_DAY[ ]=//日期段码
{0xff, 0xff, 0xff,
0xA4, 0xC0, 0xcf, 0xa4, 0xbf, 0xcf, 0xcf, 0xbf, 0xc0, 0x80,
相关文档
最新文档