51单片机--4位共阳极数码管同时显示数字1234

一、案例要求

4位共阳极数码管同时显示数字1234,也即是第一位数码管显示1,第二位数码管显示2,以此类推。

二、案例分析

本案例需要用到的主要器件是7段4位共阳极数码管,可采用动态显示方式扫描数码管,利用人眼的视觉暂留效应,实现4位不同数字的同时显示。用P0口控制数字字形(段选),用P2口选择数码管(位选)。

三、案例代码

代码一:

#include <reg51.h> // 引入头文件

unsigned char num_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数码管显示0~9的编码表(共阳极数码管字形码)

void delay(unsigned int k)
{
	while(k--);
}

void main() {
    unsigned int i = 0; // 定义计数器变量i
    while (1) { // 进入死循环
        P0 = 0xff; // 将P0口全部置高电平
        P2 = 0x01; // 选择第一位数码管
        P0 = num_code[1]; // 在第一位数码管上显示数字1
        delay(500); // 延时
        
        P0 = 0xff; // 将P0口全部置高电平
        P2 = 0x02; // 选择第二位数码管
        P0 = num_code[2]; // 在第二位数码管上显示数字2
        delay(500); // 延时

        P0 = 0xff; // 将P0口全部置高电平
        P2 = 0x04; // 选择第三位数码管
        P0 = num_code[3]; // 在第三位数码管上显示数字3
        delay(500); // 延时

        P0 = 0xff; // 将P0口全部置高电平
        P2 = 0x08; // 选择第四位数码管
        P0 = num_code[4]; // 在第四位数码管上显示数字4
        delay(500); // 延时
    }
}

代码二:

#include <reg51.h> // 引入头文件

unsigned char num_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 数码管显示0~9的编码表(共阳极数码管字形码)

void delay(unsigned int k)
{
	while(k--);
}

void main()
{
	unsigned int i=0,j;
	while(1)
	{
		for(j=0;j<4;j++)
		{
			P0=num_code[j+1]; //依次显示数字1234
			P2=0x01<<j;       //依次选择第1、2、3、4个数码管进行显示
			delay(500);       //短暂延时,满足人眼视觉暂留效应,实现四位数码管同时显示的效果 
			P0=0xff;          //每次扫描后再关一次数码管,消除拖影
		}
	}
}

四、案例仿真

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值