注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

始めの一歩

不是世界变得无聊了,而是你变成了无聊的人……

 
 
 

日志

 
 

【C51】源码 2 -- 8 位共阴极数码管的基本显示  

2012-03-04 17:12:19|  分类: Fateの51单片机の |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

自学单片机,买了一套开发板,进入学习的第 3 阶段:8 位共阴极数码管。刚刚接触了锁存器的用法,写在这儿用于备份……

程序就是利用锁存器,动态显示数字,使 8 位数码管看起来同时显示不同的字样……

 

附上源码:(初出茅庐,难免有写的不好的地方,仅作备份之用,欢迎指点,喷子退散……)

#include <reg52.h>

#define DATA P1          // 定义 P1 为数据输入

sbit SEG = P0^0;          // 定义 段锁存器
sbit BIT = P0^2;            // 定义 位锁存器

unsigned char code SEG_CODE[ ] = {0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f};      // 段码 1-8
unsigned char code BIT_CODE[ ] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};

// 位码 从 0 位至 7 位

void Delay(unsigned int t);

void main (void)
{
    unsigned char i = 0;

    while (1) {

        SEG = 1;                              // 关段锁存
        DATA = SEG_CODE[i];        // 送段码
        SEG = 0;                              // 开段锁存,指定了某位具体显示什么数字

        BIT = 1;                                // 关位锁存
        DATA = BIT_CODE[i];          // 送位码
        BIT = 0;                                // 开位锁存,指定了哪一位显示

        Delay(200);                          // 经测试:200 为佳,过小出现重影,过大出现闪烁
                                                     // 20 重影,300 数字抖动,2000 扫描闪烁
        i++;
        if (i==8) i = 0;                       // 循环显示
    }
}

void Delay(unsigned int t)
{
    while (t--);
}

 

补充一个技巧:

突然某一位想显示小数点了,怎么办?

假如你正在使用 temp[i] 代表某一个显示字符,突然想显示小数点,可以使用 temp[i] | 0x80,通过“或”运算实现加上小数点……

  评论这张
 
阅读(352)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018