简介:本资源是一份面向高校微机接口课程学生的8255A可编程并行接口芯片实验报告,聚焦基础硬件编程实践,解决学生对I/O扩展芯片工作原理、方式0配置及汇编控制逻辑理解不深的问题。报告完整覆盖LED静态显示(学号后两位二进制输出)、开关状态实时映射显示、八位七段数码管动态刷新显示三大典型实验,含详细硬件连线图、带逐行注释的汇编源码、程序流程图及现象分析与排错记录,助力初学者建立软硬协同调试能力。资源为单文件docx文档,大小141KB,结构清晰,含实验目的、原理、过程、代码、结论与教师评阅栏,适合作为课程作业参考或考前复盘材料。目前已有811人学习下载,内容扎实、即拿即用,是掌握8255A基础应用不可多得的实操型教学资料。
1. 这不是“古董芯片”,而是你第一次亲手点亮硬件的开关:8255A 是什么、为什么今天还要学它?
你有没有试过——写完一段代码,点下运行,屏幕上跳出个“Hello World”,心里一松:成了。但那只是软件在自己的世界里自说自话。真正让人手心出汗、心跳加快的,是第一次把代码变成真实的光:按下开关,LED 亮了;拨动旋钮,数码管跳出了你学号的数字;你写的那行OUT DX, AL,真的让电流流进了物理世界的铜线里。
8255A 就是干这个的——它是一块“翻译官芯片”,站在老式微机(比如 8088)和外部硬件(LED、开关、数码管)之间。CPU 只会发“数字指令”,比如AL = 01H,但它不懂怎么让一个 LED 发光;8255A 懂。它把 CPU 的“一句话”翻译成“八根线同时输出高/低电平”,于是 8 个灯按你的意思,该亮的亮、该灭的灭。它不炫酷,没有 AI,不能跑大模型,但它让你第一次看清:软件和硬件之间,原来只隔着一个控制字、一次端口输出、一根接线。
别被“微机接口”“汇编语言”吓住。这份《8255A 基础实验报告》不是考古文献,而是一份可复现的入门通关手册:它用最朴素的 GX-8000 实验箱、最基础的方式 0、三段带逐行注释的汇编代码,带你从“连错一根线灯就不亮”的手忙脚乱,走到“我改个数字,灯就跟着变”的笃定。零基础?没关系。只要你能看懂MOV AL, 80H是“往寄存器 AL 里放个十六进制数”,你就已经站在起点线上了。它不教你怎么造芯片,但教会你——怎么让芯片听你的话。而这,是所有嵌入式、单片机、甚至现代 IoT 开发者,绕不开的第一课。
2. 先搞懂一个核心概念:8255A 不是“万能插座”,而是三组可编程的“电子水龙头”
很多人第一次看到 8255A,第一反应是:“这芯片有 A、B、C 三个口,那我直接往 A 口送数据,灯就该亮了吧?”——然后发现灯不亮,查半天,最后发现:你忘了先给它下命令,告诉它“A 口现在要当输出口用”。这就像你拧开水龙头前,得先打开总阀门。8255A 的“总阀门”,就是它的控制字。
2.1 8255A 的真实结构:三口两组一控字
别被“3 个 8 位端口”绕晕。我们把它拆成你厨房里能理解的东西:
- A 口、B 口、C 口:就像三根独立的水管,每根能同时控制 8 个“水龙头”(也就是 8 根数据线,D0~D7)。每个“水龙头”开=高电平(+5V),关=低电平(0V)。
- A 组 / B 组:这是内部管理逻辑。A 组管 A 口 + C 口高 4 位(CH0~CH3),B 组管 B 口 + C 口低 4 位(CL0~CL3)。你不用天天想它,但记住:C 口可以被“掰开”用——比如 A 口做输出,B 口做输入,C 口高 4 位去控制数码管的“哪一位亮”,低 4 位空着或干别的。
- 控制寄存器(地址通常是 283H):这才是真正的“总控台”。你往这里写一个字节(比如
80H或92H),8255A 就立刻知道自己该怎么配置三个口——哪个是输入、哪个是输出、用哪种工作方式。没写控制字,三个口默认是“锁死”状态,啥也不干。
提示:GX-8000 实验箱上,8255A 的四个端口地址是固定的:A 口=280H,B 口=281H,C 口=282H,控制口=283H。这不是巧合,是硬件设计时焊死的“门牌号”,你必须记牢,否则
OUT DX, AL会把数据发到空气里。
2.2 方式 0:新手唯一该先啃下的“基本款”
8255A 有三种工作方式(0/1/2),但对初学者,方式 0 就是全部。它有多简单?——它就是“纯手工挡位”:
- 输入:你读
IN AL, DX,它就把当前接在那个口上的开关/传感器的 8 位状态,原封不动塞进 AL 寄存器; - 输出:你写
OUT DX, AL,它就把 AL 里的 8 位数,原封不动变成 8 根线的高低电平,驱动 LED 或数码管。
没有握手信号,没有中断请求,没有自动缓冲。它不聪明,但极其诚实:你给它什么,它就输出什么;你问它什么,它就答什么。这种“傻瓜式”恰恰是入门的黄金起点——所有玄学,都源于你还没看清最基础的因果链。
2.3 控制字怎么算?一张表秒懂,不用背口诀
控制字是一个 8 位二进制数(如10000000B),每一位都有明确含义。别死记硬背,用这张“填空表”:
| 位位置 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|---|
| 含义 | 必为 1(标识控制字) | A 组工作方式 | A 组工作方式 | A 口方向(0=输入,1=输出) | C 口高 4 位方向(0=输入,1=输出) | B 组工作方式 | B 口方向(0=输入,1=输出) | C 口低 4 位方向(0=输入,1=输出) |
现在,我们来解第一个实验的控制字80H(即10000000B):
- D7=1 → 确认是控制字;
- D6D5=00 → A 组方式 0;
- D4=1 → A 口输出;
- D3=0 → C 口高 4 位输入(但我们没用它,无所谓);
- D2=0 → B 组方式 0;
- D1=0 → B 口输入(本实验没用 B 口,所以设成输入也行);
- D0=0 → C 口低 4 位输入。
所以80H的真实意思是:“A 口给我设成方式 0 输出,其他口随便,我先不用。”
再看第二个实验的92H(10010010B):
- D7=1 → 控制字;
- D6D5=00 → A 组方式 0;
- D4=1 → A 口输出;
- D3=0 → C 高 4 位输入;
- D2=0 → B 组方式 0;
- D1=1 → B 口输出?不对!等等——
92H是10010010B,D1 是倒数第二位,是1?查表:D1 是 B 口方向位,1表示输出。但实验要求 B 口读开关,应该是输入!
→ 这里原文有笔误。正确控制字应为10000010B(即82H),D1=0 才对。这就是新手最容易栽的第一个坑:抄代码不校验控制字,结果 B 口被设成输出,读不到开关状态。我们后面“避坑章”会重点讲。
2.4 地址与端口:为什么DX总是 280H、281H、282H、283H?
你可能会问:“为什么地址是 280H,不是 300H 或 100H?”——因为 GX-8000 实验箱的电路板上,8255A 芯片的地址线 A0~A1 是直接连到系统总线的特定引脚上的。硬件工程师在设计时,就把它的 I/O 映射固定死了:
- A0=0, A1=0 → 选中 A 口 → 地址 = 基地址 + 00 = 280H
- A0=1, A1=0 → 选中 B 口 → 地址 = 基地址 + 01 = 281H
- A0=0, A1=1 → 选中 C 口 → 地址 = 基地址 + 10 = 282H
- A0=1, A1=1 → 选中控制口 → 地址 = 基地址 + 11 = 283H
基地址 280H 是由实验箱的地址译码电路决定的(通常由 74LS138 等芯片完成)。你不需要懂译码电路,但必须接受:在 GX-8000 上,这四个地址是铁律,改一个,整个实验就失效。它不像高级语言可以#define PORT_A 0x280,这里是物理世界的硬编码。
2.5 电平逻辑:为什么“亮”是 0 还是 1?取决于硬件接法!
这是另一个让无数人通宵调试的“玄学”点。实验报告里写:“现象:8 个 LED 灯,前七个不亮,最后一个亮。结论:说明试验成功,高电位灯亮。”
但如果你换一块实验箱,或者自己搭电路,可能发现:高电平反而灭,低电平才亮!为什么?
答案藏在硬件连线里:LED 是“共阴极”还是“共阳极”?
- 共阴极(GX-8000 用的就是这个):所有 LED 的负极(阴极)连在一起接地(GND)。那么,只有当你给某根正极线(比如 A0)加高电平(+5V),电流才能从 +5V → LED → GND 形成回路,灯才亮。所以
AL = 01H(二进制00000001)→ 只有 A0 是高电平 → 第一个灯(最右边)亮。 - 共阳极:所有 LED 正极连在一起接 +5V。这时,你要给某根线加低电平(0V),电流才能从 +5V → LED → 0V 流通,灯才亮。所以
AL = FEH(11111110B)才会让第一个灯亮。
提示:GX-8000 实验箱文档明确写了“LED 采用共阴极连接”,所以你放心用高电平点亮。但请永远养成习惯:动手前,先翻硬件说明书,确认电平逻辑。这是你从“抄代码”走向“懂硬件”的分水岭。
3. 第一个例子跑起来:LED 静态显示,从零开始敲出你的第一行“硬件 Hello World”
现在,我们扔掉所有理论,直接上手。目标:让 8 个 LED 中,只亮第 1 个(最右边),对应你学号后两位的二进制表示(比如学号 20230001,后两位是01,二进制00000001)。这一步,你会亲手完成:连好线、写好代码、编译、下载、看到光。
3.1 硬件准备:四根线,决定成败
你需要一台 GX-8000 微机实验系统(带 8255A 模块)、一根 PC 串口下载线、以及配套的汇编开发环境(如 MASM 或实验箱自带的 EDU8086)。硬件连线极其简单,但每一根都不能错:
| 8255A 端口 | 连线目标 | 说明 |
|---|---|---|
| A 口(PA0~PA7) | LED 模块的 L0~L7 | 注意顺序:PA0 → L0(最右 LED),PA1 → L1,…… PA7 → L7(最左 LED) |
| 8255A 的 CS 片选线 | 实验箱的 8255A-CS 插座 | 通常已由实验箱内部连好,确认插紧即可 |
| 8255A 的 RD、WR 读写线 | 实验箱的 RD、WR 插座 | 同样,出厂已连,检查无松动 |
| 电源与地线 | 实验箱主电源 | 确保 +5V 和 GND 接通,LED 模块指示灯应微亮 |
注意:实验报告图 1(LED 静态显示硬件连线图)是权威参考。如果你的实验箱版本不同,请以你手边设备的实物图为准。宁可多花 5 分钟核对连线,也不要花 2 小时查一个虚焊。
3.2 代码逐行解析:不只是复制,要读懂每一行在指挥什么
下面是你将要输入的完整汇编程序。我们不只贴代码,而是像导师一样,站在你旁边,告诉你每一行在做什么、为什么这么写:
DATA SEGMENT ; 【数据段定义】程序要处理的数据放这里 ID DB 01H ; 定义一个字节变量 ID,值为 01H(即二进制 00000001) DATA ENDS ; 数据段结束 CODE SEGMENT ; 【代码段定义】真正的指令放这里 ASSUME CS:CODE, DS:DATA ; 告诉汇编器:CS 寄存器指向代码段,DS 指向数据段 START: MOV AX, DATA ; 把 DATA 段的起始地址装进 AX 寄存器 MOV DS, AX ; 再把 AX 的值送给 DS(数据段寄存器),这样 CPU 才知道去哪找 ID 变量 ; ------------------- 第一步:初始化 8255A,写控制字 ------------------- MOV AL, 80H ; 准备控制字:80H = 10000000B → A口输出,方式0 MOV DX, 283H ; DX = 283H → 指向 8255A 的控制口地址 OUT DX, AL ; 把 AL 里的 80H “输出”到控制口 → 8255A 立刻切换模式! ; ------------------- 第二步:往 A 口送数据,点亮 LED ------------------- MOV AL, ID ; 把变量 ID 的值(01H)装进 AL MOV DX, 280H ; DX = 280H → 指向 8255A 的 A 口地址 OUT DX, AL ; 把 AL 里的 01H 输出到 A 口 → PA0=1, PA1~PA7=0 → 只有 L0(最右)亮! CODE ENDS ; 代码段结束 END START ; 程序入口点是 START 标签关键点白话解释:
MOV AX, DATA+MOV DS, AX:这是 DOS 时代汇编的“仪式感”。CPU 有两个重要寄存器:CS(代码段)和 DS(数据段)。你定义的ID在数据段里,但 CPU 默认不知道它在哪,所以必须手动把数据段的地址告诉 DS。漏掉这两行,MOV AL, ID会读到一堆乱码,灯要么全灭,要么乱闪。OUT DX, AL:这是魔法发生的瞬间。OUT是 x86 的专用指令,意思是“把 AL 寄存器的值,通过数据总线,送到 DX 寄存器指定的硬件端口”。它不是写内存,是直接向芯片发号施令。DX=283H时,命令发给控制口;DX=280H时,数据发给 A 口。ID DB 01H:这里01H是十六进制,等于十进制 1,二进制00000001。所以只有最低位(PA0)是 1,对应最右边的 LED(L0)。如果你想显示学号后两位15(十进制),就要写ID DB 0FH(因为 15 的十六进制是 0F)。
3.3 编译与下载:三步走,别让环境卡住你
GX-8000 通常配有一套简易集成环境(如 EDU8086),操作流程统一:
- 新建文件:打开软件,新建
.asm文件,把上面的代码完整复制进去,保存为led_static.asm。 - 编译(Assemble):点击“编译”按钮(或按 F10)。如果出现
Error,一定是语法错误(比如少了个冒号、字母大小写错)。常见错误:ID DB 01→ 错!必须写ID DB 01H,H表示十六进制,否则汇编器当十进制 1 处理,虽然结果一样,但严格语法要求加H。MOV DS, DATA→ 错!DATA是段名,不是地址,必须先MOV AX, DATA再MOV DS, AX。
- 下载(Download):编译成功后,点击“下载”或“装载”,选择
led_static.obj(或.hex文件),发送到实验箱。此时,实验箱的“运行”指示灯应闪烁,表示程序已载入内存。
3.4 运行与观察:光,就是最好的反馈
按下实验箱的“RUN”键(或复位键),立刻看 LED 区域:
- ✅ 成功现象:8 个 LED 中,只有最右边一个(L0)稳定点亮,其余全灭。
- ❌ 失败现象及速查:
- 全灭:检查
OUT DX, AL是否执行了?断点调试,看AL是否为01H;再查连线,PA0 是否真连到了 L0。 - 全亮:
AL值可能是FFH(255),检查ID DB是否写错了。 - 乱闪/不稳定:可能是程序没停住,一直在重复执行(但本程序是单次执行,不会循环,所以大概率是硬件接触不良)。
- 全灭:检查
恭喜你!你刚刚完成了人生中第一个“软硬协同”项目。你写的不是字符串,是电流;你调试的不是逻辑,是物理世界的通断。这种掌控感,是任何纯软件项目给不了的。
4. 避坑指南:新手必踩的 5 个“血泪坑”,我替你都翻过车了
刚上手时,90% 的时间不是花在写代码上,而是花在“为什么灯不亮”上。这些坑看似低级,但每一个都足以让你怀疑人生。我把当年自己和 A 同学在实验室熬过的夜、撕过的纸,浓缩成这 5 条,条条带解决方案:
4.1 坑一:控制字写错,端口“装死”不响应
- 现象:程序编译下载都成功,但 LED 一动不动,用万用表测 A 口电压全是 0V 或全是 5V(不随程序变)。
- 原因:控制字没写对,或者根本没执行
OUT DX, AL这条指令。比如把80H错写成08H(D7=0,CPU 不认它是控制字),或者DX地址写成284H(压根没这个口)。 - 解决:第一步,用调试器单步执行,停在
OUT DX, AL前,看AL=80H且DX=283H吗?第二步,确认OUT指令执行后,再查DX=280H时AL的值是否是你想要的。永远相信硬件,怀疑自己的代码。
4.2 坑二:数据段没初始化,ID变量读出“垃圾值”
- 现象:LED 亮的位置完全随机,每次运行都不一样,或者全亮/全灭。
- 原因:漏掉了
MOV AX, DATA和MOV DS, AX。此时DS寄存器是随机值,MOV AL, ID就是从内存一个未知地址读数据,当然不可预测。 - 解决:把这两行当成“咒语”,写代码第一件事就是贴上去。可以在
START:后立刻加一行NOP(空操作),用调试器停在这儿,看DS值是否已变成你数据段的正确地址(比如1234H)。
4.3 坑三:LED 电平逻辑反了,“亮”和“灭”颠倒
- 现象:你想亮 L0,结果 L7 亮了;或者
ID DB 01H时全灭,ID DB FEH时 L0 亮。 - 原因:你以为是共阴极,但实际电路是共阳极(或反之)。GX-8000 是共阴极,但如果你用的是其他实验箱,或自己焊接的板子,必须实测。
- 解决:最笨但最有效的方法——拿一根杜邦线,一端接 +5V,另一端依次碰 L0~L7 的引脚。哪个灯亮,就证明那个引脚接的是 LED 正极,从而反推电平逻辑。永远以实测为准,不迷信文档。
4.4 坑四:地址线接触不良,“280H”变成了“281H”
- 现象:A 口没反应,但 B 口的 LED 却跟着变了;或者改了
ID值,LED 亮的位置完全不符合二进制规律。 - 原因:实验箱的排线松了,尤其是 A0 或 A1 地址线虚接。比如 A0 线断了,那么
280H(A0=0)和281H(A0=1)地址就重合了,你本想写 A 口,结果数据全进了 B 口。 - 解决:关机,拔下所有排线,用橡皮擦轻轻擦拭金手指(铜片),再用力插紧。重点检查标有
A0、A1、D0~D7的线缆。硬件问题,80% 出在连接上。
4.5 坑五:汇编语法细节翻车,DB和DW混用
- 现象:编译报错
Operand types do not match,或者程序运行后AL里的值比你写的ID大很多。 - 原因:
ID DB 01H定义的是一个字节(8 位),但如果你不小心写成ID DW 01H(DW=Define Word,定义一个字,16 位),那么MOV AL, ID就只读了低 8 位,高 8 位还在内存里,可能污染后续数据。 - 解决:牢记口诀——LED、开关、数码管,都是 8 位设备,一律用
DB定义变量。DW留给需要 16 位计数器或地址的时候(比如延时循环的CX)。
5. 从开关到数码管:把输入和输出串起来,理解“闭环”的力量
LED 静态显示是“你给,它亮”,属于单向输出。但真正的控制系统,必须有输入 → 处理 → 输出的闭环。开关数显示实验,就是给你装上“眼睛”,让你第一次感知外部世界的变化。
5.1 开关数显示:让硬件“开口说话”
目标:8 个拨码开关(K0~K7)的状态,实时反映在 8 个 LED(L0~L7)上。你拨动 K0,L0 就跟着亮/灭。这不再是预设数据,而是实时采集 + 实时反馈。
硬件连线(图 3 的关键点)
- B 口(PB0~PB7)→ 开关模块的 K0~K7(注意顺序:PB0 接 K0,PB1 接 K1……)
- A 口(PA0~PA7)→ LED 模块的 L0~L7(同前)
为什么 B 口接开关?因为开关在未按下时,通过上拉电阻默认为高电平(+5V);按下时,接地变为低电平(0V)。所以开关状态1= 未按下(高电平),0= 按下(低电平)。这和 LED 的“高电平亮”逻辑一致,省去了额外的取反操作。
程序核心逻辑:一个永不停歇的“搬运工”
START: MOV AL, 82H ; 控制字:A口输出,B口输入,方式0(注意:原文92H是错的,应为82H) MOV DX, 283H OUT DX, AL LP1: MOV DX, 281H ; 读 B 口(开关状态) IN AL, DX ; AL 现在存着 K0~K7 的 8 位状态(K0 在最低位 AL.0) MOV DX, 280H ; 写 A 口(LED) OUT DX, AL ; 把开关状态,原封不动搬到 LED 上 JMP LP1 ; 跳回 LP1,无限循环,实现“实时”白话解释循环:JMP LP1是灵魂。它让 CPU 像个不知疲倦的工人,一遍遍执行:
- 去 B 口“看一眼”开关(
IN AL, DX); - 转身到 A 口,“照着样子”点亮 LED(
OUT DX, AL); - 立刻回头再看……
这个循环快到人眼无法分辨,所以 LED 看起来是“同步”跟随开关的。这就是最原始的“实时操作系统”内核——一个永不退出的主循环。
5.2 七段数码管显示:用“时间换空间”,点亮八个数字
静态显示只能亮一个数字,但我们要在 8 个数码管上显示 8 位学号(如00150702)。硬件限制:所有数码管共用 a~g 段码线,只能靠“位选”(B0~B7)决定谁亮。怎么办?分时复用:同一时刻,只让一个数码管亮,但切换速度够快,人眼就以为是“全亮”。
数码管原理:共阴极 + 位选 = “轮岗制”
- GX-8000 数码管是共阴极:所有段的负极连在一起接地。要让某段(如 a 段)亮,就得给它的正极加高电平。
- 位选信号(B0~B7):这是“上岗证”。只有当 B0=1 时,最右边的数码管才被允许接收段码;B1=1 时,右数第二个上岗…… 其他时候,它们都被“关禁闭”(位选=0,无论段码是什么,都不亮)。
程序骨架:三层嵌套,控制“谁亮”、“亮什么”、“亮多久”
; 数据段:学号数组 + 段码表 DATA SEGMENT NO DB 0,0,1,5,0,7,0,2 ; 学号8位,按从左到右顺序存(高位在前) LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ; 0~9的段码(共阴极) DATA ENDS ; 代码段核心循环 FLAG0: MOV DI, 0 ; DI=0,指向 NO[0](第一位数字) MOV CL, 8 ; CL=8,总共8位要显示 MOV AH, 10000000B ; AH=10000000B,位选码:先让最左边(B7)亮 FLAG1: MOV AL, NO[DI] ; 取第 DI 位数字(如 NO[0]=0) SUB AL, 0 ; 确保 AL 是 0~9 的数值(SUB 是保险操作) LEA BX, LED ; BX 指向段码表首地址 XLAT ; 关键指令!AL = LED[AL],即查表得段码(0→3FH) MOV DX, 281H ; 写 B 口:输出段码 OUT DX, AL MOV AL, AH ; 把位选码(如10000000B)放进 AL MOV DX, 280H ; 写 A 口:输出位选 OUT DX, AL ; 延迟:让这个数码管“亮够时间”,人眼才看得清 MOV CX, 0FFH FLAG2: LOOP FLAG2 ; 空循环,消耗时间 ROR AH, 1 ; 位选码右移:10000000B → 01000000B,下一位上岗 INC DI ; DI++,取下一位数字 DEC CL ; CL--,还剩几位 JNZ FLAG1 ; 如果 CL!=0,继续循环 JMP FLAG0 ; 全部显示完,从头再来,保持稳定关键指令XLAT解析:XLAT是 x86 的“查表指令”,专为这种场景设计。它等价于:AL ← (BX + AL)—— 即,以BX为基地址,AL为偏移量,取出内存中的一个字节,放回AL。
这里BX指向LED表首,AL是数字 0,所以XLAT后AL = LED[0] = 3FH(0 的段码)。没有XLAT,你得写 10 个CMP AL, 0JE ...的跳转,代码臃肿且易错。
为什么必须加延迟(LOOP FLAG2)?
如果不延迟,CPU 切换速度太快(微秒级),每个数码管只亮几微秒,人眼来不及响应,看到的就是一片模糊的残影,或者所有位重叠显示。加上MOV CX, 0FFH的循环,把每个数码管的点亮时间拉长到毫秒级,人眼就能清晰分辨“00150702”八个独立数字。这是“软件定时”的最朴素实践——用 CPU 空转,换取人眼的确定性。
6. 下一步学什么?从“会点灯”到“能设计”,一条不绕弯的进阶路径
你已经能点亮 LED、读取开关、驱动数码管,这三步走下来,8255A 的方式 0 对你来说,已经不是黑匣子,而是一张摊开的地图。但地图之外,还有更广阔的世界。别急着跳进新芯片,先把脚下这块地,耕得更深、更透。以下是我从某高校实验室带 A 同学做课程设计时,总结出的零基础到能独立设计的四步进阶路径,每一步都踩在真实项目需求上,不画饼,不灌水。
6.1 第一步:吃透方式 0 的所有组合,用 C 口做“智能开关”
你现在只会用 A 口输出、B 口输入。但 C 口的 8 位,是 8255A 最灵活的资源。它能被拆开用,也能组合用。建议你立刻动手做两个小实验:
- 实验 A:C 口高 4 位做“模式选择键”
把 4 个开关接到 C 口高 4 位(PC4~PC7),A 口接 8 个 LED。写程序:- 当 PC4~PC7 =
0000→ LED 显示学号; 0001→ LED 显示学号的 ASCII 码(需查表);0010→ LED 显示学号每位的平方(如 1→1, 5→25→5);0011→ 自定义。
- 当 PC4~PC7 =
本文还有配套的精品资源,点击获取