单片机输入输出IO扩展
单片机IO扩展8155(二)
![单片机IO扩展8155(二)](https://img.taocdn.com/s3/m/fd7d60227f21af45b307e87101f69e314332fad5.png)
单片机IO扩展8155(二)引言概述:本文是关于单片机IO扩展8155(二)的文档。
单片机IO扩展8155是一种常用的外围芯片,通过它可以扩展单片机的IO口数量,增强单片机的输入输出能力。
本文将从以下五个大点进行阐述:8155的工作原理、连接方式、编程方法、使用注意事项以及实际应用场景。
正文:一、8155的工作原理:1. 了解8155芯片的工作原理非常重要,它包含了输入输出和存储器的功能。
通过将数据存储在8155的内部存储器中,可以对数据进行快速读取和写入。
2. 8155芯片的工作模式有三种,分别是输入模式、输出模式和可编程模式。
根据需要选择合适的模式,以满足不同的应用需求。
二、8155的连接方式:1. 了解8155芯片的引脚连接方式对于正常使用很重要。
典型的连接方式包括将单片机的IO引脚与8155芯片的数据线、地址线和控制线相连。
2. 需要注意的是,在连接过程中要避免引脚连接错误或多余的接触点,以确保连接的稳定性和可靠性。
三、8155的编程方法:1. 编写控制8155芯片的程序非常重要。
通常,需要配置控制字寄存器、设置端口为输入或输出模式,并对数据进行读取和写入。
2. 在编写程序时,可以利用单片机的IO口的编程经验,结合8155芯片的读写操作进行编程。
四、8155的使用注意事项:1. 在使用8155芯片时,需要遵循一些注意事项。
例如,应注意适当的电源供应和地线连接,以确保8155芯片的稳定工作。
2. 此外,还需要注意数据的有效性和稳定性,以及合适的时序和时钟设置。
五、8155的实际应用场景:1. 了解8155芯片的实际应用场景对于深入理解其用途非常重要。
8155芯片广泛应用于电子设备中,例如工业自动化、通信设备和家用电器等领域。
2. 在不同的应用场景中,可以利用8155芯片来实现各种输入输出功能,扩展单片机的能力,并提高整体系统的灵活性和可扩展性。
总结:通过本文的介绍,我们对单片机IO扩展8155(二)有了更深入的了解。
单片机IO扩展芯片
![单片机IO扩展芯片](https://img.taocdn.com/s3/m/e3a9d489bceb19e8b8f6ba8a.png)
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
8 9 10 7 11
CE RD WR IO/ M ALE
8155
6
TMR OUT
3
TMR IN
4
R ESET
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
21 22 23 24 25 26 27 28
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
MOVX @DPTR,A;从ACC 向74LS244的端口写数据
一、可编程芯片8155的扩展
• 8155是一个具有RAM、I/O和计数器的通用可编程 接口电路。其具有的资源为:
➢ 256B的静态RAM; ➢ 两个可编程的8位并行I/O口PA和PB; ➢ 一个可编程的6位并行I/O口PC; ➢ 一个可编程14位减计数器TC; ➢ 8位地址锁存器。
39 38 37 36 35 34 33 32
R ESET
INT0 INT1 T0 T1
P1. 0
P2. 0
P2. 1
MCS-51
P2. 2 P2. 3
P2. 4
P2. 5
P2. 6
P2. 7
21 22 23 24 25 26 27 28
P1. 1 P1. 2 P1. 3 P1. 4 P1. 5 P1. 6 P1. 7
VCC
15 14
T1 T0
89C51
31
EA/VP
+ 1 0u
19 18
X1 X2
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
9
R ESET
简单io口扩展实验报告
![简单io口扩展实验报告](https://img.taocdn.com/s3/m/c2c01f485bcfa1c7aa00b52acfc789eb172d9e97.png)
简单io口扩展实验报告
简单IO口扩展实验报告
本次实验旨在学习如何通过简单IO口扩展模块对单片机的IO口进行扩展,实现多个IO口的输入输出功能。
我们需要了解简单IO口扩展模块的基本原理和工作方式。
简单IO 口扩展模块通过与单片机的SPI总线进行通信,实现对其内部寄存器的读写操作,从而实现对IO口的扩展。
在实验中,我们使用STM32F103C8T6开发板和简单IO口扩展模块,通过连接它们的SPI总线,可以将扩展模块的IO口与开发板的IO口进行连接,实现IO口的扩展。
具体连接方式如下图所示:
(此处省略图片)
接下来,我们需要进行程序设计。
在初始化时,需要设置SPI总线的相关参数,然后对扩展模块进行初始化,将其内部寄存器中的数据清零。
然后,通过读写寄存器的方式,可以对扩展模块的每个IO 口进行配置,设置其输入输出状态、上下拉电阻等参数。
在程序中,我们可以通过读取扩展模块的输入口状态,判断是否有外部信号输入,根据需要进行相应的操作。
例如,当输入口接收到高电平信号时,可以控制某个输出口输出高电平信号,从而实现控制设备的功能。
在实验中,我们可以通过连接LED和按键来进行简单的IO口扩展实验。
将LED连接到扩展模块的输出口,按键连接到扩展模块的输入口,通过控制按键输入信号,实现对LED的控制。
总的来说,本次实验通过学习简单IO口扩展模块的原理和工作方式,掌握了通过SPI总线进行IO口扩展的方法,实现了对单片机多个IO口的输入输出控制,为后续的硬件控制和应用开发打下了基础。
MCS-51单片机IO口详解
![MCS-51单片机IO口详解](https://img.taocdn.com/s3/m/5b105b7b31b765ce05081406.png)
单片机IO口结构及上拉电阻MCS-51有4组8位I/O口:P0、P1、P2和P3口,P1、P2和P3为准双向口,P0口则为双向三态输入输出口,下面我们分别介绍这几个口线。
一、P0口和P2口图1和图2为P0口和P2口其中一位的电路图。
由图可见,电路中包含一个数据输出锁存器(D触发器)和两个三态数据输入缓冲器,另外还有一个数据输出的驱动(T1和T2)和控制电路。
这两组口线用来作为CPU与外部数据存储器、外部程序存储器和I/O扩展口,而不能象P1、P3直接用作输出口。
它们一起可以作为外部地址总线,P0口身兼两职,既可作为地址总线,也可作为数据总线。
图1 单片机P0口内部一位结构图图2 单片机P0口内部一位结构图P2口作为外部数据存储器或程序存储器的地址总线的高8位输出口AB8-AB15,P0口由ALE选通作为地址总线的低8位输出口AB0-AB7。
外部的程序存储器由PSEN信号选通,数据存储器则由WR和RD读写信号选通,因为2^16=64k,所以MCS-51最大可外接64kB的程序存储器和数据存储器。
二、P1口图3为P1口其中一位的电路图,P1口为8位准双向口,每一位均可单独定义为输入或输出口,当作为输入口时,1写入锁存器,Q(非)=0,T2截止,内上拉电阻将电位拉至"1",此时该口输出为1,当0写入锁存器,Q(非)=1,T2导通,输出则为0。
图3 单片机P2口内部一位结构图作为输入口时,锁存器置1,Q(非)=0,T2截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平,正因为这个原因,所以P1口常称为准双向口。
需要说明的是,作为输入口使用时,有两种情况:1.首先是读锁存器的内容,进行处理后再写到锁存器中,这种操作即读—修改—写操作,象JBC(逻辑判断)、CPL(取反)、INC(递增)、DEC(递减)、ANL(与逻辑)和ORL(逻辑或)指令均属于这类操作。
2.读P1口线状态时,打开三态门G2,将外部状态读入CPU。
IO接口电路及其扩展
![IO接口电路及其扩展](https://img.taocdn.com/s3/m/6d77a23f83c4bb4cf7ecd1e3.png)
;写控制字
LD:
;最左边灯亮 ;指向B口 ;取显示数据
;查数据编码 ;写B口 ;延时
39
MB DB DB DB DB DB DB DB MOV MOV DJNZ DJNZ
A, R3
A R3, A LD 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH R7, #02H R6, #FFH R6, LOOP R7, DELAY
6
+5V
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
1Y1 1Y2 1Y3 1Y4 1Y5 1Y6 1Y7 1Y8 1G 2G 7 4 L S 2 4 4 1A1 1A2 1A3 1A4 1A5 1A6 1A7 1A8
MCS-51
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR
MOV DPTR, #0FEFFH MOVX A,@DPTR ;确定扩展芯片地址 ;将扩展输入口内容读入累加器A
当与74LS244相连的按键都没有按下时,输入全为 8 1,若按下某键,则所在线输入为0。
典型芯片—74LS245
9
图13-3 74LS244构成的简单输入端口(b)
10
13.1.3 简单的并行口输出
CS:片选信号线,低电平有效。
RD:读信号,控制8255A将数据或状 态信息送给CPU。 WR:写信号,控制CPU将数据或控制 信息到8255A。
A1,A2:地址线,这两个引脚上的信 号组合绝对对8255A内部的哪一个口或 寄存器进行操作。
22
8255的操作表
表13-1 8255的操作
/CS 0 0 0 0 A1 A0 00 01 10 11 WR 0 0 0 0 RD 1 1 1 1 操作 总线=>端口A 总线=>端口B 总线=>端口C 总线=>命令控制字
单片机教程单片机IO的使用
![单片机教程单片机IO的使用](https://img.taocdn.com/s3/m/916c7f47854769eae009581b6bd97f192379bf5a.png)
IO口的位操作
位设置
通过将某一位设置为1或0,可以 控制该位对应的硬件设备的工作
状态。
位清除
将某一位清零,通常用于关闭某个 硬件设备。
位反转
将某一位取反,实现硬件设备的状 态切换。
IO口的配置寄存器
1 2
配置寄存器的功能
配置寄存器用于设置IO口的模式、输出类型、输 出速度等参数,以满足不同的硬件设备控制需求。
按键输入
01
```c
02
void main() {
03
unsigned char keyState = 0; // 按键初始状态为未 按下
按键输入
while (1) {
if
(GPIO_ReadInputDataBit(GPIOx,
GPIO_Pin_x) == 0) { // 检测按键是否被按下
if (keyState == 0) { // 如果之前未按下,则进 入处理函数
特性。
02
LED灯的连接方式
LED灯通常与单片机的一个GPIO(通用输入输出)端口连接,通过控
制该GPIO端口的电平高低来控制LED灯的亮灭。
03
LED灯的控制代码
在单片机程序中,可以通过设置GPIO端口的寄存器值来控制LED灯的
亮灭,例如在C语言中,可以使用以下代码实现LED灯的闪烁
LED灯控制
• delay(1000);
LED灯控制
} } ```
按键输入
按键输入的原理
按键输入通常通过单片机的中断或轮询方式实现,当按键被按下时,会触发一个电平变化 或中断事件。
按键输入的连接方式
按键通常与单片机的一个GPIO端口连接,当按键被按下时,该GPIO端口的电平会发生跳 变。
IO接口的扩展(8155)
![IO接口的扩展(8155)](https://img.taocdn.com/s3/m/5881fc3831126edb6f1a1096.png)
三、用可编程接口芯片扩展
1. 8155 RAM/IO扩展芯片介绍 ⑴8155RAM和I/O口的寻址 8155 共有256个字节RAM ,可以 安排在64k字节外RAM空间的任一区域 中,具体由CE、IO/M与MCS-51单片 机的高位地址线的连接方法确定。单片 机访问时应使CE=0,IO/M=0;片内 单元由AD0~AD7确定。
三、用可编程接口芯片扩展
1. 8155 RAM/IO扩展芯片介绍
⑹PC端口:这是6位端口,可作为输 入口、输出口或作为PA、PB的联络 线。
三、用可编程接口芯片扩展
1. 8155 RAM/IO扩展芯片介绍
⑺定时器/计数器:由两个8位寄存器 构成,其中14位作为计数初值寄存 器和计数器,还有两位用于选择输 出方式;其格式如图4.26所示; 定时器输出波形如图4.27所示。
图4-29 8031和8155接口的键盘、显示电路
开始
置初值:扫描数位初值→R3 显示缓冲器首址→R0
返回主程序
扫描模式→PA口
Y N
所有数位都显 示完否
要显示的数值→A
查找数值的字形代码
修正显示缓冲地址值
相应的字形代码→ PB口字形代码寄存器
显示1ms
图4-30 扫描显示子程序流程图
现设要显示的数据存入地址号为30H~37H的片内RAM作为显示缓冲 区。采用动态扫描显示,每位显示1ms。显示子程序如下: 初始化程序: OGM: MOV DPTR,#0FD00H MOV A,#03H MOVX @DPTR,A ;显示子程序 DIR: MOV R0,#30H MOV R3,#01H LD0: MOV A,R3 MOV DPTR,#0FD01H MOVX @DPTR,A INC DPTR MOV A,@R0 MOV A,#0DH 代 ;控制字→控制寄存器中
第一章 单片机IO接口的扩展---8255
![第一章 单片机IO接口的扩展---8255](https://img.taocdn.com/s3/m/953524cd0508763231121280.png)
单片机对外设的控制方式
(1)程序查询方式
这种方式下,CPU通过I/O指令询问指定 外设当前的状态,如果外设准备就绪,则进行 数据的输入或输出,否则CPU等待,循环查询。
这种方式的优点是结构简单,只需要少 量的硬件电路即可,缺点是由于CPU的速度远 远高于外设,因此通常处于等待状态,工作效 率很低
(2)中断处理方式
(1)设置数据的寄存、缓冲逻辑,以适应CPU与外设之间的速度差异,接口通常由 一些寄存器或RAM芯片组成,如果芯片足够大还可以实现批量数据的传输; (2)能够进行信息格式的转换,例如串行和并行的转换; (3)能够协调CPU和外设两者在信息的类型和电平的差异,如电平转换驱动器、数 /模或模/数转换器等; (4)协调时序差异; (5)地址译码和设备选择功能; (6)设置中断和DMA控制逻辑,以保证在中断和DMA允许的情况下产生中断和 DMA请求信号,并在接受到中断和DMA应答之后完成中断处理和DMA传输。 接口的控制方式
WR :写信号,低电平有效。当 WR 有效时,CPU
可以往8255A中写入控制字或数据。 A1、A0:端口选择信号。8255A内部有3 个数据端口和1个控制端口,当A1A0=00时选 中端口A;A1A0=01时选中端口B;A1A0=10 时选中端口C;A1A0=11时选中控制口。 A1、A0和 RD 、 WR 及 CS 组合所实 现的各种功能如表所示。
方式1下的输出时序
3. 方式2(双向模式)
8255A只有A口具有这种双向输入输 出工作方式,实际上是在方式1下A口输入 输出的结合。在这种方式下,A口为8位双 向传输口,C口的PC7~PC3用来作为输入 /输出的同步控制信号。 在这种情况下,B口和PC2~PC0只能 编程为方式0或方式1工作,而C口剩下的 3条线可作为输入或输出线使用或用作B 口方式1之下的控制线。
单片机串行口IO端口扩展介绍
![单片机串行口IO端口扩展介绍](https://img.taocdn.com/s3/m/dbeb152ef08583d049649b6648d7c1c709a10b4d.png)
08
检查串行口IO端 口的电源供应是
否正常
09
检查串行口IO端 口的接地是否正
确
10
检查串行口IO端 口的抗干扰措施
是否正确
串行口IO端口扩展应 用案例
实际应用场景
智能家居:通过串行口IO端口扩展,实现对家电 设备的远程控制和监测。
工业自动化:通过串行口IO端口扩展,实现对工 业设备的远程监控和操作。
单片机与网络设备通信:通过串行口扩展IO端口,实现 单片机与网络设备的通信,实现网络控制和数据传输。
串行口IO端口扩展硬 件设计
硬件结构设计
单片机串行口IO端口 扩展硬件主要包括单 片机、串行口、IO端 口扩展芯片等部分。
IO端口扩展芯片负责 将单片机的IO端口进 行扩展,增加硬件的
IO端口数量。
利用单片机的IO 端口进行扩展
使用串行口扩展 板进行扩展
扩展应用实例
单片机与传感器通信:通过串行口扩展IO端口,实现单 片机与各种传感器的通信。
单片机与显示屏通信:通过串行口扩展IO端口,实现单 片机与显示屏的通信,显示各种信息。
单片机与无线模块通信:通过串行口扩展IO端口,实现 单片机与无线模块的通信,实现无线数据传输。
端口扩展程序
1 端口扫描:检测可用端口并进行编号 2 端口配置:设置端口参数,如波特率、数据位、停止位等 3 数据收发:实现数据的接收和发送 4 错误处理:检测并处理通信错误,如超时、数据丢失等 5 端口管理:实现端口的添加、删除、修改等操作 6 用户界面:提供友好的用户界面,方便用户操作和查看端口状态
校验方式等
串行通信接口:用于连 接串行设备的物理接口
串行通信波特率:数据 传输的速率,单位为bps
单片机IO口扩展(一)2024
![单片机IO口扩展(一)2024](https://img.taocdn.com/s3/m/52c414df6aec0975f46527d3240c844769eaa080.png)
单片机IO口扩展(一)引言概述:在嵌入式系统设计中,单片机的IO口数量通常是有限的,这限制了我们对外部设备的连接和控制。
为了解决这一问题,我们可以通过扩展单片机的IO口数量来满足实际应用需求。
本文将介绍单片机IO口扩展的第一部分,包括外部设备选择、驱动芯片选型和IO 口扩展电路设计等方面。
正文:1. 外部设备选择- 根据实际需求确定需要连接和控制的外部设备,如LED灯、按键、数码管等。
- 考虑外部设备的电压、电流、接口类型等因素,选择合适的外部设备。
2. 驱动芯片选型- 根据外部设备的特性和单片机的IO口电流输出能力,选择合适的驱动芯片。
- 考虑驱动芯片的工作电压、电流、IO口数量等因素,以及其与单片机之间的通信接口,如I2C、SPI等。
3. IO口扩展电路设计- 根据选定的驱动芯片和外部设备的接口类型,设计IO口扩展电路。
- 确定IO口扩展的连接方式,如并行连接、串行连接等。
- 根据电路的功能需求,设计合适的电路板布局和元件连接方式。
4. IO口扩展程序设计- 根据扩展IO口的功能需求,编写相应的程序代码。
- 设置单片机的IO口模式和功能,以及与驱动芯片之间的通信方式。
- 实现与外部设备的数据传输和控制。
5. IO口扩展的测试与调试- 对已完成的IO口扩展电路进行测试,检查电路连接是否正常、IO口控制是否准确。
- 对程序进行测试,确保IO口扩展功能能够正常工作。
- 如有问题,进行调试和优化,直至IO口扩展功能正常工作。
总结:本文介绍了单片机IO口扩展的相关内容,包括外部设备选择、驱动芯片选型、IO口扩展电路设计、程序设计和测试与调试等方面。
通过扩展IO口数量,我们可以实现更多的外部设备连接和控制,满足实际应用需求。
在实际应用中,我们还需根据具体情况进行系统的需求分析和设计,以及进一步优化和调试,以确保IO口扩展功能的稳定性和可靠性。
单片机IO口扩展技术
![单片机IO口扩展技术](https://img.taocdn.com/s3/m/bae3e41ea300a6c30c229f8b.png)
单片机IO 口扩展技术口扩展技术在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。
MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O 口应用的就只有P1口了。
这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。
由于MCS-51单片机的外部RAM 和I/O 口是统一编址的,因此,可以把单片机外部64K 字节RAM 空间的一部分作为扩展外围I/O 口的地址空间。
这样,单片机就可以像访问外部RAM 存储器单元那样访问外部的P0口接口芯片,以对P0口进行读/写操作。
用于P0口扩展的专用芯片很多。
如8255可编程并行P0口扩展芯片、8155可编程并行P0口扩展芯片等。
本文重点介绍采用具有三态缓冲的74HC244芯片和输出带锁存的74HC377芯片对P0口进行的并行扩展的具体方法。
1 1 输入接口的扩展输入接口的扩展输入接口的扩展 MCS-51单片机的数据总线是一种公用总线,不能被独占使用,这就要求接在上面的芯片必须具备“三态”功能,因此扩展输入接口实际上就是要找一个能够用于控制且具备三态输出的芯片。
以便在输入设备被选通时,它能使输入设备的数据线和单片机的数据总线直接接通;而当输入设备没有被选通时,它又能隔离数据源和数据总线(即三态缓冲器为高阻抗状态)。
1.1 74HC2244芯片的功能如果输入的数据可以保持比较长的时间(比如键盘),简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。
74HC244芯片的引脚排列如图1所示。
74HC244芯片内部共有两个四位三态缓冲器,使用时可分别以1C 和2G 作为它们的选通工作信号。
单片机的输入输出方式及应用案例
![单片机的输入输出方式及应用案例](https://img.taocdn.com/s3/m/e2ffbd806037ee06eff9aef8941ea76e59fa4a67.png)
单片机的输入输出方式及应用案例单片机(Microcontroller,简称MCU)是一种集成了中央处理器(CPU)、存储器和各种输入输出设备接口的微型计算机系统。
它被广泛应用于电子设备、自动化控制、嵌入式系统等领域。
本文将介绍单片机的输入输出方式及应用案例。
一、单片机的输入方式单片机通过输入方式接受外部信号,常见的输入方式有以下几种:1. 按键输入:通过连接按键开关与单片机的IO口实现输入。
按键可以是矩阵键盘、触摸按键等。
单片机可以通过读取IO口的电平状态来判断按键是否按下,从而触发相应的事件或功能。
2. ADC输入:ADC(Analog-to-Digital Converter)用于将模拟信号转换为数字信号供单片机处理。
通过ADC接口,单片机可以读取各种类型的模拟信号,如温度、光强、电压等。
常见的应用包括温度测量、光强检测等。
3. 串口输入:单片机可以通过串口接收器(UART)实现串行数据的输入。
串口输入广泛应用于与其他设备通信的场景中,如与电脑、传感器、无线模块等进行数据交互。
二、单片机的输出方式单片机通过输出方式控制外部设备,常见的输出方式有以下几种:1. 数字IO口输出:单片机的数字IO口可以输出高或低电平来控制外部设备。
例如,通过控制IO口输出高电平,可以点亮LED灯,驱动蜂鸣器等。
2. PWM输出:PWM(Pulse Width Modulation)脉宽调制是一种周期性变化占空比的信号。
单片机可以通过PWM输出口生成特定频率、特定占空比的PWM信号,广泛应用于电机控制、LED亮度调节等场景中。
3. DAC输出:DAC(Digital-to-Analog Converter)将数字信号转换为模拟信号输出。
通过DAC接口,单片机可以输出模拟信号,如音频信号、电压信号等。
三、单片机输入输出应用案例1. 温度监测系统:利用单片机的ADC输入功能,连接温度传感器,实时监测环境温度并将结果显示在LCD屏幕上。
基于74HC164扩展单片机系统I_O端口的研究
![基于74HC164扩展单片机系统I_O端口的研究](https://img.taocdn.com/s3/m/3f928654a31614791711cc7931b765ce05087aa3.png)
基于74HC164扩展单片机系统I_O端口的研究基于74HC164扩展单片机系统I/O端口的研究随着嵌入式系统的不断发展,对于I/O端口的需求也越来越多。
而在单片机系统中,常常需要扩展I/O端口的数量,以应对更复杂的应用场景。
本文将研究基于74HC164芯片的扩展单片机系统I/O端口的方法和实现。
一、引言随着电子技术的进步,嵌入式系统在各个领域的应用越来越广泛。
而在实际应用中,单片机作为嵌入式系统的核心组成部分之一,其I/O 端口的数量往往无法满足复杂应用的需求。
因此,扩展单片机系统的I/O端口成为了一项重要的研究内容。
二、74HC164芯片简介74HC164芯片是一种8位移位寄存器,其特点是结构简单、成本低廉、易于使用。
该芯片采用串行输入、并行输出的方式,可实现将串行数据转换为并行数据的功能。
三、74HC164的工作原理74HC164芯片由8个D类型触发器和逻辑门电路组成。
它的输入端包括一个串行数据输入端(SER)和一个时钟输入端(CLK)。
在时钟输入端输入时钟信号时,芯片将串行输入端的数据依次移位,并将移位后的数据并行输出。
数据的移位方向根据芯片的设置而定。
四、扩展单片机系统I/O端口的实现以基于单片机的LED灯控制系统为例,介绍如何使用74HC164芯片扩展I/O端口。
首先,将单片机的IO口连接到74HC164的串行数据输入端(SER),将单片机的时钟信号输入连接到74HC164的时钟输入端(CLK)。
接下来,设置74HC164芯片的移位方向,并将移位后的并行数据输出接入LED灯。
在单片机程序中,将需要控制的LED灯的状态数据通过串行输入端传输给74HC164芯片。
然后,通过控制时钟信号,触发74HC164芯片将数据移位并输出给相应的LED灯,实现对LED灯的控制。
使用74HC164芯片扩展I/O端口的好处是可以大幅度提高单片机系统的扩展性和灵活性。
通过串行输入数据并并行输出的方式,可以快速扩展大量的I/O端口,满足实际应用中对I/O端口数量的要求。
单片机中的IO口扩展原理及应用
![单片机中的IO口扩展原理及应用](https://img.taocdn.com/s3/m/19836b0fe418964bcf84b9d528ea81c758f52ef2.png)
单片机中的IO口扩展原理及应用单片机是一种在微处理器中集成了中央处理器、内存、输入/输出控制和时钟等功能的微型计算机。
在实际应用中,单片机的使用每況愈下,并逐渐被更高级的处理器所取代。
然而,在一些特殊应用领域,如嵌入式系统和物联网设备中,单片机仍然扮演着重要的角色。
在单片机中,IO口的扩展是一项关键的技术,用来增加单片机的输入和输出接口数量。
本文将探讨单片机中的IO口扩展原理及其应用。
一、单片机IO口扩展原理在单片机中,IO口(Input/Output Port)用于连接外部电路和其他设备,扮演着数据输入和输出的桥梁角色。
然而,通常单片机内部只有有限的IO口数量。
为了满足复杂的应用需求,需要通过扩展技术来增加IO口的数量。
1. 并行IO口扩展其中一种常见的IO口扩展技术是通过并行IO口扩展芯片来增加IO口数量。
该芯片通常由一个并行输入/输出移位寄存器和控制逻辑组成。
通过串行通信协议,单片机可以控制并行IO口扩展芯片,以实现扩展IO口的输入和输出功能。
这种方式适用于需要大量IO口的应用,如工业控制和自动化设备。
不过需要注意的是,并行IO口扩展芯片策略相对复杂,需要额外的引脚和电路设计,并且使用的软件协议需要单片机和外部芯片之间的高速通信支持。
2. 串行IO口扩展另一种常见的IO口扩展技术是通过串行IO口扩展芯片来增加IO口数量。
串行IO口扩展芯片通常采用常用的串行通信协议,如I2C(Inter-Integrated Circuit)或SPI(Serial Peripheral Interface),通过少量的引脚连接到单片机。
通过控制寄存器和数据寄存器,单片机可以发送指令和数据来控制扩展IO口的输入和输出。
这种方式相对于并行IO口扩展芯片来说,引脚数量较少,实现简单,适用于需要较少IO口数量的应用。
同时,由于使用串行通信协议,可以通过级联多个串行IO口扩展芯片,进一步增加IO口数量。
二、单片机IO口扩展应用单片机IO口扩展技术在各种嵌入式系统和物联网设备中都有广泛的应用。
74HC595对单片机IO口的扩展及应用
![74HC595对单片机IO口的扩展及应用](https://img.taocdn.com/s3/m/34927b606c85ec3a86c2c514.png)
74HC595对单片机IO口的扩展及应用作者:曹少科杨晴陈海宇王硕来源:《科技风》2019年第13期摘要:74HC595是美国国家半导体公司生产的通用位移寄存器芯片,它可以实现8位串行输入输出或者并行输出,操作方便简单,可以很容易的完成对单片机IO口的扩展。
[1]本文主要是介绍用74HC595芯片来扩展IO口详细原理,并利用此方法进行实验,实现流水灯效果。
关键词:单片机;74HC595;扩展IO口;流水灯上世纪70年代到80年代期间,单片机凭借着它体积小,低功耗,性价比高的优势,被越来越多的人所使用,并被广泛运用于各个领域。
但随着科技不断地进步与发展,我們对于单片机的应用更加广泛,我们也慢慢发现了51单片机的一些缺点,即IO端口有限,很多人在运用单片机时总会出现IO口不够用的现象,而74HC595芯片刚好能弥补此缺陷,大量扩展单片机的IO口。
174HC595芯片的选择74HC595是硅结构的CMOS器件,能实现串入转并入,数据通过一个IO串口输入后经过74HC595后将数据8位并行输出。
[2]74HC595与74HC164芯片功能基本相同,但前者价格更低廉,驱动能力更强,操作简单,但因为74HC595有存储寄存器,所以在移位的过程中,并排输出端口的数据保持不变。
所以选用74HC595芯片来扩展51单片机IO口比较合适。
2扩展方案2.1硬件连接与实现原理若要以74HC595芯片实现对IO口的扩展,首先需要定义一个单片机I0口与74HC595芯片DS相连,以此来控制串行数据的输入。
而移位寄存器和存储寄存器是不同的时钟,当SH_CP处于上升沿时,数据会输入到移位寄存器中,当ST_CP处于上升沿时会传入的存储寄存器中。
因此两个时钟需要分别进行连接,移位寄存器有串行输入DS引脚、串行输出引脚Q7’和低电平复位引脚MR。
存储寄存器有并行数据输出引脚Q0~Q7和低电平输出有效OE引脚。
所以用MR进行复位时,只是将位移寄存器中的数据清除,而不必担心存储寄存器中的数据有所变化。
单片机扩展电路(二)
![单片机扩展电路(二)](https://img.taocdn.com/s3/m/6530a95d54270722192e453610661ed9ad51552e.png)
单片机扩展电路(二)引言概述:在单片机应用中,扩展电路是必不可少的,它能够有效地提升单片机的功能和性能。
本文将介绍单片机扩展电路的设计原则和一些常用的扩展电路,旨在帮助读者更好地理解和应用单片机的扩展电路。
正文内容:一、IO扩展电路1. 使用74HC595芯片进行8位输出扩展2. 使用PCF8574芯片进行8位输入扩展3. 使用双向移位寄存器实现输入输出模式切换4. 使用IO扩展板实现大量IO口的扩展5. 使用IO扩展芯片实现I2C总线扩展二、ADC和DAC扩展电路1. 使用ADC0804芯片进行模拟量采集2. 使用MAX11615芯片进行多通道模拟量采集3. 使用DAC0832芯片进行模拟量输出4. 使用R-2R网络实现更高精度的模拟量输出5. 使用PWM信号和低通滤波器实现模拟量输出三、串口扩展电路1. 使用MAX232芯片进行RS232电平转换2. 使用USB转串口模块实现USB接口扩展3. 使用蓝牙模块实现无线串口扩展4. 使用WiFi模块实现无线串口扩展5. 使用以太网模块实现网络串口扩展四、定时器和计数器扩展电路1. 使用74HC161芯片进行多位计数2. 使用74HC4040芯片进行二进制计数3. 使用CD4541B芯片进行定时器功能扩展4. 使用定时器模块实现精确的时间测量5. 使用定时器和中断实现实时时钟功能五、存储器扩展电路1. 使用24CXX系列芯片进行I2C存储器扩展2. 使用AT24C256芯片进行大容量存储器扩展3. 使用SD卡进行存储器扩展4. 使用EEPROM芯片进行非易失性存储器扩展5. 使用Flash芯片进行可擦写存储器扩展总结:单片机扩展电路的设计具有很大的灵活性,可以根据具体应用需求选择不同的扩展电路。
本文对IO扩展电路、ADC和DAC扩展电路、串口扩展电路、定时器和计数器扩展电路以及存储器扩展电路进行了详细介绍,希望读者能够通过学习掌握单片机扩展电路的设计方法和应用技巧,为自己的项目开发提供更多的选择和可能性。
单片机常见输入输出模式
![单片机常见输入输出模式](https://img.taocdn.com/s3/m/025144eb770bf78a65295480.png)
单片机的io分为输入输出模式,输出模式如下图:
常见的四种输出模式:
(1)High-impedance output
高阻输出,可以理解为悬空输出,输出状态有外部条件决定;
(2)P-channel open drain output
P沟道开漏输出,输出高电平(1)有驱动能力,输出低电平(0)时,相当于断开。
原因是P沟道MOS,未开启时,电流从漏极(D)通过续流二极管到源极(S),因为漏极为输出电流方向,所以输出高电平(1)驱动能力强。
(3)N-channel open drain output
N沟道开漏输出,输出低电平(0)有驱动能力,输出高电平(1)时,相当于断开。
原因是N沟道MOS,未开启时,电流从源极(S)通过续流二极管到漏极(D),因为漏极为吸收电流方向,所以输出低电平(0)驱动能力强。
(4)CMOS output
CMOS输出:这种模式下,无论输出高低电平都有较强的驱动能力
三种输出模式
(1)High-impedance input
高阻输入:无上拉和无下拉,对外表现出电平不确定性.。
这种方式只用于输入读取。
何元器件,高阻输入不可取,功耗大。
(2)Input with a pull-down resistor
下拉输入:在无外部输入是时,讲电压钳制在低电平;
(3)Input with a pull-up resistor
上拉输入:在无外部输入是时,讲电压钳制在高电平;。
51单片机IO端口的四种输入输出模式
![51单片机IO端口的四种输入输出模式](https://img.taocdn.com/s3/m/11a9a46b52ea551811a68718.png)
51单片机I O端口的四种输入输出模式-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN51单片机IO端口的四种输入输出模式 (by wuleisly)单片机I O口的使用对所有单片机玩家来说都是“家常便饭”,但是你真的了解I O口吗你真的能按你的需要配置I O口吗一、准双向口输出准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当引脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
(准双向口有3个上拉晶体管适应不同的需要)准双向口读外部状态前,要先锁存为‘1’,才可读到外部正确的状态.二、强推挽输出推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为1时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
三、仅为输入(高阻)输入口带有一个施密特触发输入以及一个干扰抑制电路。
四、开漏输出配置(若外加上拉电阻,也可读)当口线锁存器为0时,开漏输出关闭所有上拉晶体管。
当作为一个逻辑输出时,这种配置方式必须有外部上拉,一般通过电阻外接到V c c。
如果外部有上拉电阻,开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。
这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
关于I/O口应用注意事项:1.有些是I/O口由低变高读外部状态时,读不对,实际没有损坏,软件处理一下即可。
因为1T的8051单片机速度太快了,软件执行由低变高指令后立即读外部状态,此时由于实际输出还没有变高,就有可能读不对,正确的方法是在软件设置由低变高后加1到2个空操作指令延时,再读就对了.有些实际没有损坏,加上拉电阻就OK了有些是外围接的是N P N三极管,没有加上拉电阻,其实基极串多大电阻,I/O口就应该上拉多大的电阻,或者将该I/O口设置为强推挽输出.2.驱动LE D发光二极管没有加限流电阻,建议加1K以上的限流电阻,至少也要加470欧姆以上做行列矩阵按键扫描电路时,实际工作时没有加限流电阻,实际工作时可能出现2个I/O口均输出为低,并且在按键按下时,短接在一起,我们知道一个C M O S电路的2个输出脚不应该直接短接在一起,按键扫描电路中,此时一个口为了读另外一个口的状态,必须先置高才能读另外一个口的状态,而8051单片机的弱上拉口在由0变为1时,会有2时钟的强推挽高输出电流输出到另外一个输出为低的I/O口,就有可能造成I/O口损坏.建议在其中的一侧加1K限流电阻,或者在软件处理上,不要出现按键两端的I/O口同时为低.一种典型三极管控制电路:如果用弱上拉控制,建议加上拉电阻R1~10K),如果不加上拉电阻R1~10K),建议R2的值在15K以上,或用强推挽输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⠛ 㒓䆒䅵⊩ ⬹1ǃⳂ 䆒䅵 ⠛ ㋏㒳 ⱘϸ⾡ ḜП 㾕䩜 51 ⠛ ˈ Ӏ 䆒䅵㋏㒳 ˈҢ 㾖Ϟ䆆 䴲 ϸ⾡ Ḝ˖ 㒓 䆒䅵 Ḝ 䴲 㒓 䆒䅵 ḜDŽ 䇧 㒓 䆒䅵 Ḝ ⫼51 ⠛ ⱘ䇏 䚼RAM 㛑ˈ 㽕䆒䅵ⱘ 䚼䆒 ˄↨ 䇈䬂Ⲭǃ⎆ ㄝ˅㒳㒳 ⠛ 㒓ϞˈՓ 㒳ϔ ㉏Ԑ䇏 䚼RAM 㛑ⱘ Ҹ ⊩䖯㸠 ˗㗠 䇧䴲 㒓 䆒䅵 Ḝˈ ϡ ⫼ ⠛ ⱘ䇏 䚼RAM 㛑ˈ㗠Ⳉ ⫼I/O 䇏 䖯㸠 䚼䆒 ⱘ䇏 ˈ↨ 䇈LED♃ǃ⎆ ㄝˈ Ў⎆ ϸ⾡䇏 ˈ 㒓 I/O ˄䌉 г ゴҟ㒡䖛˅ˈ㗠䖭䞠䇏 ⎆ ⱘ I/O 䖭䞠 㽕䇈ⱘ䴲 㒓 䆒䅵 ḜDŽ䙷М䖭ϸ⾡ Ḝ ϔ⾡ ˛䇈䖭 䆱 㛑 ⚍ 㸠ˈ 㞾 г䖭ḋ䅸ЎˈԚ Ўњ ⱘ䅽 㗙њ㾷 Ёⱘ䘧⧚ˈ 䖬 ⧁䮼 ㅔ 䯤䗄ϔϟ˖佪 㽕䇈 ˈ ⱘ䖭⾡䯤䗄 ゟ 䇏 䚼RAM 㛑ⱘ ⠛ ⱘ ⸔ПϞⱘDŽ ϾҎ䅸Ўˈϸ⾡ Ḝ ˖Ѣ 㒓 䆒䅵 Ḝ 䇈ˈӬ⚍ 㛑 ⠛ ⱘ 㒓䇏 㛑ˈ㋏㒳ϔ 䆒䅵 ˈ Ѣ ⱘ 㑻 DŽ㔎⚍ ♉⌏ ˈ⹀ӊ䖲 ↨䕗 ˗ ⬅Ѣ ⠛ 䇏 㒓 㽕ѻ⫳ϔ ⱘ 㒓 䯈 䖳ˈ䖭ḋ ѢԢ䗳ⱘ ⠛ 䇈ˈ 䆒䅵ⱘ㋏㒳䴲 ⱘ䆱ˈ䙷 䳔㽕䆒䅵Ҏ 㗗㰥ϔϟ 㽕∖њˈԚ ḍ ϾҎ ⱘ 㒣偠 䇈ˈ 㽕䆒䅵 ˈϔ㠀䯂乬ϡ ˈԚ䖬 ℸ䯂乬 ˈ䅽 ᾋDŽѢ䴲 㒓 䆒䅵 Ḝ 䇈ˈ ⱘӬ⚍ ♉⌏ ˈ䖭⾡ Ḝ ҹḍ 䆒䅵㗙ⱘ⠅ 㞾⬅䗝 ⠛ ッ 䖯㸠 䆒 ⱘ䆒䅵˄ ✊ 㽕 ヺ 䆒䅵 ⱘ ϟ˅ˈ㔎⚍ 㑻䳔㽕䞡 䆒䅵⬉䏃 DŽ2ǃ 㒓⊩䆒䅵 ⠛ ㋏㒳ⱘ ⧚ ⊩2.1 㒓⊩䆒䅵 ⧚ㅔҟ㒓 䆒䅵 Ḝ Ѣ ⱘ 㗙 䇈 ↨䕗 䲒ⱘˈ Ў Ѣ䖭⾡ ⊩䇈ˈ⡉ ⠛ 䆒 䘏䕥ⱘ 䜡ǃ ぎ䯈ⱘ 䜡ǃ 㒓偅 㛑 ㄝㄝⱘ䯂乬ˈϔ 䆒䅵ϡ ˈ㋏㒳 ⊩ ˈ 㗙䇈䚼 ⊩ DŽ⹂ ˈ 㒓 䆒䅵 Ḝ ϔ ⱘ䲒 ˈ 䖭 ὖг 㗙⫮㟇 ⠛ 䆒䅵 Ӏг 䍟 Ѣ ⫼䴲 㒓 䆒䅵 Ḝ 䖯㸠 ⠛ ㋏㒳䆒䅵ⱘ ˄ҙЎϾҎ㾖⚍ˈ ϡ ˈ䖬 ⺟˅DŽ ҹ 䖭ϔ㡖 ϟ ⱘ Ё Ӯ 乚 䏣 ⠛ 㒓 䆒䅵 Ḝⱘ 䮼ˈ䅽Դ乚⬹ϔϟ 䖭 䆒䅵乚 ⱘ 䰤㊒ DŽ佪 Ӏ ⳟⳟ51 ⠛ 䇏 䚼RAMⱘ ˈ 1ǃ2 ⼎˖ 1Ў51 ⠛ 䇏 䚼RAMⱘ DŽ1 51 ⠛ 䇏 䚼RAMⱘ⊼ 䖭䞠 Ӏ 䳔㽕 ALEǃRDǃPORT0ǃPORT2 Ͼ ⱘ ˈ㗠ϡ PSEN ˈ Ў䖭Ͼ ⫼ 䇏 䚼 ⱘˈ䎳 Ӏⱘ䅼䆎ϡⳌ ˈ 䍷ⱘ ҹ㞾㸠ⷨおˈϟ DŽϟ䴶 䎳 ϔ䍋䅼䆎ϔϟ䖭 䏃 ԩ Փ⫼ⱘDŽ䖛䆒䅵㒣偠ⱘҎ䛑 ⏙ἮˈALE Ӏ 䇈ⱘ 䫕 ˈ䙷М ЎҔМ㽕䫕 ˛䫕䇕ⱘ ˛ ԩ䫕ⱘ ˛ϔǃѠϾ䯂乬 ㅔ ˈ Ў51 ⠛ ⱘP0 / ⫼ⱘ8ԡッ ˈ 䇏 䚼RAM ˈP0 ϞӮ乎 䖲 ⦄Դ㽕䇏 ⱘ 䇏 㽕 ⱘ ˈ ⦄ ϡ ℸ8ԡ 䫕ԣˈ䙷М Ӯ䖙䗳⍜ ˈ ⊩ ⫼ℸ 䖯㸠䚼 ⱘ 䗝 ˗㗠䩜 ϝϾ䯂乬ˈ ԩ䫕ⱘˈ ⚍咏⚺ˈ Ў♉⌏ DŽ 䇋Ҩ㒚ⳟ 1ⱘALE PORT0ϸϾ ˈLHLL t üüALE ⱘ 㛝AVLL t +üüЎP0 ⱘ 䯈䭓LLAX t Ӏ Ϩⷨおϔϟ䖭ϸϾ 㾷ㄨϞ䴶ⱘ䯂乬ˈ⊼ P0 ⱘ 䯈䭓 Ў+ϸϾ 䯈䭓 ⱘ ˈ䙷М Ӏ Ͼ 䯈↉ 䫕 ˛䗮䖛 Ӏ ҹ ⦄ˈ ✊ 乏 ALE ⱘ 㛝 䖭ϾP0 ⱘ ˈ䙷М ҎӮ䯂 䖭Ͼ 䯈↉ ҔМ⫼ˈ 䖭Ͼ 䯈↉ P0 г 㒻㓁 ⱘԢ8ԡ ˈ䇋㒻㓁 ϟⳟ ⧚㾷DŽ њˈ ✊䖭ḋˈ Ӏ㽕䫕 ℸ ⱘP0 ✊ 㽕 ALE ⱘ 㛝 㛮њˈ ϔⳟˈ ˈ䖭ㅔ ˈ䖭㽕 ALE Ў催⬉ ⱘ ˈⳈ ⫼373㢃⠛㦋 P0 ϡ њ ʽϡ䫭ˈ ⱘˈⳂ 䛑 䖭М ⱘDŽ䙷М ⦄ 䯂Դˈ ⊩ ϔ ˛ 䖭Мϔ 䝦ˈ 㛑 Ӯ ˈ ˈ њˈ ALE ⱘϸϾ䖍⊓г ҹ ʽ䙷МԴ 䫭њˈ 䇈䖬 ϔϾ ⊩ ALE ⱘϟ䰡⊓ ҹˈϞ ⊓ ϡ㸠ⱘ ʽЎҔМ ˛Դⳟⳟ 1ⱘ ˈP0 ⱘ 䍋 䯈ⱘ 䖍⊓ ALE ⱘ 㛝 Ϟ ⊓ 䴶 ˈ䖭 ✊ϡ㸠 ʽ ✊ Ӏ㒣 ⫼ⱘ ⊩䖬 ⫼74ls373䖭㉏催⬉ Ӵ䕧ⱘ㢃⠛DŽ䖭䞠 䆝њ ϸ⾡ ⊩ˈ 䝦 ⊩ 䴲 ♉⌏ⱘˈ 䴶 Ӯ 䖭ϸ⾡䫕 ⱘ ⊩ ҹ ՟ⱘ ԧ⦄ 䴶 DŽAVLL t LLAX t LLAX t AVLL t њˈ Ӏ䫕 њˈ ✊P0 ⫼ッ ˈ䙷 Ӏ ⷨおϔϟ 䴶ⱘ МӴ䕧ⱘDŽЎњ ⱘ䅽 њ㾷 䚼 ⱘ䇏 ⱘ ⧚ˈ䖭䚼 ㅫ㒧 2ҟ㒡ϔϟ ⱘ DŽ2Ў51 ⠛ 䚼RAM ⱘ DŽ2 51 ⠛ 䚼RAM ⱘḋ 䖭䞠 Ӏ 䳔㽕 ALE ǃWR ǃPORT0ǃPORT2 Ͼ ⱘ DŽ䇋ⳟϟ䴶 Ͼ 䯈䞣˖LLWL t üüALE 䏇ЎԢ WR Ԣⱘ 䯈↉WLWH t üüWRQVWX t üüP0 WRWHQX t üüWR 㒧 P0 㒧䗮䖛Ϟ䴶 Ӏ ҹⳟ ˈг 䇈 ALE 䏇ЎԢ⬉ ҹ ˈ 䖳䖭М䭓ⱘ 䯈 ˈLLWL t WR Ԣ⬉ Ӯ㋻䎳ⴔ ⦄ˈ⊼ 䖭Ͼ ⠛ 㞾 ѻ⫳ⱘˈ 䇏㗙 ҹЎ㽕䆒㕂ҔМ П㉏ⱘϰ㽓ˈ ⦄䗋 ˈ 㽕 Ӏ 䞠ϔ䇗⫼MOVX 㗙 C 䇁㿔䞠䇏 XDATA ˄ 䚼˅ⱘ ˈWR 㗙RD Ӯ㞾 ⦄њDŽѢ Т䖭 Ӏ ҹ Ӏ䳔㽕Ӵ䕧ⱘ њDŽ䯂乬⬅ њˈ Ӏ ҔМ 䚼RAM 㗙䇈 䚼䆒 ˛䖭䞠䇋 ⊼ ˈ Ӏ ⦄P0 ⱘ 䯈↉Ў++ˈ ✊㽕䭓ѢWLWH t QVWX t WHQX t WR ˈ Ϩ П ˈ ҹ 䖭䞠ˈḍ 䖭Ͼ ⧚ˈ Ӏ ҹ ⫼WLWH t WR ⱘϟ䰡⊓ ǃԢ⬉ 䰊↉ Ϟ ⊓ 䖯㸠 ⱘˈԚ Ӏ ⫼ⱘ WRⱘԢ⬉ WRϞ ⊓ ˈ㗠 ⫼WRⱘԢ⬉ Ў 䘡ˈ Ў ⫳ѻⱘ 䚼 㒓䇏 㛑ⱘ㢃⠛䛑 㽕∖ WRⱘԢ⬉ ˈ䎳Ϟ䴶ϔḋˈ Ӏ 䖭䞠䅼䆎䖭ϾˈЏ㽕 㒭 կϔ⾡ 䏃ˈ 㞾 䖯㸠 䜡 䘏䕥䆒䅵 г䆌⫼ ϞDŽ ϟ䴶ⱘ ՟Ёˈ䖭ϸ⾡ ⊩ 䛑Ӯ ҟ㒡ˈ䇋 Ҩ㒚ԧӮDŽ2.2ϸ⾡ 䫕 ⊩ҟ㒡Ϟ䴶 㒣 ˈ 䖯㸠 䫕 ϸ⾡䫕 Ḝ˖催⬉ 䫕 ⊩ ϟ䰡⊓ 䫕 ⊩ˈ⊼ 䖭䞠 䇈ⱘ䖭ϸ⾡ ⊩ ⿄ 䩜 ⠛ ⱘALEッ 㗠㿔DŽϟ䴶 㒧 ԧⱘ⬉䏃㒭 ϔϟ䆺㒚ҟ㒡˄Ў㡖ⳕ⬏ ぎ䯈ˈ㗗㰥 ⠛ ԡ⬉䏃 ⬉䏃ϡ 䅼䆎ⱘ䆱乬ˈ ⳕ⬹˅˖2.2.1催⬉ 䫕 ⊩㡖ҟ㒡ⱘ催⬉ 䫕 ⊩ ⠛ Փ⫼ Ў ⊯ⱘϔ⾡ ⊩DŽ 䖭⾡ ⊩Ё䗝⫼373 㗙573㢃⠛ˈҹ573Ў՟ˈ ⳳ 㸼 㸼1 ⼎˖㸼1 74HC573ⳳ 㸼OE LE D QL H H HL H L LL L X Q0H X X Z⬅Ϟ䗄ⳳ 㸼 Ӏϡ䲒ⳟ ˈ䖭Ͼ⠛ ⱘ⡍⚍ ˖ 䕧 ッOE ˄Ԣ⬉ ˅ⱘ ϟˈ 䫕 ッLEЎ催⬉ ˈ䕧 ッQ䱣ⴔ䕧 ッD ˈ㗠 LEЎԢ⬉ ˈ䕧 ッQ Ϟϔⱘ䕧 ッ ˈ䖭ḋⱘ䘏䕥ℷ ヺ Ӏ ϔ㡖 ⱘ ⠛ ALEッ ⱘ ˈ ALEッЎ催⬉ ˈ ⠛ P0 ⱘԢ8ԡ 䕧 573ⱘ䕧 ッˈ㗠䕧 ッ䎳䱣 ˈϔ ALE ЎԢ⬉ ˈ573 ϡ 䎳䱣 ⠛ ⱘP0 ˈ Ў䖭 ˄ 䆹 䖛ϔӮ˅P0 偀Ϟ 㽕䕧 8ԡĀ āњˈ䖭ḋ њ ⠛ Ԣ8ԡ ⱘ䫕 DŽ3催⬉ 䫕 ⊩2.2.2ϟ䰡⊓ 䫕 ⊩㡖㒭 ҟ㒡 ϔ⾡ ⊩üüϟ䰡⊓ 䫕 ⊩DŽ䖭⾡ ⊩ Ӏⱘ 䰙䆒䅵Ё ϡ 㾕ˈԚ ҡ✊㒭 ϔϾㅔ ⱘҟ㒡ˈⳂⱘ 䅽 䏃ˈњ㾷䯂乬ⱘ 䋼DŽ䖭⾡ ⊩Ё䗝⫼374 㗙574㢃⠛ˈҹ374Ў՟ˈ ⳳ 㸼 㸼1 ⼎˖㸼2 74HC374ⳳ 㸼OE CLK D QLĖH HLĖL LL L X Q0H X X Z⬅Ϟ䗄ⳳ 㸼 Ӏϡ䲒ⳟ ˈ䖭Ͼ⠛ ⱘ⡍⚍ ˖ 䕧 ッOE ˄Ԣ⬉ ˅ⱘ ϟˈ 䫕 ッLE䕧 Ϟ ⊓ ˈ䕧 ッDⱘ 㛑䗕 䕧ッQˈ㗠 LEЎ䴲Ϟ ⊓ ˈ䕧 ッQ Ϟϔⱘ䕧 ッ ˈ䖭ḋⱘ䘏䕥ℷ ヺ Ӏ ϔ㡖 ⱘ ⠛ ALEッ ⱘ ˈ ALEッЎ催⬉ ˈ ⠛ P0 ⱘԢ8ԡ 䕧 374ⱘ䕧 ッˈԚ 䕧 ッϡ䎳䱣䕧 ッ ˈϔ ALE ЎԢ⬉ ˈ䖭ḋ ⶀ䯈ѻ⫳њϔϾϟ䰡⊓ˈԚ 374䳔㽕ⱘ ϔϾϞ ⊓ 㛑 Ң䕧 ッ 䖯䕧 ッˈЎℸˈ 乏 ALEϢCLKッ䖯㸠ϔϟ ⳌDŽ䖭ḋ ⠛ 䖭 Ͼⱘ䇏 ⱘ䖛Ёˈ374ⱘ䕧 ッˈг 䫕 ⱘ ⠛ ⱘԢ8ԡ ϡ њˈ ЎˈALEッ ϔ䇏 䖛Ё 㒜 Ԣ⬉ ⱘˈϡӮ ѻ⫳ϟ䰡⊓ˈг ϡӮ 374ⱘ䕧 ッDŽ䖭ḋг ḋ њ ⠛ Ԣ8ԡ ⱘ䫕 DŽ4ϟ䰡⊓ 䫕 ⊩3ǃ 㒓⊩䆒䅵 ⠛ さ⸈䗮䖛Ϟ䴶Ѡ㡖 Ӏⶹ䘧 ⠛ 㒓Ԣ8ԡ ϸ⾡䫕 ⊩DŽ 䖭ϔ㡖䞠ˈ 㒓䆒䅵⊩Ё㒣 ⫼ ⱘϔѯ ⠛ ⱘ䆒䅵 䏃 㗙 ⊩䆺㒚ⱘҟ㒡㒭 ˈ ⳟ 㛑ҢЁ ԧӮDŽ佪 ϟ䴶 Ͼ Ё⫼ ⱘ138 䆥ⷕ⬉䏃 ˖5 䆥ⷕ⬉䏃 䜡˖CS_LED: 0X8000~0X8F F F˗ LED ⼎♃⠛䗝CS_SHUMA:0X9000~0X9FFF ˗ ⷕㅵ⠛䗝CS_A/D: 0XA000~0XA F F F˗A/D 䕀 ⠛䗝 CS_D/A: 0XB000~0XB F F F˗ D/A 䕀 ⠛䗝CS_LCD: 0XC000~0XC F F F˗⎆ ⠛䗝CS_KEY_RD:0XD000~0XDFFF ˗䇏䬂Ⲭ⠛䗝CS_KEY_WR:0XE000~0XEFFF ˗䬂Ⲭ⠛䗝 䜡㾷 ˖佪 Ӏ ⳟⳟLED ⼎♃ⱘ ッCS_LED ЎҔМ 0X8000~0X8FFF ˈ74HC138佪 㽕 ˈ 乏 ⱘ⠛䗝䕧 ˄E1ǃE2ǃE3˅ッ㕂Ў ˈḍ Ӏⱘ⹀ӊ䖲 ˈE1ǃE2 㒣 ˈ䖭 Ӏ 䳔㽕 E3㕂Ў催⬉ 䱣 䆹74HC138㢃⠛ˈ ⬅Ѣ Ӏ ⠛ ⱘ 催ԡ 㒓A15 њE3Ϟˈ ҹˈ Ӏ 䆒ⱘ⠛䗝 䛑 乏䅽A15ԡ㕂Ў催⬉ Ā1āˈ䖭ḋˈ74HC138⠛䗝䕧 ѢC ˄A14˅ǃB ˄A13˅ǃA ˄A12˅ϝϾ ッњˈ ✊㽕䅽LED ⼎♃ⱘ ッCS_LED ˈг 䅽74HC138ⱘY0䕧 ッ ˄ЎĀ0ā˅ˈ 䳔㽕C ˄A14˅=Ā0āǃB ˄A13˅=Ā0āǃA ˄A12˅=Ā0ā ˈг 䇈 㽕䅽 ⠛ 㒓ⱘ催 ԡЎĀ1000āˈ㗠 Ҫ12ḍԢ 㒓 ҹӏ Ā0ā Ā1āˈ ҹ ℸ Ӏ ㅫ њLED ⼎♃ⱘ⠛䗝 0X8000~0X8FFFDŽ ⧚ˈ ⷕㅵǃA/D䕀 ǃD/A䕀 ǃ⎆ ǃ䬂Ⲭ䘧⧚Ⳍ DŽԚ 䖭䞠ˈ ѯ䇏㗙ϡ䲒 ⦄ϔ⚍ˈ䬂Ⲭⱘ⠛䗝 М䖬 ϸϾ ˛ϔϾĀ䇏䬂Ⲭ āˈϔϾĀ 䬂Ⲭ āˈ Ѣ䖭ϔ⚍ˈ Ӯ 䬂Ⲭ䆒䅵䚼 㒭 䆺㒚䇈 DŽП䇋 䆄ԣϔ⚍˖ ⱘ 䜡 䱣 ԧ⹀ӊ䖲 ⱘϡ 㗠 ⱘDŽ 㽕⹀ӊ䖲 њˈ 䆒 г њDŽ3.1 LED ⼎♃ⱘ 㒓䆒䅵⊩˄ 䞣䕧 ㉏Ԑℸ⊩˅䖭ϔ㡖㒭 ҟ㒡ϔϟLED ⼎♃ⱘ 㒓䆒䅵⊩ˈ䖭⾡ Џ㽕 ⍝ ⠛ 䚼䆒 ⱘ DŽ ✊ ⠛ ˈ 佪 乏㗗㰥 ϔϾ 乏⫼ ˈ䖭 WRDŽ ˈ䇋ⳟ 6ˈ 䖭Ͼ䆒䅵Ёˈ Ӏҡ✊䞛⫼Ϟ䴶ҟ㒡䖛ⱘ䫕 㢃⠛374ˈ䖭ḋ ϔⴐ Ӯ ԩ䕧 њˈ䙷 Ӏ 乏 374ⱘCLKッ㒭ϔϾϞ ⊓ ˈ䙷 ԩѻ⫳ ˛䖭䞠 Ӏ⫼ њϔϾ䘏䕥 䮼ˈ↨ 䇈 Ӏ㽕㒭LED䗕ϔϾ ˈ䙷М佪 䗝ЁLED䖭Ͼ 䚼䆒 ⱘ⠛䗝 ˈг 䇈CS_LED 䕧 Ԣ⬉ ⱘˈ㗠ℸ ㋻ ⴔWR ˈ 䕧 Ā ā ˄Ԣ⬉ ˅DŽ䖭ḋ 䮼ⱘϸϾ䕧 䛑ЎԢˈḍ 䘏䕥ˈt WR 䯈 ˅ ˈWR Ў催ˈ 䕧 ЎԢˈ 㑺㒣䖛˄WLWH䖭 㱑✊CS_LEDҡ✊Ў催ˈԚ ḍ 䘏䕥ˈ 䮼ⱘ䕧 Ӯ Ў催ˈ䖭ḋ 374ⱘCLKッѻ⫳њϔϾϞ ⊓䏇 ˈг 㽕䗕㒭LED 䆒ⱘ Ӵ䕧њ䖛 DŽ䖭䞠 㽕 㒭 㗙㾷䞞ϸ⚍˖ϔˈ ԩ 㛑䗝ЁCS_LED? Ѣ䖭Ͼ䯂乬 㛑 㗙 ⱘ䯂乬ˈ ㅔ ˈ ҹC䇁㿔㒭 ҹ㾷䞞ˈ䇋ⳟϟ䴶䖭ϔ䇁 ˖XBYTE [0X8000]=0X0F˗䖭 䇁 ҔМ ˛XBYTE 51 ⠛ 䞠ҷ㸼ⱘ 䚼 㒱 Ёⱘ ˗0X8000 Ӏ 䴶 ӀЎLED 䜡ⱘ ˈ ϡ䖛 㣗 П Ӏӏ ϔϾ DŽ䖭ḋˈϞ䴶䖭 䇁 ⱘ ˈ 0X0F䖭Ͼ Ў0X8000ⱘ 䚼 ˈ Ҏ 㛑㽕䯂ˈ䖭䞠 ⱘϡ 䚼ˈ 䆒 DŽ≵䫭ˈ 䬂⚍ њ˖ ⠛ 㸠Ϟ䗄䇁 ˈ ⠛ 佪 㽕 ⱘ 16ԡ 0X8000䖙䗳䗕 㒓Ϟˈℸ ˈḍ Ӏ 䴶ⱘ䅼䆎ˈ䖭Ͼ16ԡ ˄ Џ㽕 A14ˈA13ˈA12䛑ЎĀ0ā˅䖙䗳Փ138䗝ЁCS_LEDˈ⊼ 䖭 㱑✊ 㒓ϞӴ䕧ˈԚ 䆹 䆒ⱘ䖭Ͼ374ⱘCLKッ≵ Ϟ ⊓ ˈ ϡӮӴ䕧㒭LED 㟈 DŽ㋻ ⴔ ⠛ P0 0X0F䗕 㒓Ϟˈḍ Ϟ䴶 䅼䆎䖛ⱘˈ䖭Ͼ ⴔWR ⱘϞ䏇⊓ Ӵ䕧 њ374ⱘ䕧 ッˈ䖭ḋ㒧 ˖ 6Ёⱘ 䖍 ϾLED㹿⚍҂ˈ 䖍 Ͼ❘♁DŽѯ䇏㗙㽕䯂ˈ㛑ϡ㛑ϡ㽕WR䖭Ͼ ˈⳈ LEDⱘ⠛䗝 CS_LED 374ⱘCLKッ ?䖭 㽕㒭 㾷䞞ⱘѠϾ䯂乬DŽ䇋 Ҩ㒚 ϔϟˈ Ӏⱘ 䬂䯂乬 㒭㢃⠛374ⱘCLKッϔϾϞ䏇⊓ ˈ䙷М њWR䖭ϾĀ ā 㗠Ⳉ LEDⱘ⠛䗝 CS_LED 374ⱘCLKッ 㛑ѻ⫳Ϟ䏇⊓ ?ㄨḜ ϡ㛑ˈ ЎCS_LEDⱘ䗝Ё 䴴 ⠛ P2 ˄ 催8ԡ ˅䖯㸠䆥ⷕⱘˈ ϡ Ҫ 䚼䆒 䚼 ϡҎЎ P2 ˈ䙷МCS_LED 㒜䗝Ёⱘˈг ϔⳈ Ԣ⬉ DŽ㞾✊г ϡӮѻ⫳374CLKッ 䳔㽕ⱘϞ䏇 DŽ6 LED ⼎♃ⱘ 㒓䆒䅵⊩3.2 ⷕㅵⱘ 㒓䆒䅵⊩㡖 Ѣ ⷕⱘ 㒓䆒䅵⊩ Ϟ㉏ԐѢϞ䗄LEDⱘ䆒䅵⊩ˈ ℸ⬉䏃 㒭 ˈ 7 ⼎ˈ⬭㒭䇏㗙㞾㸠 DŽ7 ⷕㅵⱘ 㒓䆒䅵⊩3.3 A/D䕀 ⱘ 㒓䆒䅵⊩䖭ϔ㡖 ҹ Ё ⫼ⱘ8ԡA/D䞛䲚㢃⠛ADC0809㒭 ҟ㒡ϔϟA/D 䕀 ⱘ 㒓䆒䅵⊩ˈ 8 ⼎DŽЎA/D њ 䕀 䇏䕀 ϸϾℹ偸ˈ ҹ ⬉䏃䆒䅵Ёˈ 䞛⫼њϸϾ 䴲䮼Ў 䘏䕥ˈ㟇ѢЎҔМ䗝⫼ 䴲䮼ˈ ҹ㞾㸠 DŽ㽕㦋 AD ˈϔℹ 乏佪 ADˈ⬅催ԡ 㒓A12~A15䗮䖛138㒘 䆥ⷕ⬉䏃ѻ⫳ADC0809ⱘ⠛䗝 CS_ADDŽ㽕 ADC0809 乏佪 ADC0809ⱘALEッ STARTッˈ䖭ϸϾ CS_AD CPU ⱘWR ˈ ℸ㽕 AD 乏佪 Փ㛑CS_AD ⱘ 䆥ⷕ ӏ ϔϾ ˈҹ㒭ALE STARTッѻ⫳ 㛝 DŽ䖭Ͼ ⱘ䆥ⷕ Ң74HC138ⱘ⬉䏃 ҹⳟ 0xA000Hˈ 㣗 ӏ ϔ DŽ ADC0809ⱘALE STARTッѻ⫳њ 㛝 ˈADC0809 䖯 䕀 ˈEOCッ䕧 Ԣ⬉ ˈ 䕀 ˈEOCッӮѻ⫳ϔϾϞ ⊓ ˈ 催⬉ DŽҹ㾺 ⠛ Ё ˈ 䆝 ⠛ ℸ 䕀 ↩ˈ ҹ䇏 䕀 ⱘ њDŽ䇏 㽕Փ㛑ADC0809ⱘENABLE (催⬉ )ˈ䖭Ͼ ⬅RDCS_0809 㒘 ˈ ҹ㽕䇏 ˈ 乏 ADC0809 ⱘ⠛䗝 ϔϾ䇏 Ҹ 㛑㦋 㒓Ϟⱘ њDŽA/D䕀 ⼎՟˖XBYTE [0XA000]=0X0F˄⊼ 䖭Ͼ ҹӏ ˅˗䇏 A/D䕀 ⼎՟˖Temp=XBYTE [0XA000]˗⊼˖Temp ϔϾЈ 䞣DŽ8 A/D䕀 ⱘ 㒓䆒䅵⊩3.4 D/A䕀 ⱘ 㒓䆒䅵⊩䖭ϔ㡖 ҹ Ё ⫼ⱘ8ԡD/A䞛䲚㢃⠛DAC0832㒭 ҟ㒡ϔϟD/A 䕀 ⱘ 㒓䆒䅵⊩ˈ 8 ⼎DŽ⊼ 䖭䞠 Ӏ DAC0832 䚼ϔ㑻㓧 ⱘ ッILE њ催⬉ Ϟˈ䖭ḋˈ ѢDAC0832ⱘ 䚼 Ӵ䕧 䇈 ϔ㑻㓧 њˈг 䇈ˈ 䖭⾡ ϟˈ ✻DAC0832ⱘ 䕀 ⧚ˈ佪 㽕䕀 ⱘ8ԡ 䗕 DAC0832ⱘ8ԡ䕧 ッ ˈ✊ WR1ǃWR2ǃCSǃXfer ԡ 㕂ЎԢ⬉ ˈ Ӯ偀Ϟ D/A䕀 ˈ䖭ḋˈ ⫼䴲 㒓 䇏 D/A 䕀 ⱘ䆱ˈ Ӏ ҹ WR1ǃWR2ǃCSǃXfer Ͼッ 䖲 ϔ ˈ 䆒䖲 ⠛ ⱘP1_1 ˈ䙷М ҹ ⫼ϟ䴶ⱘ⼎ ҷⷕ䖯㸠䕀 ˖P0=0XF0˗˄ 䆒0XF0Ў㽕䕀 ˅P1_1=0˗˄ 㕂ԢWR1ǃWR2ǃCS ǃXfer ˈҹ D/A 䕀 ˅䙷М ✻ Ӏ 8 ⼎ⱘ䆒䅵 ⧚ 䆹 ԩ䖯㸠 㒓䇏 ⱘ 㓪 ˛ ⧚ ЁDAC0832ⱘ⠛䗝 CS_D/A 74HC138䆥ⷕ ѻ⫳ˈ ҹ㽕 DAC0832ˈ 乏 CS_D/A ⱘ⠛䗝 DŽ䖭Ͼ 0XB000H ˈ ✊ 㽕 0XB000~0XBFFF ӏ䗝 ϔ DŽ䖭ḋ ✻ Ӏ Ѡ㡖ⱘ䅼䆎ˈ ҹ ⫼ϟ䗄䇁 䖯㸠 㒓 ⊩ D/A 䕀 ˖XBYTE [0XB000]=0X0F ˗˄ 䆒0XF0Ў㽕䕀 ⱘ ˅㾷䞞ϔϟ˖ ⠛ 㸠Ϟ䗄䇁 ˈ佪 䕧 16ԡ ˈP2 催8ԡ ⫼ 䗝䗮138ⱘCS_D/A 䕧 ッˈ⬅ѢDAC0832ⱘCS ǃXfer 䖲 њϔ䍋ˈ䖭ḋ 㟈䖭ϸϾ ッ Ў0ˈԚ 䖭 ⬅Ѣ ⠛ ⱘWR 䖬≵ ˈ ℸ DAC0832䕧 㒓ϞⱘԢ8ԡ ϡӮ䖯 䚼ˈ ⠛ ⱘWR ˈ DAC0832ⱘWR1ǃWR2г 㹿WR 㕂ЎԢ⬉ ˈ DAC0832䕧 㒓Ϟⱘ8ԡ 㹿Ӵ 䚼㞾 䖯㸠䕀 ˈџ Ϟˈ ⠛ ⱘWR ⱘ ˈ ⠛ P0 䕧 ⱘ 㒣ϡ ⱘԢ8ԡ њˈ㗠 њ8ԡ ˈ㢹䇏㗙䖬 ϡ ⱑˈ䇋 Ҩ㒚ⷨお 2 DŽQVWX t9 D/A䕀 ⱘ 㒓䆒䅵⊩3.5⎆ ⱘ 㒓䆒䅵⊩䖭ϔ㡖䞠 ҹKS0107BЎ偅 ⱘ ⫼12864⎆ Ў՟㒭 䆆㾷ϔϟ⎆ ⱘ 㒓 䆒䅵DŽ䆹⎆ ⱘ 䚼 ⧚Ḛ 10 ⼎ˈ⬅ 㾕ˈ 20Ͼㅵ㛮ˈ 䖭䞠 Ӏ 15Ͼㅵ㛮ˈ ⎆ ⱘ8ԡ 㒓DB0 ~ DB7ˈ䇏 RS, R/W ˈ䆺㾕㸼3ˈ⎆ ⠛䗝 Eˈ⎆ 䗝 CS1ǃCS2ˈ䆺㾕㸼4DŽ㸼3䇏 䗝RS R/W 㛑0 Ҹ1䇏⢊ ˄ Ẕ⌟˅11䇏㸼4 䗝CS1CS2䗝0⽕ℶ111⽕ℶCS2CS1VSSVO10 KS0108B偅 ⎆ 䚼Ḛ✻ Ӏ⎆ 䜡ⱘ⠛䗝 CS_LCDЎ0XC000~0XCFFFˈ䖭䞠 Ӏ 0XC000ˈḍ 11ⱘ⬉䏃⹀ӊ䖲㒓ˈ⎆ ⱘ8ԡ 㒓Ⳉ ⠛ ⱘ㒓ϞˈA0ǃA1 䖲 ⎆ ⱘ䗝 CS1ǃCS2ϞˈA2ǃA3䖲 ⎆ ⱘ䇏 RS, R/WϞˈ䖭ḋḍ Ϟ䴶ⱘ䅼䆎 Ӏϟ䴶 ⎆ ⱘ8Ͼ ˖#define LCD1_ORD XBYTE[0XC002]/*LCDCS1 Ҹ */#define LCD2_ORD XBYTE[0XC001]/*LCDCS2 Ҹ */#define LCD1_WD XBYTE[0XC006]/*CS1 */#define LCD2_WD XBYTE[0XC005]/*CS2 */#define LCD1_RD XBYTE[0XC00E]/*CS1䇏 */#define LCD2_RD XBYTE[0XC00D]/*CS2䇏 */#define LCD1_RS XBYTE[0XC00A]/*CS1䇏⢊ */#define LCD2_RS XBYTE[0XC009]/*CS2䇏⢊ */ В՟˖/*******⎆ *******/void busy(void){unsigned char m_lcdStatu;do{m_lcdStatu=LCD1_RS;}while(m_lcdStatu&0x80);}/******** ⎆ ⼎ ********/void Playon(){busy();LCD1_ORD=0x3F;// ⼎busy();LCD2_ORD=0x3F;// ⼎}11⎆ ⱘ 㒓䆒䅵⊩3.6ⶽ䰉䬂Ⲭⱘ 㒓䆒䅵⊩ϟ䴶㒭 ҟ㒡ϔϟ ⱘ 㒓 ⶽ䰉㸠 䬂Ⲭ䆒䅵 ⊩ˈ 㾕 12DŽ䆹⬉䏃 ҹ 64Ͼ䬂ˈ Ў8㸠ˈ8 DŽ ⧚ ˖574䖯㸠㸠 䕧 ˈ245䖯㸠 䕧 DŽϟ䴶ҹ 䇁 䖯㸠В՟ 䗄˖XBYTE[0XE000]=0XFE˗䖭 䇁 㸼⼎ 㸠䕧 0XFE䗮䖛 ⠛ 㒓䕧 574ⱘ䕧 ッDŽ㟇Ѣ ԧ䖛 ԩ ⦄ⱘˈ ⧚㉏ԐϞ䴶ⱘLED䆒䅵⊩ˈ䇋䇏㗙㞾㸠 DŽtemp =XBYTE[0XD000]˗//tempЎ㞾 НЈ 䞣䖭 䇁 㸼⼎ 䕧 XBYTE[0XD000]䗮䖛 ⠛ 㒓䕧 245ⱘ䕧 ッˈ ⧚ҡ✊䇋䇏㗙㞾㸠 DŽҹ ϔ㸠8Ͼ 䬂Ў՟ˈ㒭 ⼎՟ ϟ˖unsigned char keyscan_test(void){unsigned char temp,keyvalue;//ҹϟ ϔ㸠XBYTE[0XE000]=0XFE; //ϔ㸠䕧 Ā0ātemp= XBYTE[0XD00E]; //䇏 ℸ ⱘ 䕧switch(temp) // ϔ㸠䬂Ⲭ{Case 0X7F: keyvalue=1;Case 0XBF: keyvalue=2;Case 0XDF: keyvalue=3;Case 0XEF: keyvalue=4;Case 0XF7: keyvalue=5;Case 0XFB: keyvalue=6;Case 0XFD: keyvalue=7;Case 0XFE: keyvalue=8;}//ҹϟ Ѡ㸠…… …… ……return keyvalue;}12䬂Ⲭⱘ 㒓䆒䅵⊩4ǃ䇜䇜 ԩҢ㡖ⳕ䌘䞥 催 䗳 ϸϾ 䴶Ϟ䖯㸠 ⠛ ㋏㒳Ӏ 䖯㸠 ⠛ ㋏㒳ⱘѻ 䆒䅵ˈ 㽕㗗㰥ѻ ⱘ ˈ䖭 Ѣ 䩜 ϔ䆒䅵 ⱘѻ 䖯㸠 㾘⫳ѻ ˈ Ў䞡㽕ˈ↨ ѻ 㽕 䞣⫳ѻ ϛӊˈ㗠ℸ Ӏ㛑 ℸѻ ⱘ䆒䅵Ё㡖ⳕ ϔ 㢃⠛ˈ↨ 1 䪅ˈ䙷М Ӏ ҹ㡖ⳕ ϛ 䪅ˈ⬅ℸ ҹˈ 㛑 㛑ⱘ ⸔ПϞˈ ԩ ⱘ 㡖㑺䆒䅵 Мⱘ䞡㽕 !ϟ䴶 㒧 䅼䆎ⱘ ⠛ 㒓䆒䅵⊩ 䇜䇜 ѯ ϟ ԩ䰡Ԣѻ 䆒䅵 ⱘDŽ4.1 䆥ⷕ⬉䏃ⱘⱘㅔ 䆒䅵4.1.1 ㋏㒳Ё ҹ 138ˈⳈ 䞛⫼㒓䗝⊩䆥ⷕϞ䴶ⱘ䆒䅵Ёˈ Ӏ䞛⫼њ138䆥ⷕˈ 䆒䅵 ㋏㒳ˈ 㒓Ϟⱘ 䚼䆒 ϡ䍙䖛8Ͼⱘ䆱ˈ Ӏ ҹ 138䖭Ͼ㢃⠛ҹ㡖ⳕ⬉䏃 ぎ䯈 ˈ ԧ⹀ӊ䖲 13 ⼎ˈг Ⳉ ⫼ ⠛ ⱘ催8ԡ 㒓 Ў 䚼䆒 ⱘ⠛䗝 ˈ䖭 䇧ⱘ㒓䗝⊩ 䆥ⷕDŽ13㒓䗝⊩ 䆥ⷕ4.1.2 138䆥ⷕ 䇏 䘏䕥ҢϞ䴶 Ӏ䆒䅵ⱘ Ͼ 䚼䆒 Ёˈ Ӏϡ䲒 ⦄ˈ↣ϔϾ ⱘ374 㗙574ⱘCLKッ Ӏ䛑⫼ њϔϾ 䮼 㗙 䴲䮼Ў䗝䗮䘏䕥ˈ䖭ḋⱘ䆱 䚼䆒 ⱘ䆱ˈ 㽕⫼ ㉏Ԑⱘ䘏䕥䮼⬉䏃ˈ䙷М Ӏ ҹ㡖ⳕҹϟ ˛ Ҩ㒚ⷨおϔϟⱘ䆱ˈϡ䲒 ⦄ˈ Ӏⱘ䖭⾡↣ϔϾ䘏䕥䛑 138 䆥ⷕⱘ 䴶ˈ Ӏϡ Ͼ 㓈㗗㰥ϔϟˈ ϔϾ 䗖ⱘ䘏䕥䮼 138 䴶 ҹ ϾĀ ԧ䘏䕥ā DŽ䇋ⳟ 14ˈ138ⱘϸϾ ⬉ ッE1ǃE2Ⳉ ˈ㗠 催⬉ ッE3 ⬅ ⠛ ⱘWRǃRDϸϾ ĀϢ䴲ā ⱘˈ ϟˈ ⠛ ϡ䇏 ӏԩ 䚼䆒 ˈ WRǃRDϸϾ Ў催⬉ ˈϢ䴲䮼䕧 Ԣ⬉ ˈ138ϡ ˈ䕧 催䰏ˈ⬅Ѣ 䚼 њϞ ⬉䰏ˈ 7Ͼ 䚼䆒 ⠛䗝 Ў催⬉ ˈ ϔ 䇏 䚼䆒 ˈWRǃRDϸϾ Ё ϔϾ㽕 Ў ˄ Ԣ⬉ ˅ˈ 㟈Ϣ䴲䮼䕧 催⬉ ˈ138 ˈ 䕧 г 8Ͼ⠛䗝 ϔ㹿䗝Ё˄ ЎԢ⬉ ˅ˈ WRǃRD 催ⱘϔⶀ䯈˄ ϔ䇏 䖛Ё ϔ ˈ ҹ䖭䞠 䩜 ЁϔϾ㗠㿔˅ˈϢ䴲䮼䕧 ЎԢˈ 㟈138 ℶ ˈ 䕧 催䰏ˈ㗠 ⱘ䙷Ͼ⠛䗝 ⬅Ѣ 䚼Ϟ ⬉䏃ⱘ⫼ˈ䖙䗳Ң㹿䗝Ё⢊ ˄Ԣ⬉ ˅Ϟ䏇 催⬉ ˈ䖭ḋ њ 㓁 䚼䆒 374CLKッ 䳔㽕ⱘϞ ⊓ ˈг 䕧 䚼䆒 㗙䇏 䚼䆒 ⱘ DŽ14 138䆥ⷕ 䇏 䘏䕥4.1.3 Gal 138 ⦄ 㾘 㛑䆥ⷕӀ ϔ㠀ⱘ ⠛ ㋏㒳䆒䅵Ёˈ䆥ⷕ⬉䏃 Ϟ䛑 䞛⫼㉏Ԑ138ⱘ䆥ⷕ㢃⠛ˈԚ ϡ㽕 ⬹њ䖬 ϔ⾡ 㛑䴲 ⱘ ⫼䗮⫼䘏䕥㢃⠛ˈ䙷 㓪䘏䕥 ӊGalDŽ 㒣偠ⱘ 㛑䛑䴲 ⫼䖭⾡⠛ ˈ↨ Gal16V8ˈGal20V8ㄝㄝϸ⾡ ⫼ⱘ㢃⠛ˈ Ў䗮䖛 䖭⾡ ӊ㓪ˈ Ӏ ҹ ҷϔ㠀 ⠛ 䆒䅵Ё⫼ ⱘ 䆥ⷕ䘏䕥㢃⠛ˈ 㓪 ˈ ҹ ϡ ⹀ӊ䖲 ⱘ ϟ 䆒 䞡 䖯㸠 䜡ˈ 㡖ⳕњ 䯈ˈ г䰡Ԣњ⬉䏃 ⱘ ⫼䴶⿃ˈ 催њ㋏㒳ⱘ〇 DŽԚ ϔ 䴶ˈ䆹㢃⠛ӋḐ 䌉ˈ ὖ8-10 /⠛ˈ 催Ѣ138㢃⠛ˈ ҹ 䖭䞠 䖬 䇗䙷ϔ⚍ˈ ϔ 㽕 䖯㸠㞾 ⱘ䆒䅵 㗗㰥 䗳 ⱘ 㸵 ˈҹ Ӭ 䆒䅵DŽ 15 ⫼Gal20V8䆒䅵䖛䆥ⷕ⬉䏃ˈ Galⱘ ԧ䆺㒚䌘 ˈ㔥Ϟ 䌘 ˈ г 䖛ҟ㒡ˈ䖭䞠ϡ 䆺䗄DŽ15 Gal16V8 ⦄ 㾘 㛑䆥ⷕ4.2䬂Ⲭ ҹ㡖ⳕ ϔϾ㢃⠛Ӏ 3.6㡖㒭 ҟ㒡њⶽ䰉䬂Ⲭⱘ 㒓䆒䅵 ⊩ˈ 㗙ⳟ䍋 ԐТ 㾝䴲 ˈ Ў Ӏ ⱘ䬂Ⲭ䆒䅵Ёˈ Ӏ ϔ㠀д ѢⳈ I/O䇏 㓪 ⶽ䰉䬂Ⲭˈ 㗙 䞛⫼ ϞⳂ 䕗Ў ❳ⱘІ㸠䬂Ⲭ 㢃⠛ˈ↨ 䇈ZLG7279ㄝㄝˈ 䳔㽕ϝḍ㒓㗠 ˈԚ њˈ Ӏ 䖭⾡䆒䅵Ё ≵ ⫼ ⠛ ҪI/O ⱘ䌘⑤ˈҡ✊ ⫼ⱘP0 ⱘ ⫼ 㛑ˈ ҹ 㡖ⳕњ䌘⑤ˈ䙷М3.6㡖ⱘ䬂Ⲭ⬉䏃Ё⫼ ⱘϸϾ㢃⠛ 㛑 ㅔ ˛ㄨḜ 㚃 ⱘˈ 㽕䆒䅵ⱘϡ ⶽ䰉䬂Ⲭˈ㗠 Ⳉ䇏 䬂Ⲭˈ 㽕ϡ䍙䖛8Ͼ䬂ˈ Ӏ 12⾡ⱘ574 ˈ ⬭245 ˈ ✊ 䍙䖛8Ͼ䬂ˈ ҹ 䖯㸠 㒓 ˈϡ䖛䖭ḋ њ㡖㑺ⱘ Нˈ ҹ䖭ḋ 䖯 ゟ 䬂Ͼ ↨䕗 ⱘ ϟ䖯㸠ⱘDŽϟ䴶 㒭 ҟ㒡ϔ⾡ ⫼ϔϾ㢃⠛ 㛑䆒䅵 㒓 䇏 ⱘ16䬂ⶽ䰉䬂Ⲭˈ䇋ⳟ 16DŽ16 㒓 䬂Ⲭㅔ 䆒䅵⊩ҹϟ䴶䖭 䇁 䯤䗄Ϟ䗄䬂Ⲭ⬉䏃ⱘ ⧚˖XBYTE[0XD00E]&0X0F⊼ 0XD00E 䬂Ⲭⱘ䇏⠛䗝 0XD000~0XDFFFПϔˈ ⠛ 㸠Ϟ䗄䇁 ˈԢ8ԡ 0X0E㹿 䫕 䫕ԣˈ Ԣ ԡ A3ǃA2ǃA1ǃA0㹿 15Ё573ⱘԢ ԡ䕧 ッ ˈԚℸ ⬅Ѣ573 ⱘ䕧 ッOEЎ催⬉ ˈ 䆹 ԡ ⊩Ӵ䕧䖛 ˗㗠催8ԡ 㒣䖛 䆥ⷕ 138䆥ⷕ 䗝Ё䬂Ⲭ⠛䗝 CS_KEY_RDˈՓ 䕧 Ԣ⬉ ˈ ⠛ 䇏 RD ˈ Փ 䴲䮼䕧 Ԣ⬉ ˈ573 䆌 Ң Ӵ䕧ˈ䖭 573䕧 ッⱘԢ4ԡ 䖙䗳Ӵ䕧 573ⱘ䕧 ッˈ✊ ḍ 䬂Ⲭⱘ 䬂⢊ ˈ 䖭 ԡ䕧 䗮䖛䬂Ⲭ䖲㒓䖙䗳 作 573䕧 ッⱘ催 ԡϞ䴶ˈ ⊼ ˈ Ϟ䗄䖭ϔ䖛 ⶀ䯈 ⱘDŽ ⬅Ѣℸ 573 䆌 Ӵ䕧ⱘˈ ҹ573䕧 ッⱘ催 ԡ䬂Ⲭ 作 䗮䖛573䕧 䗕 ⠛ Ԣ ԡ㒓ϞDŽ 㒧 ϔ 䆱 ˖䆹䬂Ⲭ⬉䏃ⱘ 䗮䖛䗕 ⱘԢ ԡ 㒓 䖯㸠䬂Ⲭ ⱘˈЎњ䅽 ⱑˈ 䆹䬂Ⲭ⬉䏃ⱘ Ѣϟ˖unsigned char keyscan_test(void){unsigned char temp,keyvalue;//ҹϟ ϔ㸠//ϔ㸠䕧 Ā0ā ˈ 㬑 催 ԡ 䇏 ℸ ⱘ䬂Ⲭtemp= XBYTE[0XD00E]&0X0F;switch(temp) // ϔ㸠䬂Ⲭ{Case 0X0E: keyvalue=1;Case 0X0D: keyvalue=2;Case 0X0B: keyvalue=3;Case 0X07: keyvalue=4;}//ҹϟ Ѡ㸠//Ѡ㸠䕧 Ā0ā ˈ 㬑 催 ԡ 䇏 ℸ ⱘ䬂Ⲭtemp= XBYTE[0XD00D]&0X0F;switch(temp) // Ѡ㸠䬂Ⲭ{Case 0X0E: keyvalue=5;Case 0X0D: keyvalue=6;Case 0X0B: keyvalue=7;Case 0X07: keyvalue=8;}//ҹϟ ϝ㸠//ϝ㸠䕧 Ā0ā ˈ 㬑 催 ԡ 䇏 ℸ ⱘ䬂Ⲭtemp= XBYTE[0XD00B]&0X0F;switch(temp) // ϝ㸠䬂Ⲭ{Case 0X0E: keyvalue=9;Case 0X0D: keyvalue=10;Case 0X0B: keyvalue=11;Case 0X07: keyvalue=12;}//ҹϟ 㸠// 㸠䕧 Ā0ā ˈ 㬑 催 ԡ 䇏 ℸ ⱘ䬂Ⲭtemp= XBYTE[0XD007]&0X0F;switch(temp) // 㸠䬂Ⲭ{Case 0X0E: keyvalue=13;Case 0X0D: keyvalue=14;Case 0X0B: keyvalue=15;Case 0X07: keyvalue=16;}return keyvalue;//䖨 䬂}5ǃ 䆂 㒧㒧 51㋏ ⠛ ˈ 䴶㋏㒳ⱘ䅼䆎њ 䚼䆒 ⱘ 㒓 䆒䅵 ⊩DŽҢ䆒䅵 ⧚ⱘ䆆㾷 ⾡ ⱘ䆒䅵В՟ˈ䛑㒭 њ䆺㒚ⱘ䆎䆕ˈⳌ 䇏㗙ⳟ ҹϔべ ⠛ 㒓 䆒䅵 ⊩ⱘ 䉠DŽ㗙㱑✊㢅њ 䞣㆛ 䆆㾷 㒓 䆒䅵 ⊩ˈԚ 䰙䆒䅵Ёˈ 䆂䇏㗙䖬 㽕ҹ 䰙乍ⳂЎ ˈ 䞣䗝 䗖 Ѣ㞾 ⱘ ⊩ˈ↨ 䇈ϔѯ䴲 ㅔ ⱘ㋏㒳ˈ Ӏ ҹ ⫼䴲 㒓䆒䅵 ⊩ⱘӬ⚍ˈ 㡖ⳕ 䆒 ⬉䏃ⱘ DŽ ҹ 䖯㸠 ⠛ ㋏㒳䆒䅵 ϔ 㽕ḍ 㞾 ⱘ ˈ䆒䅵 䗖 Ѣ㞾 ⱘ⬉䏃DŽ。