ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51/52单片机:利用外部中断实现4位(多位)数码管动态扫描--------计数器

2020-06-02 11:05:29  阅读:327  来源: 互联网

标签:10 单片机 中断 void 51 数码管 K1 num K0


前言
首先此源码设计知识点少,更容易供路人/初学者参考;
要点讲解
1.设置外部中断初始化.(我放在了一个函数里用来调用)

void intinit()
{
	IT0 = 1;	//设置外部中断0的触发方式为跳沿触发。
	EX0 = 1;	//开启外部中断0
	IT1 = 1;	//设置外部中断1的触发方式为跳沿触发。
	EX1 = 1;	//开启外部中断1
	EA = 1;		//中断总开关
}

2.设置按钮函数

void button(){		
    if(K0==0)		 //按钮--加
    {
      	delay1ms(10);
      	if(K0==0)
   		{
       	  num++;
          if(num==5000)
          num=0;
          while(!K0);
        }
     }
	 if(K1==0)
	 {				 //按钮--减
      	delay1ms(10);
      	if(K1==0)
   		{
       	  num--;
          if(num==0)
          num=5000;
          while(!K1);
        }
	 }
}

3.这是全文了比较有意思的一步,也是初学者想不到的地方(重点看)

void wei()			//抓取各位数
{
	qian=num/1000%10;
	bai=num/100%10;
       shi=num/10%10;
       ge=num%10;	
}

***最后是完整源码,仔细看哦(不要完全照搬)
注意引脚号和共阴共阳;

#include<reg52.h>
unsigned char code segcc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                            0x7f,0x6f};//共阴段选
unsigned char vcc[]={0x7f,0xbf,0xdf,0xef};//位选
sbit K0=P3^2;
sbit K1=P3^3;
unsigned int i,j,k;
int num;
int ge,shi,bai,qian;
void delay1ms(int k)
{
	for(i=0;i<k;i++)
	{
		for(j=0;j<100;j++)
		{}
	}
}               //延时
void intinit()
{
	IT0 = 1;	//设置外部中断的触发方式为下降沿触发。
	EX0 = 1;	//开启外部中断0
	EA = 1;		//中断总开关
	IT1 = 1;	
	EX1 = 1;	
	EA = 1;
}

void button(){		
    if(K0==0)		 //按钮--加
    {
      	delay1ms(10);
      	if(K0==0)
   		{
       	  num++;
          if(num==5000)
          num=0;
          while(!K0);
        }
     }
	 if(K1==0)
	 {				 //按钮--减
      	delay1ms(10);
      	if(K1==0)
   		{
       	  num--;
          if(num==0)
          num=5000;
          while(!K1);
        }
	 }
}
void wei()			//抓取各位数
{
	qian=num/1000%10;
	bai=num/100%10;
       shi=num/10%10;
       ge=num%10;	
}

main()
{
	intinit();
 	while(1);

}
void int0() 	interrupt 0
{	   
	EX0=0;
               
	while(1)
   {
	button();
	wei();

    P3=0xef;
    P2=segcc[qian];        
    delay1ms(1);
               
    P3=0xdf;
    P2=segcc[bai];        
    delay1ms(1); 

    P3=0xbf;
    P2=segcc[shi];        
    delay1ms(1);
               
    P3=0x7f;
    P2=segcc[ge];        
    delay1ms(1);
	EX0=1;	
	}	
}

void int1() 	interrupt 2
{	   
	EX1=0;
               
	while(1)
   {
	button();
   	wei();

    P3=0xef;
    P2=segcc[qian];        
    delay1ms(1);
               
    P3=0xdf;
    P2=segcc[bai];        
    delay1ms(1); 

    P3=0xbf;
    P2=segcc[shi];        
    delay1ms(1);
               
    P3=0x7f;
    P2=segcc[ge];        
    delay1ms(1);
	EX1=1;	
	}	
}

标签:10,单片机,中断,void,51,数码管,K1,num,K0
来源: https://blog.csdn.net/JslientJ/article/details/106465567

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有