找回密码
 立即注册

QQ登录

只需一步,快速开始

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

四位数码管+protues仿真

[复制链接]
跳转到指定楼层
楼主
ID:109895 发表于 2016-3-20 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include        "reg51.h"
#include        "stdio.h"

char        code        cDISP_HexTo7Seg[16]        =
                {0x3F, 0x06, 0x5B, 0x4F,     0x66, 0x6D, 0x7D, 0x07,
                 0x7F, 0x6F, 0x77, 0x7C,     0x39, 0x5E, 0x79, 0x71};
char        code        cDISP_Bit4[4]        =
                {0xE0,        0xD0,        0xB0,        0x70};


char        data        vDISP_SegValue[4]        =        {0x06,0x5B,0x4F,0x66};
char        data        vDISP_Blink[4]        =        {0,0,0,0};
unsigned        char        vDISP_Index,        vDISP_BlinkCnt;

void        DISP_Init(void)
{
        //初始化TimerA
        TH0        =        0xF0;
        TL0        =        0xBE;
        TMOD        =        0x01;
        ET0        =        1;
        TR0        =        1;
}

void        DISP_BitNum(char D0, char D1, char D2, char D3)
{
        vDISP_SegValue[0]        =        cDISP_HexTo7Seg[D0 & 0x0F];
        if        (D0        &        0x80)
                vDISP_SegValue[0]        |=        0x80;
        vDISP_SegValue[1]        =        cDISP_HexTo7Seg[D1 & 0x0F];
        if        (D1        &        0x80)
                vDISP_SegValue[1]        |=        0x80;
        vDISP_SegValue[2]        =        cDISP_HexTo7Seg[D2 & 0x0F];
        if        (D2        &        0x80)
                vDISP_SegValue[2]        |=        0x80;
        vDISP_SegValue[3]        =        cDISP_HexTo7Seg[D3 & 0x0F];
}

void        DISP_Integer(int        Value,        char        BitPos)
{
        char        D0,        D1, D2, D3;
        if        (Value        >        9999)
                Value        =        9999;
        D0        =        0;
        while        (Value        >        999)
        {
                D0++;
                Value        -=        1000;
        }
        if        (BitPos        ==        3)
                D0        |=        0x80;

        D1        =        0;
        while        (Value        >        99)
        {
                D1++;
                Value        -=        100;
        }
        if        (BitPos        ==        2)
                D1        |=        0x80;

        D2        =        0;
        D3        =        Value;
        while        (D3        >        9)
        {
                D2++;
                D3        -=        10;
        }
        if        (BitPos        ==        1)
                D2        |=        0x80;
        DISP_BitNum(D0,        D1, D2, D3);
}

void        DISP_SetBlink(char D0, char D1, char D2, char D3)
{
        vDISP_Blink[0]        =        D0;
        vDISP_Blink[1]        =        D1;
        vDISP_Blink[2]        =        D2;
        vDISP_Blink[3]        =        D3;
}

void        MN_T0_ISR(void)                        interrupt        1        using        1
{
        TH0        =        0xF0;
        TL0        =        0xBE;

        P3        =        0xFF;
        vDISP_BlinkCnt++;
        vDISP_BlinkCnt        &=        0x7F;
        if        (vDISP_Blink[vDISP_Index]        &&        (vDISP_BlinkCnt        <        0x3F))
        {
                P2        =        0;
        }
        else
        {
                P2        =        vDISP_SegValue[vDISP_Index];
        }
        P3        =        cDISP_Bit4[vDISP_Index];

        vDISP_Index++;
        vDISP_Index        &=        3;
}




#include        "reg51.h"

#include        "DisplayUnit.h"


void        main(void)
{
        DISP_Init();

        DISP_Integer(5678,2);
        DISP_SetBlink(0,0,1,1);

        EA        =        1;

        while        (1)
        {
        }
}



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

使用道具 举报

沙发
ID:1 发表于 2016-3-20 22:39 | 只看该作者
楼主你好 仿真文件呢?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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