我们今天来说说单片机是如何控制发光二极管的。

如果P0口作为通用I/O使用,由于漏极开路,需要外接上拉电阻,而P1~P3口内部已有30k0左右的上拉电阻。下面来讨论PI~P3口如何与LED发光二极管的驱动连接问题。

使用单片机的并行端口P1 ~P3直接驱动发光二极管,电路如图5-1所示。P0口与P1、P2、P3口相比,P0口每位可驱动8个LSTTL输入,而PI ~P3口每一位的驱动能力,只有P0口的一半。当PO口的某位为高电平时,可提供400 μA的拉电流;当P0口某位为低电平(0.45 V)时,可提供3.2 mA的灌电流,而P1 ~P3口内部有30 k2左右的上拉电阻,如果高电平输出,则从P1、P2和P3口输出的拉电流I。仅为几百微安,驱动能力较弱,亮度较差,如图5-1(a)所示。如果端口引脚为低电平,能使灌电流1从单片机的外部流入内部,则将大大增加流过的灌电流值,如图5-1(b)所示。所以,T89S52 单片机任何一个端口要想获得较大的驱动能力,要采用低电平输出。

如果一定要高电平驱动,可在单片机与发光二极管之间加驱动电路,如74LS04芯片、74LS244芯片等。

单片机的I/O端口P0~P3是单片机与外设进行信息互换的桥梁,可通过读取I/O端口的状态来了解外设的状态,也可向I/O端口送出命令或数据来控制外设。对单片机I/O端口进行编程控制时,需要对I/0端口的特殊功能寄存器进行声明,在C51的编译器中,这项声明包含在头文件reg51. h中,编程时,可通过预处理命令#include<reg51. h>,把这个头文件包含进去。下面通过一个例子介绍如何对I/O端口编程实现对发光二极管亮灭的控制。

【例】

电路原理图如下,制作由上至下,再由下至上反复循环点亮显示的流水灯。

三种解题方法

数组方法

移位运算符方法

循环左、右移位函数方法

数组方法

本方法是建立1个字符型数组,将控制8个led显示的8位数数据作为数组元素,依次送到P1口来实现。

