C51单片机常用接口电路设计
合集下载
10MCS-51单片机常用接口电路

0000H
START
000BH
T0_INT
SP,
#5FH
TMOD, #01H
TH0, #0F8H
TL0,
#30H
TR0
ET0
EA
DISP_W, #00H
DISP_BIT
DISPLAY
LOOP
;复位入口地址。
;跳到主程序。
;定时/计数器0中断入口地址-51使用统一编址的方式每一接口芯片中的 一个功能寄存器(端口)的地址就相当于一个RAM单 元。 10.1.3 I/O数据的几种传送方式
为实现和不同的外设的速度匹配,I/O接口必须 根据不同外设选择恰当的I/O数据传送方式。I/O数据 传送的几种传送方式是:
(1)同步传送 (2)查询传送 (3)中断传送。
;定时/计数器0工作于方式1。 ;设置定时2ms的定时器初值高位。 ;设置定时2ms的定时器初值低位。 ;允许T0计数。 ;允许T0中断。 ;开单片机中断。
;指向显示的第一个数码管。
;清除定时标志DISP_BIT。 ;调显示子程序。
T0_INT: MOV
MOV
SETB RETI
;显示子程序入口: DISPLAY: JB
d
c
b
a
段码如下表所示:
显示字符 0 1 2 3 4 5 6 7 8 9 A B
共阴极段码 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77FH 7CH
共阳极段码 C0H F9H A4H B0H 99H 92H 82H F8H 80H 90H 88H 83H
显示字符 C D E F P U T y H L
第10章 MCS-51单片机常用接口电路 10.1 扩展I/O接口的设计 ➢MCS-51单片机要通过I/O接口来和外设交换信息。 ➢I/O扩展属于单片机系统扩展的一部分,MCS-51单 片机有P0~P3共4个8位的并行I/O口,由于P0和P2 在很多场合要用作16位的地址总线和8位的数据总 线,真正能用作I/O接口的只有P1口和P3口的部分 引脚。 ➢在具体应用设计中往往需要扩展I/O接口。
单片机原理与C51基础赵丽清-第9章单片机的接口技术

9.1 单片机键盘接口技术
9.1.2矩阵式键盘
在键盘中假定有A键被按下,这时键盘矩阵中A点处的行线和列 线相通。 键扫描的过程是:先从端口输出FEH,即是左端列线为低电平, 然后CPU读取行线状态,判断行线状态中是否有低电平者 (见图9-6(a));如果没有低电平,再从输出口输出FDH, 再判断行线状态(见图9-6(b));依次向下,当输出口输出 FBH时,行线状态中有一条为低电平,则闭合键找到(见图 9-6(c))。如此继续进行下去,以发现可能出现的多键同时 被按下的现象。
第9章 单片机的接口技术
第9章 目录
9.1 单片机键盘接口技术
9.1.1 独立键盘 9.1.2 矩阵式键盘 9.2 数码显示器接口电路 9.2.1 数码管显示原理 9.2.2 数码管动态显示 9.3 A/D转换接口技术 9.4 D/A转换接口技术
9.1 单片机键盘接口技术
9.1.1独立键盘
9.1 单片机键盘接口技术
9.1.2矩阵式键盘
2、矩阵式按键的识别 (1).测试有键被按下否 ②单片机键扫描方式 键盘扫描工作方式选取原则是:既要保证及时响应按键操作, 又不过多占用单片机工作时间。键盘扫描工作方式有3种, 即查询扫描、定时扫描和中断扫描。 查询方式,利用单片机空闲时,调用键盘扫描子程序,反复扫 描键盘。如果单片机的查询的频率过高,虽能及时响应键盘 的输入,但也会影响其他任务的进行。查询的频率过低,可 能会对键盘的输入漏判。所以要根据单片机系统的繁忙程度 和键盘的操作频率,来调整键盘扫描的频率。 定时扫描,每隔一定的时间对键盘扫描一次。在这种方式中, 通常利用单片机内的定时器产生的定时中断,进入中断子程 序来对键盘进行扫描,在有键按下时识别出该键,并执行相 应键的功能程序。为了不漏判有效的按键,定时中断的周期 一般应小于100ms。
第4章单片机原理及应用(C51编程)

