项目4 单片机控制LED灯的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//8只LED灯从P1.0到P1.7依次全部点亮
{ P1=recy;
Delay(50000); recy=recy<<1; //将recy左移1位后再赋给recy
}
P1=0xff;
//全部熄灭
Delay(50000);
recy=0x7f;
for(k=1;k<=8;k++) //8只LED灯从P1.7到P1.0逐个点亮
工作电压: 红色发光二极管1.7-2.5V 绿色发光二极管2.0-2.4V 黄色发光二极管1.9-2.4V 蓝/白色发光二极管3.0-3.8V
②限流电阻
二极管串联电阻的目的是为了防止发光二极管和P1.7引脚流过的电流 过大,烧毁二极管或单片机,所以该电阻也称为“限流电阻”。
限流电阻的选择: 假设电源电压为VCC,发光二极管的导通压降为VDD,导通时流过 二极管的电流为I,则限流电阻R为:
P0口特点
(1)P0口既可作地址/数据总线使用,也可作通用I/O口使用。 当P0口作地址/数据总线使用时,就不能再作通用I/O口使用了。 (2)P0口作输出口使用时,输出级属漏极开路,必须外接上拉 电阻,才有高电平输出。 (3)P0口作输入口读引脚时,应先向锁存器写1,使V1、V2截止, 不影响输入电平。
再次强调:图中的单 片机元件没有“VCC” 和“GND”引脚,这是 因为Proteus软件中, 元件模型中的“电源”
和“地”已经进行了 连接,“VCC”接到了 “+5V”电源,“GND” 接到了“地”,所以 隐藏了这两个引脚。
(3)软件程序设计
Fra Baidu bibliotek
#include<reg52.h> //宏定义 sbit led=P1^7; // 用sbit 关键字定义P1.7引脚
单片机控制技术 项目式教程 (C语言版)
电子工业出版社
项目4 单片机控制 LED灯的设计
电子工业出版社
学习目标
能了解51单片机I/O口的结构; 能掌握51单片机I/O口的特点及应用; 能掌握51单片机控制LED灯的硬件设计方法; 能熟练编写单片机控制LED灯闪烁的程序。
工作任务
// 延时子函数 void Delay(unsigned int t) { while(--t); }
在软件编程中,通常使 用空循环来达到延时的效
果。延时时间的长短可以 在Keil C51的调试状态下 分析。
//主函数,控制P1.7引脚的LED灯闪烁
void main (void)
{
while (1)
①从P1.0到P1.7连接的8只LED灯逐个点亮; ②从P1.0到P1.7连接的8只LED依次全部点亮; ③从P1.7到P1.0连接的8只LED灯逐个点亮; ④从P1.7到P1.0连接的8只LED依次全部点亮。
2.任务分析
任务要求单片机控制8个LED灯,当需要对某个I/O口的八位一 起操作时,一般采用整体操作的方式,即总线的方式。在软件设计 时可以定义一个变量来给P1口赋值,赋的值不同点亮的LED灯不同。 由于8只LED灯要按一定规律点亮,这就要求对给P1口赋的变量进
2. P1口
P1口是准双向口,它只能作通用I/O接口使用。结构与P0口不同, 它的输出只由一个场效应管V1与内部上拉电阻组成。
P1口特点
(1)P1口是唯一的单功能口,仅能作为通用I/O口使 用。因在其输出端接有上拉电阻,可以直接输出而无 需外接上拉电阻。
(2)同P0口一样,当作输入口时,必须先向锁存器 写“1”,使场效应管V1截止。
P3.5 P3.6 P3.7
T1
WR RD
定时/计数器 1 的外部输入 外部 RAM 写选通 外部 RAM 读选通
☆ 在真正的应用电路中,P3口的第二功能显得更为重要 。
4.1.2 单片机控制单个LED灯闪烁的设计
1.任务要求 设计一个电路,AT89C52单片机的P1.7引脚连接一个
LED灯,控制LED闪烁。
叙述51单片机I/O口的结构和特点; 设计单片机控制单个LED灯闪烁的电路和工作软件; 设计单片机控制多个循环LED灯的电路和工作软件。
项目4 单片机控制LED灯的设计
任务4.1 单片机控制单个LED灯 任务4.2 单片机控制多个循环LED灯 项目拓展 实验板彩灯的花式控制 项目小结 思考与训练
缓冲器1
D
内部总线, 内部总线。
作为通用I/O使用,是一个准双向口:“在输入数据时应先把口置1, 使V1、V2都截止,引脚处于悬浮状态, 可作高阻抗输入”
② 用作输出口(片内数据 端口)
数据
锁存
MUX
P0.x
(2)地址/数据总线口 ①输出:地址/数据为1,P0·x ——高
地址/数据为0,P0·x ——低 ②输入:经缓冲器1读入
{ recy=0xfe;
for(k=1;k<=8;k++) //8只LED灯从P1.0到P1.7逐个点亮
{ P1=recy;
//先点亮P1.0的LED灯
Delay(50000); //延时一段时间
recy=_crol_(recy,1); //将recy循环左移1位后再赋给recy
}
recy=0xfe; for(k=1;k<=8;k++)
2.任务分析
以单片机 为核心的 电子设计
硬件设计 软件设计
单片机最小系统加 上最简单的输出电 路来驱动LED
编程控制P1.7引脚 的电平状态,使其 持续一段时间的高 电平,再持续一段 时间的低电平
3.任务设计
(1)器件的选择
①发光二极管
发光二极管:单向导电性,通过5mA左右电流即可发光,电流越大, 亮度越强,但若电流过大会烧毁二极管,一般控制在3~20mA。
_cror_(unsigned char c,unsigned char b)
功能
将字符c循环 左移b位
将字符c循环 右移b位
示例
int x;x=_crol_(0xfe,1);表示将 11111110循环左移一位之后赋给x
int x;x=_cror_(0x7f,1);表示将 01111111循环右移一位之后赋给x
}
P1=0xff;
//全部熄灭
Delay(50000);
}
}
(4)软硬件联合调试
将编写的程序在Keil C51中编译成*.hex后调入Proteus 硬件电路图的AT89C52中运行,八只LED灯从P1.0到P1.7逐 个点亮,接下来再从P1.0到P1.7依次全部点亮,然后全部熄 灭后又从P1.7到P1.0逐个点亮,最后再从P1.7到P1.0依次全 部点亮,如此反复形成流水灯。
任务4.1 单片机控制单个LED灯
4.1.1 MCS-51单片机的I/O口介绍
MCS-51系列单片机有4个8位的并行I/O接口:P0、P1、P2和 P3口。它们是特殊功能寄存器中的4个。这4个口,既可以作输入, 也可以作输出,既可按8位处理,也可按位方式使用。输出时具 有锁存能力,输入时具有缓冲功能。
{ P1=recy;
//先点亮P1.7的LED灯
Delay(50000); recy=_cror_(recy,1); //将recy循环右移1位后再赋给recy
}
recy=0x7f; for(k=1;k<=8;k++)
//8只LED灯从P1.7到P1.0依次全部点亮
{ P1=recy;
Delay(50000); recy=recy>>1; //将recy右移1位后再赋给recy
行移位,移位操作既可以用标准C中的左移、右移运算符来实现,
也可以用C51库自带的函数来实现。
移位运算符
符号
功能
<<
按位左移
>>
按位右移
循环移位函数
示例
int x; x=3<<1;表示将0011左移一位之后赋给x int x; x=3>>1;表示将0011右移一位之后赋给x
函数 _crol_(unsigned char c,unsigned char b)
3. P2口
P2口也是准双向口,它有两种用途:通用I/O接口和高8位地址线。
P2口作I/O端口使用时:内部控制信号使MUX开关接通到锁存器,此 时P2口的用法与P1口相同。
P2口作外部地址总线使用时:内部控制信号使MUX开关接通到内部 地址线,此时P2口的引脚状态由所输出的地址决定。
需要特别指出的是,由于对片外地址的操作是连续不断的,只要进 行了外部系统扩展,此时P0口和P2口就不能再用作I/ O端口了。
4. P3口
• P3口用作通用I/O口时,其工作原理同P1口类似。 •此外,它的每一根线还具有第二种功能。
引脚
第二功能
信号名称
P3.0
RXD
串行数据接收
P3.1 P3.2 P3.3 P3.4
TXD
INT0 INT1
T0
串行数据发送 外部中断 0 申请 外部中断 1 申请 定时/计数器 0 的外部输入
1.P0口
P0口是一个三态双向口,包括一个输出锁存器、两个三态缓冲器、 输出驱动电路和输出控制电路组成 ,它的一位结构如图 :
控制电路
输
出
驱
动
器
P0口功能
1、通用I/O接口:不需要外部扩展时,内部控制信号将使 MUX开关接通到锁存器。此时,由于P0口没有内部上拉电 阻,通常要在外部加一个上拉电阻来提高驱动能力。
R = (VCC-VDD)/I 例如,若二极管的导通压降为2.2V,导通时流过的电流为5mA,则限
流电阻为560Ω。
③器件清单
器件名称 AT89C52 12MHz晶体 22pF瓷片电容 22uF电解电容 10kΩ电阻 560Ω电阻 发光二极管LED
数量(只) 1 1 2 1 1 1 1
(2)硬件原理图设计
排阻,就是若干个参数完全相同的电阻,它们的一个引脚都连到一起 ,作为公共引脚,其余引脚正常引出。如果一个排阻是由n个电阻构 成的,那么它就有n+1个引脚,一般来说最左边的那个是公共引脚。 它在排阻上一般用一个色点标出来。
直插式排阻
贴片式排阻
☆排阻一般用在数字电路上,比如作为某个并行口的上拉或者下拉电
//主循环
{
led=0;
//将P1.7引脚置0,对外输出低电平
Delay(20000); //调用延时程序
led=1;
//将P1.7引脚置 1,对外输出高电平
Delay(20000); //调用延时程序
}
}
(4)软硬件联合调试
任务4.2 单片机控制多个LED灯
1.任务要求
设计一个电路,AT89C52单片机的P1口连接8只LED灯, 按以下顺序点亮,形成流水灯的效果:
阻用。使用排阻比用若干只固定电阻更方便。
器件清单
器件名称
AT89C52 12MHz晶体 22pF瓷片电容 22uF电解电容 10kΩ电阻 560Ω×8排阻 发光二极管LED
数量(只) 1 1 2 1 1 1 8
(2)硬件原理图设计
(3)软件程序设计
#include<reg52.h> //宏定义,52单片机头文件 #include<intrins.h> //包含_crol_、_cror_函数所在的头文件
2、地址/数据分时复用:需要进行外部扩展时,内部控制 信号将使MUX开关接通到内部地址/数据线。此时,P0口 在ALE信号的控制下,分时输出低8位地址和8位数据信号。
P0口的工作原理
(1)通用I/O口
①用作输入口(端口外数据
内部寄存器)
方式1(读锁存器): Q
缓冲器2
D
适于“读—修改—写”
方式2(读引脚):P0.x
注意:循环移位函数_crol_( )和_cror_( )包含在intrins.h头文件中,因此如果在程 序中要用到这类函数,就必须在程序的开头处包含intrins.h这个头文件。
3.任务设计
(1)器件的选择
由于用到的发光二极管较多,每个发光二极管都需要限流电阻,硬件 电路会显得比较复杂,所以这里使用了排阻。
项目拓展 实验板彩灯的花式控制
在任务4.2中设计的流水灯为八个LED按一个方向循环 点亮,此外我们还可以通过编程控制LED灯,使它以我们 想要的各种方式点亮,而且LED灯点亮频率可以通过改变 延时时间来实现。下面编写程序控制实验板上的八个LED 灯按照不同花式循环点亮。
(1)实验板8个LED灯电路如图所示。RP1为390欧姆排阻;J9为插针,用 于连接需要使用的I/O口,此处用杜邦线连接单片机的P1口。
#define uint unsigned int
#define uchar unsigned char //延时子函数
void Delay(unsigned int t)
{ while(--t);
}
//主函数,循环点亮LED灯
void main()
{ uchar k,recy;
while(1)
//大循环