#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};//点亮数据
void delay()
{
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void main()//主函数
{uchar i;while(1){for(i=0;i<16;i++){P1=tab[i];//向P1口送出点亮数据的数组元素delay();//延时}}
}

移位运算符方法

本方法是使用移位运算符“>>”“<<”,把送到P1口的显示控制数据进行移位,从而实现发光二极管的依次点亮。

#include<reg51.h>
#define uchar unsigned char
void delay()
{
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void main()//主函数
{uchar i;while(1){temp=0x01;//左移初值赋给tempfor(i=0;i<8;i++){P1=~temp;//temp中的数据取反后送到P1口delay();//延时temp=temp<<1;//temp中数据左移一位}temp=0x80;//右移初值赋给tempfor(i=0;i<8;i++){P1=~temp;//temp中的数据取反后送到P1口delay();//延时temp=temp>>1;//temp中数据右移一位}}
}

程序说明:

注意使用移位运算符“>>”“<<”与使用循环左移函数“_ crol_" 和循环右移函数“o_"的区别。左移移位运算“<<”是将高位丢弃,低位补0 ;右移移位运算“>>”是将低位丢弃,高位补0。而循环左移函数“.crol_” 是将移出的高位再补到低位,即“循环”移位;同理循环右移函数“。cror_" 是将移出的低位再补到高位。

循环左、右移位函数方法

本方法是使用C51中规供的库函数,即循环左移”位函数和循环右移n位,控制发光二极管的点亮规律。参考程序如下:

#include<reg51.h>
#include<intrins.h>//包含左右移位函数文件
#define uchar unsigned char
void delay()
{
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++);
}
void main()//主函数
{uchar i,temp;while(1){temp=0xfe;//初始值为1111110Bfor(i=0;i<7;i++){P1=temp;//temp中点亮的数据送到P1口delay();//延时temp=_crol_(temp,1);//执行左移函数,temp中的数据左移1位}for(i=0;i<7;i++){P1=temp;//temp中点亮的数据送到P1口delay();//延时temp=_cror_(temp,1);//执行右移函数,temp中的数据右移1位}}
}

今天简单说了三种方法实现 由上至下,再由下至上反复循环点亮显示的流水灯。

单片机控制发光二极管的显示(2)相关推荐

  1. 单片机控制发光二极管的显示(1)

    我们今天来说说单片机是如何控制发光二极管的. 如果P0口作为通用I/O使用,由于漏极开路,需要外接上拉电阻,而P1~P3口内部已有30k0左右的上拉电阻.下面来讨论PI~P3口如何与LED发光二极管的 ...

  2. c语言控制数码管显示时间,单片机 控制 数码管显示

    常见LED数码管 LED数码管(LED Segment Displays)简介 数码管也称LED数码管,是由多个发光二极管封装在一起的"8"字型的器件. 按发光二极管单元连接方式可 ...

  3. 51单片机控制数码管显示

    前言 今天学习51单片机的数码管模块 我的学习板上面的数码管是4为一体由12个引脚控制的模块. 今天就编程控制它显示我们想要的输出. 数码管本质上是由8个LED拼接而成的,他们分别叫做a,b,c,d, ...

  4. 单片机控制LED点阵显示心形图形并滚动

    题目要求: 显示心形图形,并不断滚动 仿真电路图: 仿真效果: C语言程序代码: #include<reg51.h> #include<intrins.h> unsigned ...

  5. 关于单片机控制用字库显示LCD12864汉字

    /*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/ void SelectScreen(uchar screen) { switch(screen){ case 0: LCD12864CS1 ...

  6. 单片机控制数码管显示一个两位数

    题目具体要求: 数码管可以显示任意一个两位数. 仿真实验电路图: 实验代码: #include <at89x51.h> unsigned char duanma[]={0x3F,0x06

  7. 汉字点阵c语言程序,用c51单片机控制1616点阵显示汉字源代码

    #include #define uchar unsigned char #define uint unsigned int #define out0 P0 #define out2 P2 #defi ...

  8. 单片机原理及其应用——单片机控制8只发光二极管交替闪烁

    目录 一.实验要求 二.分析 三.利用Proteus仿真软件画原理图 四.Keil编程软件编写程序 五.实验结果 一.实验要求 [实验内容] 1.用Proteus绘制硬件原理图,并设置元件参数. 2. ...

  9. arduino数码管显示0到9_少儿Python程序第十二讲:单片机控制数码管

    本讲继续学习用Python控制单片机,并用单片机连接和控制其它硬件,具体目标是利用开发板控制四位数码管,显示指定的数字.实验效果如图12.1所示: 图12.1 单片机控制四位数码管显示数字 注意:请先 ...

最新文章

  1. 使用Forms Authentication实现用户注册、登录 (二)用户注册与登录
  2. 金山发布《2006年度信息安全报告》
  3. linux自己带的apache重新启动
  4. 搭建卷积神经网络怎么确定参数_AI入门:卷积神经网络
  5. ESMap+Html5+SpringBoot+FastDFS实现导航导购App
  6. 利用 Apache 为个人用户创建 web 站点及其报错处理
  7. 猫连接路由器路由下连七台电脑,为啥每台电脑手动设ip才有网?
  8. python的zip()函数,压缩多个可迭代对象
  9. FL Studio新手教程:FL Studio五大常用按钮介绍
  10. 三星老手机com.android,你认识几个?细数三星最经典的手机
  11. Sniffer网络监视功能
  12. 虚幻引擎(UE4) 环境问询系统EQS
  13. LTE-LAA中的LBT详解
  14. 理解事务四大特性(Transaction)——原子性、一致性、隔离性和持久性(ACID)
  15. 梯度下降学习率的影响
  16. 横向瀑布流android,GitHub - xinqing/android_waterfall: Android版的瀑布流布局
  17. 关于Unity3D打包成exe运行后资源无法成功加载的解决方法
  18. 【iOS】苹果2017盘点:不止iPhone X!还有这些黑科技和你想不起的玩意
  19. 公路可视化景观设计解决方案
  20. 开课吧 算法工程师高级深度学习 视频

热门文章

  1. 读米老师的《人际关系要全面》有感
  2. 无法将网络更改为桥接状态:没有未桥接的主机网络适配器
  3. 为什么所谓的“自律”一定要跟坚持挂钩呢?懂一点“行为设计学”,升级对“意义”的认知
  4. linux虚拟机删除隐藏网卡,unraid 虚拟机下直通硬盘、网卡才是正确的方式
  5. python123字符串替代_python字符串批量替换
  6. 设计模式:Decorator--装饰器模式
  7. 基于python-django框架的支付宝支付案例
  8. Rsync备份工具讲解(一)
  9. Python 正则表达式 解析猫眼电影网页
  10. 发现一个高颜值流程图 - 亿图图示