找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6765|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机教程--数码管的动静结合

[复制链接]
跳转到指定楼层
楼主
ID:115111 发表于 2016-4-28 04:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
接着上一篇,上一篇我们讲了点亮LED,通过编写程序,让LED亮起来,而且还能让LED流动起来,设计出不同的花样。那么本篇我们来讲数码管。

首先,我们先来看一下数码管的显示原理。



数码管的实质就是八个LED,与上一篇差不多。我们开发板上的数码管是共阴极的,如上图(b)所示。让数码管显示数字,只要让相应的LED亮起来就行。如:要让它显示“1”,只要让bc段的LED亮起来就行了(见图a)。

那么,我们来看数码管是怎样跟单片机连接的。如下图所示。







                       
从图中可以看出数码管是先与DM7406连接,再与单片机连接。我们可以先不用管DM7406,那么数码管的a、b、c、d、e、f、g、Dp引脚分别连接单片机的P00~P07脚,而数码管的负极则接到电源负极,但在与电源负极连接时,先接一个三极管起到开关的作用。三极管有一个引脚连接到单片机的P34引脚,这样我们就可以通过单片机控制三极管导通。




这是效果图。接下来来看一下代码:

                       
#include<reg51.h>
sbit WE=P3^4;
void main()
{
  WE=0;
  P0=0x06;
}

解释一下代码,WE=0是给出低电平让三极管导通,P0=0x06,十六进制的0x06等于二进制的0000 0110,0000 0110从右往左对应的是P00到P07,即数码管的a到Dp,我们给b、c高电平,b、c段自然就亮了。让数码管显示其他数字也是同样的道理,给P0口赋相应的值就可以了。显示{0,1,2,3,4,5,6,7,8,9}对应的十六进制数是{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。这就是数码管的静态显示。

接下来讲一下数码管的动态显示。动态显示是什么?四个数码管是一个一个显示的,不是同时显示,只是变化的太快我们肉眼无法看到。为什么要动态显示,让它们同时显示不行吗?同时显示可以,但是太浪费资源。一个数码管有八个脚要与单片机相连,那么四个数码管就要与单片机的32个引脚相连,这就很浪费了,所以我们要动态显示。

要怎么样实现数码管动态显示?我们看一段代码:




这是效果图。



                       

可以看到,每开一个数码管都要延时一会,但是不能太长。如果太长的话,就会看到数码管一个一个的显示。你们可以试试看。

这就是数码管的动静态显示。


   若本文有任何问题和错误请大家批评指正,信工科技部将每期给您带来 更多精彩内容,敬请关注!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表