51单片机-数码管的显示

 基于51单片机的数码管显示实验

动态显示3.141

​
#include <REGX52.H>

sbit SegmentG1=P2^3;//定义数码管1
sbit SegmentG2=P2^2;//定义数码管2
sbit SegmentG3=P2^1;//定义数码管3
sbit SegmentG4=P2^0;//定义数码管4

static unsigned char s_arrNumber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//定义数码管显示数字0~9

static void DelayNms(unsigned int xms);

static void DelayNms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms!=0)
	{
		i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
		xms--;
	}
}

void main()
{
        P0=0x0c;              //数码管1显示为3.
        SegmentG1=0;          //打开数码管1
        DelayNms(5);          //延时5ms
        SegmentG1=1;          //关闭数码管1
  
        P0=s_arrNumber[1];  //数码管2显示为数字1
        SegmentG2=0;          //打开数码管2
        DelayNms(5);          //延时5ms
        SegmentG2=1;          //关闭数码管2
      
        P0=s_arrNumber[4];  //数码管3显示为数字4
        SegmentG3=0;          //打开数码管3
        DelayNms(5);          //延时5ms
        SegmentG3=1;          //关闭数码管3
      
        P0=s_arrNumber[1];  //数码管4显示为数字1
        SegmentG4=0;          //打开数码管4
        DelayNms(5);          //延时5ms
        SegmentG4=1;          //关闭数码管4
}

​

按键计数器

include <REGX52.H>

sbit SegmentG1=P2^3;//定义数码管1
sbit SegmentG2=P2^2;//定义数码管2
sbit SegmentG3=P2^1;//定义数码管3
sbit SegmentG4=P2^0;//定义数码管4
sbit KEY1=P3^2;     //定义按键1

static unsigned char s_arrNumber[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//定义数码管显示数字0~9

static void DelayNms(unsigned int xms);

static void DelayNms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms!=0)
	{
		i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
		xms--;
	}
}

void main()
{
  unsigned short num1=0;
  unsigned short num2=0;  
  unsigned short key_state=1;  // 记录按键状态
  
//    
    while(1)
      {
            
            P0=s_arrNumber[num1];
            SegmentG3=0;
            DelayNms(5);           //延时5ms
            SegmentG3=1;           //关闭数码管3

            P0=s_arrNumber[num2];
            SegmentG4=0;            //打开数码管4            
            DelayNms(5);          //延时5ms
            SegmentG4=1;          //关闭数码管4   
            
            if(KEY1==0)
              {
                DelayNms(10);
                while(KEY1==0);  //消抖
                
                if(key_state)     //如果按键按下,state会变为0,表示按键按下
                {
                    key_state=0;
                    num2++;        //按下后个位数++
                    if(num2>9)     //个位数大于9后清零并且十位数++
                    {
                        num2=0;
                        num1++;
                        if(num1>9)
                        {
                            num1=0;
                        }
                    }
                }
              }
             else                  //若未按下,将state调整为1,表示按键未按下
              {
                  key_state=1;
              }
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值