打印

[自学实验][三]数码管显示

[复制链接]
466|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liziride|  楼主 | 2020-10-30 21:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liziride 于 2020-10-30 22:46 编辑


左边A~DP对应0~7

右边1~6对应0~5


CC共阴极数码管

ABCDEFG及DP脚高电平控制数码管的二极管亮

123456低电平控制哪一个亮,如图所示

下面分享显示一串数字的代码


下面的蓝色点其实是一直高频闪动的,人眼分辨不出亮灭,因为数码管一次只能显示同一个数字,显示一排其实是让对应的数码管高频显示一个,不停切换


#include<reg51.h>
//不考虑小数点,单个数字0~F的编码:实际对应a~g数码管段
unsigned char code codings[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//8位数码管,对应一个完整数码管的位置二进制值;
//例如0x7F:0b01111111,CC共阴极数码管低电平亮,第八位按物理元件就是右起第一个数码管
unsigned char code pos[] = {0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
void segDis(unsigned int val, unsigned char dec_hex) {
        unsigned char i=2,dis_data;//8位数码管从0开始,我用6位所以是2

    while(i < 8) {
                dis_data = val % dec_hex;
                val /= dec_hex;

                P2 = 0x00;//去除残像,很重要
                P2 = codings[dis_data];
                P3 = pos;
                i++;
                if(val < 1){
                        break;
                }
    }
}

使用特权

评论回复

相关帖子

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

本版积分规则

8

主题

38

帖子

0

粉丝