4.3 C51的函数
4.3.1
返回值类型 { 函数体 }
C51函数的定义
函数名(形式参数列表)[编译模式][reentrant][interrupt n][using n]
一般形式:
编译模式为SMALL、COPACT或LARGE reentrant用于定义可重入函数 interrupt n 用于定义中断函数,n为中断号,可以为0~31 using n 确定工作寄存器组,取值为0~3
从而使DBYTE用于以字节形式对data区访问,可以写成:
与此类似: CBYTE用于以字节形式对code区进行访问; PBYTE用于以字节形式对pdata区进行访问; XBYTE用于以字节形式对xdata区进行访问。
CWORD、DWORD、PWORD和XWORD用于以字形式对 code区、data区、pdata区和xdata区进行访问。
4.2.4
C51程序编写示例
C51源程序
C51编译器
浮动目标码模块 系统库 连接器
列表文件 用户库
绝对定位目标码文件
映像文件
软件模拟器
转换器
硬件仿真器
OMF51格式文件 写入程序存储器 编程器
【例4-1】将30H至3FH共16个RAM单元初始化为“55H”。 #include <reg52.h> #include <absacc.h> void main(void) { unsigned char i; for (i=0;i<=15;i++) { DBYTE[0x30+i]=0x55; } while(1); } 编译系统自动连接了 startup.a51生成代码 一是将内部RAM的 00H~7FH清0; 二是设置堆栈指针SP。 有全局变量赋值时 编译系统会自动连接 init.a51生成代码
第3章51系列单片机程序设计(C语言部分)

idata
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256字节)
pdata
分页寻址片外数据存储区(256字节)由MOV @Ri访问(i=0,1)
xdata
片外数据存储区(64 KB)由MOVX @DPTR访问
code
程序存储器64 KB空间,由MOVC @DPTR访问
第3章 51系列单片机程序设计(C部分)
/* Ary37定义为abry[3]的第7位 */
第3章 51系列单片机程序设计(C部分)
3.5 数 组
数组:数组是一组类型相同 有序数据的集合。用数组名 和下标来唯一确定数组中的 元素。
第3章 51系列单片机程序设计(C部分)
3.5.1 一维数组
一、一维数组的定义 形式:类型说明符 数组名 [常量表达式]
使用C51进行编程时,MCS-51片内的I/O口与片外扩展的I/O可以统一在一个头文 件中定义,也可以在程序中(一般在开始的位置)进行定义。
对于MCS-51片内I/O口按特殊功能寄存器方法定义。 例如:
sfr P0=0x80 ; /* 定义P0口,地址为80H */ sfr P1=0x90 ; /* 定义P1口,地址为90H */
第3章 51系列单片机程序设计(C部分)
3.4.3 C51数据的存储类型与MCS-51存储结构
表 3.4.2 C51存储类型与MCS-51存储空间的对应关系
存储类型 与存储空间的对应关系
data
直接寻址片内数据存储区,访问速度快(128字节)
bdata
可位寻址片内数据存储区,允许位与字节混合访问(16字节)
据 浮点型(float) 类
型 指针类型
详细见表3.4.1
C51单片机原理图

GND SW1/51 3 SW2/AVR
HEADER 5X2
四位共阴数码管
R1 1K GND
P2.7 P2.6 P2.5 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 P2.4 P2.3 P2.2
P2.7 12 12 9 8 6 9 8 6
D
GND VCC KT1/10K
IC8 位控制 A B C D E F G H P2.6 1 2 3 4 5 6 7 15
VCC
PR2 470-5.1K都可以
GND 1 2 3 4 1 3 5 7
8位LED发光管
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 NTC1 温度电阻 22P C8 X1 20 19 18 17 16 15 14 13 IO 11 10 9 8 7 6 5 4 3 2 1 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 LED1 红色 P2.7 P3.7 1 P3.6 2 P3.5 3 P3.4 4 P3.3 5 P3.2 6 TXD P3.1 7 RXD P3.0 8 STR P1.7 1 P1.6 2 P1.5 3 P1.4 4 P1.3 5 P1.2 6 P1.1 7 P1.0 8 VCC LED2 红色 LED3 黄色 P2.5 LED4 黄色 LED5 红色 P2.3 LED6 红色 LED7 绿色 P2.1 LED8 绿 1 2 3 R4 1K STR
A P5 2 1 SPEK RL1
标准AT ISP下载接口
P1.5 RESET P1.7 P1.6 VCC 1 2 1 3 5 7 9 2 4 6 8 10 VCC R5 10K
C51单片机接口

