打印
[经验分享]

数码管的静态显示

[复制链接]
1425|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shashaa|  楼主 | 2016-1-25 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从第三课我们学习74HC138以后,我们了解到74HC138同时一次只能让一个输出口为低电平,也就是在一个时刻内,我们只能让一个数码管显示,始终选通数码管并且可以根据我们的P0总线的信号来改变这个数码管的值,我们可以理解为数码管的静态显示。
数码管静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。这节课我们先用一个数码管的静态显示来实现一个简单的秒表,为下节课的动态显示打下基础。
先来介绍一个51单片机的关键字code。我们前边课程定义变量的时候,一般用到unsigned char或者unsigned int这两个关键字,这样定义的变量都是放在我们的单片机的RAM中,我们在程序中可以随意去改变这个变量的值。但是还有一种常数,我们在程序中要使用,但是却不进行对这个值的改变,这种值我们可以加一个code关键字修饰一下,修饰完毕后,这个值就会存储到我们的程序空间flash中,这样可以大大节省我们单片机的RAM的使用量,毕竟我们的RAM空间比较小,而程序空间是很大的。比如我们现在要使用的数码管真值表,我们来看一下我们下边的这个程序。
#include<reg52.h>               //包含寄存器的库文件                  
sbit  LED = P0^0;
sbit  ADDR0 = P1^0;
sbit  ADDR1 = P1^1;
sbit  ADDR2 = P1^2;
sbit  ADDR3 = P1^3;
sbit  ENLED = P1^4;
unsigned char code LedChar[] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
    0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e
};                  //用数组来存储数码管真值表,下一课详细介绍数组
void main()
{
    unsigned char counter = 0;
    unsigned char j = 0;
    ENLED = 0; ADDR0 = 0; ADDR1 = 0;
     ADDR2 = 0; ADDR3 = 1; P0 = 0XFF;  //74HC138和P0初始化部分
     TMOD = 0x01;                    //设置定时器0为模式1
     TH0  = 0xB8;
    TL0  = 0x00;                   //定时值初值
     TR0  = 1;                      //打开定时器0
    while(1)
    {
        if(1 == TF0)                 //判断定时器0是否溢出
        {
            TF0 = 0;
            TH0 = 0xB8;              //溢出后,重新赋值
            TL0 = 0x00;
            counter++;
            if(50 == counter)      //判断定时器0溢出是否达到50次
            {
                counter = 0;        //counter清0,重新计数
                P0 = LedChar[j++]; //把数组里的对应值送给P0
                if(16 == j)         //当显示到F后,归0重新开始
                {
                     j = 0;
                }
             }
         }
    }
}
沙发
qiangweii| | 2016-1-25 19:49 | 只看该作者
数码管分为共阳数码管和共阴数码管,所谓的共阴数码管就是8只LED小灯的阴极是接在一起的,也就是阴极是公共端,由阳极来控制小灯是否亮灭。

使用特权

评论回复
板凳
litengg| | 2016-1-25 20:05 | 只看该作者
学习了,还得得掌握单片机定时器的原理和应用方法啊。

使用特权

评论回复
地板
androidbus| | 2016-1-25 20:24 | 只看该作者
unsigned char或者unsigned int这两个关键字经常用到。

使用特权

评论回复
5
feiqi1| | 2016-1-25 20:38 | 只看该作者
所谓共阳数码管就是阳极是接到一起的吧。。

使用特权

评论回复
6
rreedd00| | 2016-1-25 20:48 | 只看该作者
小灯是一种简单的LED,可以算是数码管的组合。

使用特权

评论回复
7
hfdy01| | 2016-1-25 21:10 | 只看该作者
重点说到的是修饰符问题,比较基础。。。

使用特权

评论回复
8
zhouhuanの| | 2016-1-25 21:16 | 只看该作者
8个段每一段都是一个LED小灯,所以数码管就是由8个LED小灯所组成的。

使用特权

评论回复
9
handleMessage| | 2016-1-25 21:21 | 只看该作者
可以把上边那个数码管显示1的那个程序中的P0的赋值随便修改

使用特权

评论回复
10
sourceInsight| | 2016-1-25 21:30 | 只看该作者
这些东西都必须熟练掌握啊

使用特权

评论回复
11
bbapple| | 2016-1-25 21:40 | 只看该作者
if(1 == TF0)                 //判断定时器0是否溢出
        {
            TF0 = 0;
            TH0 = 0xB8;              //溢出后,重新赋值
            TL0 = 0x00;
            counter++;

使用特权

评论回复
12
boy1990| | 2016-1-25 21:43 | 只看该作者
静态显示和动态显示差别不是很大。。。。

使用特权

评论回复
13
tianhaolan| | 2016-1-26 09:07 | 只看该作者
学习学习,静态的就是比较费电啊

使用特权

评论回复
14
justinlin2015| | 2016-1-26 15:48 | 只看该作者

长见识了

使用特权

评论回复
15
justinlin2015| | 2016-1-26 17:06 | 只看该作者
学习学习了

使用特权

评论回复
16
xia00| | 2016-2-6 11:02 | 只看该作者
一般用到unsigned char或者unsigned int这两个关键字

使用特权

评论回复
17
sourceInsight| | 2016-2-6 15:32 | 只看该作者
初始化容易让人忽视掉。。。

使用特权

评论回复
18
dml19890601| | 2016-2-15 08:54 | 只看该作者
您好,我是笙泉单片机的代理,深圳希特电子杜先生,如果您需要笙泉的芯片可以联系我,手机:15295658706  QQ:3166720948

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

1494

帖子

6

粉丝