找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机仿真4位8段led共阴极PROTEUS

[复制链接]
跳转到指定楼层
楼主
ID:692523 发表于 2020-2-13 11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg52.h>


#define DUAN_PORT P0                //段选信号的锁存器控制

sbit WEI_LIN1=P2^0;                //位选信号的锁存器控制
sbit WEI_LIN2=P2^1;       
sbit WEI_LIN3=P2^2;       
sbit WEI_LIN4=P2^3;       


//0-F的码表
unsigned char code table[]={
        0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0-9
        0x77,0x7c,0x39,0x5e,0x79,0x71//a-f
        };
                                               
void delay(unsigned int i)
{
        unsigned int m,n;
        for(m=i;m>0;m--)
                for(n=90;n>0;n--);
}






//消除尾光
void DisplayOff(void)
{
                        WEI_LIN1=1;
                        WEI_LIN2=1;
                        WEI_LIN3=1;
                        WEI_LIN4=1;
                       
                        DUAN_PORT=0x00;
                       
                        delay(1);
}

//1次显示一位
void DisplayNum(unsigned int value)
{
       
                static unsigned int num=0;
       
       
                unsigned char qian=1,bai=2,shi=3,ge=4;
               
               
                qian=value/1000;
                value%=100;
                bai=value/100;
                value%=100;
                shi=value/10;
                value%=10;
                ge=value;
       
                num++;
                num%=4;
       
                switch(num)
                {
                        case 0: DUAN_PORT=table[qian];         WEI_LIN1=0;break;
                        case 1: DUAN_PORT=table[bai];         WEI_LIN2=0;break;
                        case 2: DUAN_PORT=table[shi];         WEI_LIN3=0;break;
                        case 3: DUAN_PORT=table[ge];         WEI_LIN4=0;break;
                }       
       
}


void main(void)
{
        unsigned int value=0;       
        unsigned int num=0;
       
        DisplayOff();       
       
        while(1)
        {
               
                        if(num++>20)//200ms变化一次数据
                        {
                                        num=0;
                               
                                        value++;                               
                                        if(value>9999)value=0;
                        }
                       
                        DisplayNum(value);        //动态显示1位数,刷新
                        delay(10);                                        //刷新周期                       
               
                        DisplayOff();//消除尾光
               
        }
}



03-四个数码管-共阴proteus.rar

63.11 KB, 下载次数: 17, 下载积分: 黑币 -5

程序代码及仿真图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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