标题: 9999倒计时按键 单片机程序 [打印本页]

作者: 147586    时间: 2019-12-10 15:25
标题: 9999倒计时按键 单片机程序

#include
#define uchar unsigned char
#define uint unsigned int
sbit k1 = P1^0;            //加
sbit k2 = P1^1;            //减
sbit k3 = P1^2;            //复位
void key(void);
void display(void);
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                    0x92,0x82,0xf8,0x80,0x90};    //数组
   
char m=99,n=98;    //显示初值,m,n的值决定开机显示数值
//延时程序
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
//显示程序
void display(void)
{
        P2=0X08;
  P0=table[m%10];   //显示个位
  delayms(5);  
  P2=0X04;
     P0=table[m/10];   //显示十位
  delayms(5);            
     P2=0X02;
  P0=table[n%10];   //显示百位
  delayms(5);
  P2=0X01;
  P0=table[n/10];   //显示千位
  delayms(5);
}
//按键处理
void key()
{
  if(k1==0)      //检测按键是否被按下
   {       //延时消抖
    delayms(10);   
if(k1==0)     //再次检测是否真正按下按键
{
   m++;      //m自加一
   if(m>=100)    //如果m加到100则n加一 (限制m的取值范围) 个位、十位最大显示99
   {
    n++;     //n自加一
  m=0;     //使m又从0开始计数
  if(n>=100)    //如果n加到100则m=n=99 (限制n的取值范围) 百位、千位最大显示99
  {
    m=99;     //最大显示9999
    n=99;
  }
   }
}
while(!k1);     //按键松开
   }
  if(k2==0)      //检测按键是否被按下
   {       //延时消抖
    delayms(10);    //再次检测是否真正按下按键
if(k2==0)
{       //m自减一
   m--;
   if(m<=0)     //如果m减到0则n减一 (限制n的取值范围) 个位、十位最小显示00
   {      
     m=99;     //重新给m装初值
    n--;     //n自减一
  if(n==-1)    //如果n减到-1,则m=n=0 (限制n的取值范围) 百位、千位最小显示00
  {
   n=0;     //最小显示0000
   m=0;
  }
   }
}
while(!k2);     //按键松开
   }
if(k3==0)      //检测按键是否被按下
{
   delayms(10);     //延时消抖
   if(k3==0)     //再次检测是否真正按下按键
   {
     m=0;      //复位,显示0000
  n=0;
   }
   while(!k3);     //按键松开
}
}
void main()
{
  while(1)
  {        //调用按键检测
   key();      //数码管显示
   display();
  }
}

作者: admin    时间: 2019-12-10 21:51
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1