51单片机数码管动态扫描C程序

本文介绍了一个基于51单片机的数码管显示程序,通过定义特定的段码实现0到9的数字显示。程序使用了四位数码管进行动态扫描显示,并包含了延时函数以确保正确的刷新率。
#include <reg51.h>

sbit P00 = P0 ^ 0;
sbit P01 = P0 ^ 1;
sbit P02 = P0 ^ 2;
sbit P03 = P0 ^ 3;

int DATA_LED[11] =
{
//0~9的数码管段码 A0H,BBH,62H,2AH,39H,2CH,24H,BAH,20H,28H   根据具体电而定,不通用
   0xA0,   //0
   0xBB,   //1
   0x62,   //2
   0x2A,   //3
   0x39,   //4
   0x2C,   //5
   0x24,   //6
   0xBA,   //7
   0x20,   //8
   0x28,   //9
   0xFF
};

void delay(int m)   //延时程序,延时m*0.5毫秒
{
   unsigned int i;
   unsigned int j;
   for (i = 0; i < m; i++)
   {
     for (j = 0; j < 500; j++){}
   }
}

void led(int n)     //数码管显示及数据处理程序
{
   P1 = 0xFF;
   P1 = DATA_LED[n % 10];   //个位
   P00 = 0;
   delay(1);
   P00 = 1;

   P1 = 0xFF;
   P1 = DATA_LED[n / 10 % 10];   //十位
   P01 = 0;
   delay(1);
   P01 = 1;

   P1 = 0xFF;
   P1 = DATA_LED[n / 100 % 10];   //百位
   P02 = 0;
   delay(1);
   P02 = 1;

   P1 = 0xFF;
   P1 = DATA_LED[n / 1000 % 10];   //千位
   P03 = 0;
   delay(1);
   P03 = 1;
}

void main(void)
{
   while (1)
   {
     led(404);   //显示数字404,实际显示的是0404,需要在led()函数中判断,没有千位的情况,不是让显示成0
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值