数码管

作者: 呼吸化为空气 | 来源:发表于2017-12-25 14:59 被阅读25次

数码管静态显示:

这个是一个共阳的数码管例子:

注意电阻排的阻值选用200欧姆

#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code seg[] = {0x40,0x79,0x24,0x30,0x19,
                                        0x12,0x02,0x78,0x00,0x10};

void delay(uint timer)
{
    uchar j = 124;
    while(timer--)
    {
        while(j--);
    }
}


void main()
{
    uchar i=0 ;
    while(1)
    {
        P2 = seg[i];
        delay(500);
        i = (i+1)%10;
    }
}

动态显示

动态显示
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,
                                        0x92,0x82,0xF8,0x80,0x90};

void delay(uint timer)
{
    uchar j = 124;
    while(timer--)
    {
        while(j--);
    }
}

void main()
{
    uchar i=0 ;
    while(1)
    {
        for(i = 0;i<4;i++)
        {
            P1 = (1<<i);
            P2 = seg[i];
            delay(500);
        }
    }
}

共阴数码管的拓展

共阴和共阳数码管的程序移植,在P1.P2同时取非即可,不用更换段码表。

#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,
                                        0x92,0x82,0xF8,0x80,0x90};

void delay(uint timer)
{
    uchar j = 124;
    while(timer--)
    {
        while(j--);
    }
}

void main()
{
    uchar i=0 ;
    while(1)
    {
        for(i = 0;i<4;i++)
        {
            P1 = ~(1<<i);
            P2 = ~seg[i];
            delay(500);
        }
    }
}

共阴数码管段码

uchar code segD[] = {
                                        0x3f,0x06,0x5b,0x4f,0x66,
                                        0x6d,0x7d,0x07,0x7f,0x6f,
                                        0x00,0xf3};

使用74138节约IO口

注意:一定要先选同138的地址端,再送段码。
否则字码会混乱(也可以使用74ls48+74ls138)


使用74138节约IO口
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char


uchar code seg[] = {
                                        0x3f,0x06,0x5b,0x4f,0x66,
                                        0x6d,0x7d,0x07,0x7f,0x6f,
                                       0x00,0xf3};

                                                                             
void delay(uint timer)
{       
    uchar j = 124;
    while(timer--)
    {
        while(j--);
    }
}

void display(uint year, uchar month, uchar day)
{
        uint tmp;
        tmp=year/1000%10;
    
        P3=0;
        P2=seg[tmp];
        delay(1);
        
        tmp=year/100%10;
        P3=1;
        P2=seg[tmp];
        delay(1);
    
        tmp=year/10%10;
        P3=0x02;
        P2=seg[tmp];
        delay(1);
    
        tmp=year%10;
        P3=0x03;
        P2=seg[tmp];
        delay(1);

        tmp=month/10%10;
        P3=0x04;
        P2=seg[tmp];
        delay(1);
        
        tmp=month%10;
        P3=0x05;
        P2=seg[tmp];
        delay(1);
        
        tmp=day/10%10;
        P3=0x06;
        P2=seg[tmp];
        delay(1);
        
        tmp=day%10;
        P3=0x07;
        P2=seg[tmp];
        delay(1);
}


void main()
{       
        while(1)
        {
            display(2017, 12, 29);
        }
}

使用74ls48+74ls138

使用74ls48+74ls138
#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char


uchar code seg[] = {
                                        0x3f,0x06,0x5b,0x4f,0x66,
                                        0x6d,0x7d,0x07,0x7f,0x6f,
                                       0x00,0xf3};

                                                                             
void delay(uint timer)
{       
    uchar j = 124;
    while(timer--)
    {
        while(j--);
    }
}

void display(uint year, uchar month, uchar day)
{
        uint tmp;
        tmp=year/1000%10;
    
        P3=0;
        P2=tmp;
        delay(1);
        
        tmp=year/100%10;
        P3=1;
        P2=tmp;
        delay(1);
    
        tmp=year/10%10;
        P3=0x02;
        P2=tmp;
        delay(1);
    
        tmp=year%10;
        P3=0x03;
        P2=tmp;
        delay(1);

        tmp=month/10%10;
        P3=0x04;
        P2=tmp;
        delay(1);
        
        tmp=month%10;
        P3=0x05;
        P2=tmp;
        delay(1);
        
        tmp=day/10%10;
        P3=0x06;
        P2=tmp;
        delay(1);
        
        tmp=day%10;
        P3=0x07;
        P2=tmp;
        delay(1);
}


void main()
{       
        while(1)
        {
            display(2017, 12, 29);
        }
}

相关文章

  • Arduino基础入门篇14—跳动的数码管

    本篇介绍数码管显示器件,通过控制一位共阴极数码管动态显示数字0到9来了解数码管的使用。 1. 数码管介绍 数码管,...

  • Python 七段数码管绘制

    数码管是一种半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点...

  • 51单片机、动态数码管认识与编程

    一、根据电路图实现动态数码管 1. 对于动态数码管 首先需要知道的是,动态数码管是一种对数码管的实现方式,并不是数...

  • 2019-09-26静态和动态控制数码管

    1.什么是数码管 1.1、几方面看数码管 (1)外观(2)作用:数码管是显示器件,用来显示数字的。(3)分类:单个...

  • 单片机 控制 数码管显示

    LED数码管(LED Segment Displays)简介 数码管也称LED数码管,是由多个发光二极管封装在一起...

  • 数码管动态扫描

    课前学习 单词含义display显示,展示 一.四位共阴极数码管 1.简介 数码管是一种半导体发光器件,数码管可分...

  • Arduino基础入门篇17—四位数码管的驱动

    本篇介绍四位数码管的使用,通过数码管库驱动四位数码管从0开始累加显示数字。 1. 四位数码管介绍 根据实际需要,把...

  • 【投稿】-2.3.2.3动态元件

    【作者】:0123_刘春芝;0131_曹清华1、发光LED 2、7段数码管7段数码管主要分为BCD数码管,共阳极数...

  • 蓝桥杯扩展板外设程序笔记

    目录 1、数码管2、3轴LIS302DL3、DHT11 一、数码管 驱动数码管用的芯片为SN74LS595N,有三...

  • 数码管

    数码管静态显示: 这个是一个共阳的数码管例子: 注意电阻排的阻值选用200欧姆 动态显示 共阴数码管的拓展 共阴和...

网友评论

      本文标题:数码管

      本文链接:https://www.haomeiwen.com/subject/cgghgxtx.html