51单片机数码管显示数组内容(含仿真)

仿真图、完整程序见文末

本程序的主要目的是控制一个或多个数码管显示数字,控制的数码管多少由数组决定(最多8个)。预处理指令:

#include <reg52.h> #include <stdio.h> #include <intrins.h>

这些语句是包含库的指令。reg52.h 是一个包含 8051 的特殊功能寄存器 (SFR) 定义的头文件。stdio.h 是一个标准输入输出库,尽管在这段代码中并未直接使用到。intrins.h 包含了一些编译器内置函数,这里使用 _nop_() 函数作为无操作指令。

之后定义了一些变量和全局数组:

#define u8 unsigned char #define u16 unsigned int u8 duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88}; u8 wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

duan 数组保存了数码管显示0到10的编码。wei 数组是位选数组,用于选取数码管。

延时 函数:

void Delay100us(u8 a) //@12.000MHz { unsigned char i; _nop_(); i = 47*a; while (--i); }

这个函数用于产生一个大约 100 微秒 * a 的延时。_nop_() 是无操作指令,主要用于等待一段时间。在这个函数中,一次无操作大约需要一微秒。因此,47 次无操作大约需要 47 微秒。总的时间就是 47 微秒乘以 a。

数码管显示函数如下:

void decide(u8 *num,u8 length){ u8 i=0; for(i=0;i<length;i++){ P2=wei[i]; P0=duan[num[i]]; Delay100us(100); } }

函数是数码管显示的主函数。通过遍历数组 num,使用数组 duanwei 控制数码管显示。P0和P2是8051单片机的两个并口,这里P2用于选位(决定哪个数码管显示),P0用于段选(决定显示什么数字)。

最后是 main 函数:

void main() { u8 num[]={1,2,3,4,5}; //待使用数组 u8 length=0; length=sizeof(num)/sizeof(num[0]); //长度检测,数组长度外的数码管不开启 while(1){ decide(num,length); //显示函数 } }

main 函数是程序的入口点。num 数组保存了需要显示的数字。数组 lengthnum 的长度。decide(num, length) 在无限循环中被调用,使得数码管持续显示 num 数组中的数字。

仿真图如下:

 

完整程序:

#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
u8 duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88};
u8 wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void Delay100us(u8 a)        //@12.000MHz
{
    unsigned char i;

    _nop_();
    i = 47*a;
    while (--i);
}

void decide(u8 *num,u8 length){
    u8 i=0;
    for(i=0;i<length;i++){
        P2=wei[i];
        P0=duan[num[i]];
        Delay100us(100);
    }
}

void main()
{
    u8 num[]={1,2,3,4,5};//待使用数组
    u8 length=0;
    length=sizeof(num)/sizeof(num[0]);//长度检测,数组长度外的数码管不开启
    while(1){
        decide(num,length);//显示函数
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值