T2
引脚
MUX
读引脚
② 输入时----分读引脚或读锁存器
读引脚:由传送指令(MOV)实现;
下面一个缓冲器用于读端口引脚数据,当执行一条 由端口输入的指令时,读脉冲把该三态缓冲器打开, 这样端口引脚上的数据经过缓冲器读入到内部总线。
读锁存器
地址/数据 VCC 控制
内部总线 写锁存器
DQ CLK Q
T1
读锁存器
内部总线 写锁存器
地址/数据 VCC 控制
DQ CLK Q
T1
T2 MUX
P0.n P0口 引脚
读引脚
①输出1、时P0口作为普通I/O口
CPU发出控制电平“0”封锁“与”门,将输出上拉场 效
应管T1截止,同时使多路开关MUX把锁存器与输出
读锁存器
内部总线 写锁存器
地址/数据 VCC 控制
DQ CLK Q
P0.n P0口
T2
引脚
MUX
读引脚
② 输入时----分读引脚或读锁存器
读锁存器:有些指令 如:ANL P0,A称为“读-改-写” 指令,需要读锁存器。
上面一个缓冲器用于读端口锁存器数据。
读锁存器
内部总线 写锁存器
地址/数据 VCC 控制
DQ CLK Q
T1
T2 MUX
P0.n P0口 引脚
读引脚
从图中可以看出,在读入端口数据时,由于输出
驱动FET并接在引脚上,如果T2导通,就会将输入的
高电平拉成低电平,产生误读。所以在端口进行输
入操作前,应先向端口锁存器写“1”,使T2截止,
引脚处于悬浮状态,变为高阻抗输入。这就是所谓
的准双向口。
地址/数据 VCC
单片机原理及接口技术(C51编程)单片机各种应用设计

unsigned long freq;
//定义频率
unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,
0x7d,
0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
//共阴数码管段码表
void delay_1ms(unsigned int z) { //函数功能:延时约1ms
#define out P2
sbit pos=P0^0;
//定义检测正转控制位P0.0
sbit neg=P0^1;
//定义检测反转控制位P0.1
void delayms(uint);
uchar code
turn[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
步进电机是将脉冲信号转变为角位移或线位移的开环控 制元件。
非超载的情况下,电机转速、停止位置只取决于脉冲信 号的频率和脉冲数,而不受负载变化的影响,给电机加一脉 冲信号,电机则转过一个步距角。因而步进电机只有周期性 误差而无累积误差,在速度、位置等控制领域有较为广泛的 应用。
12.1 单片机控制步进电机的设计
12.2 单片机控制直流电机
2. 电路设计与编程
当P3.6=1时,P3.7发送PWM波,直流电机正转。且 可通过“INC”和“DEC”两个按键来增大和减少直流电机 转速。反之,P3.6=0时,P3.7发送PWM信号,直流电机反 转。
因此,增大和减小电机转速,实际上是通过按下 “INC”或“DEC”按键来改变输出PWM信号占空比,控 制直流电机转速。图12-4中驱动电路使用了NPN低频、低 噪声小功率达林顿管 2SC2547。
单片机原理及接口技术(C51编程)单片机的开关检测、键盘输入 与显示的接口设计

5.2.1 开关检测案例1
图5-3 开关、LED发光二极管与P1口的连接
5.2.1 开关检测案例1
参考程序如下: #include <reg51.h> #define uchar unsigned char void delay( ) {
uchar i,j; for(i=0; i<255; i++) for(j=0; j<255; j++); }
5.1.2 I/O端口的编程举例
03 用循环左、右移位函数实现
OPTION
使用C51提供的库函数,即循环左移n位函数和循环右
移n位函数,控制发光二极管点亮。参考程序:
#include <reg51.h> #include <intrins.h> 函数的头文件 #define uchar unsigned char void delay( ) {
5.1.2 I/O端口的编程举例
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前8个数据为左移点亮 数据,后8个为右移点亮数据*/ void delay( ) {
// P1口为输入 // 读入P1口的状态,送入state // 屏蔽P1口的高6位
5.2.2 开关检测案例2
switch (state) {
// 判P1口低2位开关状态
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2019/5/14
4
LED的主要部分是七段发光管,分别为a、b、c、 d、e、f、g。有的产品还附带有小数点DP。通 过发光段的不同组合,可以显示0~9和A~F共 16个字母数字。
LED可分为:
(1)共阳级结构
(2)共阴极结构
2019/5/14
5
共阴极LED显示器的发光二极管的阴极连在一起, 通常此公共阴极接地。当某个发光二极管的阳极 为高电平时,发光二极管点亮,相应的段被显示。
//循环八次,写一个字节 //发送BIT0 位 //时钟上升沿 //要发送的数据右移,准备发送下一位
//锁存数据
2019/5/14
18
Void main() {
while(1) {
uchar k=0xb6; wr595(k); P0=0XFEH; }
//5的段码
}
2019/5/14
19
实验2 让8位数码管显示1、2、3、4、5、6、7、8
2019/5/14
13
在程序中,软件按一定频率循环输出位选择信 号和对应的显示数据,利用眼睛的视觉惯性, 从LED显示器上便可见到相当稳定的数字显示。
2019/5/14
14
七段LED数码管实验
硬件连接情况 在实验学习板中,有8个共阴极的LED,位选信 号通过P0口,再通过74HC573驱动LED。段 码通过74HC595(串行输入,并行输出,节约 并口)输出至LED.
7
用专用芯片完成段译码的示意(共阳极)
2019/0~F(或0~9)对应的段码组成一个表,存 在存储器中;
②查表得段码
2019/5/14
9
多位LED显示问题的解决
(1)问题的提出 实际使用时,往往用几个显示管实现多位显示, 如果每一个LED占用一个独立的输出端口,则 占用的输出端口就很多。
2019/5/14
17
//名称:wr595()向595发送一个字节的数据 //功能:向595发送一个字节的数据(先发低位)
void wr595(uchar ucdat) {
uchar i; clk=1; st=1; for(i=8;i>0;i--) {
io=ucdat&0x01; clk=0; clk=1; ucdat=ucdat>>1; } st=0; st=1; }
共阳极LED显示器的发光二极管的阳极连在一起, 通常此公共阳极接正电压,当某个发光二极管的 阴极接低电平时,发光二极管被点亮,相应的段 被显示 。
2019/5/14
6
数字到段码的译码方法 将一个4位二进制数据转换为LED的7位 显示代码(段码)的方法有: (1)专用芯片译码
(2) 软件译码
2019/5/14
(2)通过P0口送位选信号
2019/5/14
16
include <reg51.h> #define uchar unsigned char sbit clk=P2^7; //595时钟信号输入管脚 sbit st =P2^6; //595锁存信号输入管脚 sbit io =P2^5; //595数据信号输入管脚
}
st=0;
st=1;
//锁存数据
}
2019/5/14
22
延迟程序 delay(uint dat) {
while(dat--) {; } }
void wr595(uchar ucdat)
{
uchar i;
clk=1;
st=1;
for(i=8;i>0;i--) //循环八次,写一个字节
{
io=ucdat&0x01; //发送BIT0 位
clk=0;
clk=1;
//时钟上升沿
ucdat=ucdat>>1;/ /要发送的数据右移,准备发送下一位
实际上为了节约并口资源,P0口连接两个 74HC573,另一片驱动点阵及交通灯电路。两 个驱动芯片的转换通过一个波段开关控制。当开 关拨到上边时,点阵驱动电路起作用,相反当拨 到下边时,数码管驱动电路起作用。
2019/5/14
15
实验1
在左边第一个LED上显示数字5 步骤: (1)通过74HC595送5的段码
一个端口 一个端口 一个端口 一个端口 一个端口
2019/5/14
10
(2)问题的解决方法 硬件:采用公用的驱动电路 软件:采用扫描方法
2019/5/14
11
2019/5/14
12
一个数据通道作为位控制,该端口输出的选择信 号使某一位为高电平(共阳极)时,该位对应的 LED便显示数据。
另一个数据通道输出段码,尽管所有的LED均收 到了段码,但只有被位选择信号选中的那个LED 才显示数据,其他并不发光。
第7章 80C51单片机常用接口电路设计
7.1 显示器接口原理及应用 7.2 键盘接口原理及应用 7.3 80C51单片机的模拟量接口
2019/5/14
1
7.1 显示器接口原理及应用
在单片机应用系统中,显示器是最常用的输出设 备。常用的显示器有: 发光二极管(LED) 液晶显示器(LCD) 。 发光二极管(LED)又分为七段LED显示器(数
2019/5/14
20
#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define SLED_BIT P0 //LED位选信号输入管脚
sbit clk=P2^7; //595时钟信号输入管脚 sbit st =P2^6; //595锁存信号输入管脚 sbit io =P2^5; //595数据信号输入管脚
码管)和LED点阵显示屏。
液晶显示器(LCD)又分为字符液晶与图形液晶。
2019/5/14
2
7.1.1 七段LED显示器(数码管)
LED的工作原理 多位LED显示问题的解决
2019/5/14
3
LED的工作原理
七段式LED显示部件 (a)典型的七段式LED器件 (b) 共阳极LED (c) 共阴极LED
uchar code uc7leds[]={0xfc,0x60,0xda,0xf2, 0x66,0xb6,0xbe,0xe0, 0xfe};
//定义0-8段码 uchar display_7leds[8]={1,2,3,4,5,6,7,8};
2019/5/14
21
//功能:向595发送一个字节的数据(先发低位)