独立键盘的练习实验

来源:互联网 发布:睿拓香港知乎 编辑:程序博客网 时间:2024/04/25 15:19

#include<reg52.h>  
 //数码管显示0-59的计数器" 
//数码管前三位显示
//一个跑表,从000到999之间以1%秒速度运行,
//当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。
#include<intrins.h>
sbit beep=P2^3;
sbit s2=P3^4;//to
sbit s3=P3^5;
sbit s4=P3^6;
sbit s5=P3^7;
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(unsigned int x)
{
 unsigned int i,j;
 for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}

void display(uchar bai,uchar shi,uchar ge)
{
 P0=0xfe;
 wela=1;
 wela=0;
 P0=table[bai];
 dula=1;
 dula=0;
 delay(5);

 P0=0xfd;
 wela=1;
 wela=0;
 P0=table[shi];
 dula=1;
 dula=0;
 delay(5);

 P0=0xfb;
 wela=1;
 wela=0;
 P0=table[ge];
 dula=1;
 dula=0;
 delay(5);
  }

void main()
{
 uint num,val;
 uchar a,b,c,flag=0,stop=0;
 wela=0;
 dula=0;
 while(1)
 {
  if(stop!=1)
   num++;
  if(num==1000)
   num=0;
  if(s2==0)
  {
   delay(5);
   if(s2==0)
   {
    if(flag==0)
     val=num;
    a=val/100;
    b=val%100/10;
    c=val%10;
    display(a,b,c);
   
    flag=1;
   }
  }
  else
  {
    flag=0;
   
    a=num/100;
    b=num%100/10;
    c=num%10;
    display(a,b,c);
    
  }
  delay(5);
  display(a,b,c);
   delay(5);
    if(num==200)
     beep=0;
    if(num==300)
     beep=1;
  display(a,b,c);
   delay(5);
  if(s3==0)
  {
   delay(5);
   if(s3==0)
   {
     stop=1;
     display(a,b,c);
   }
  }
  display(a,b,c);
   delay(5);
  if(s4==0)
  {
   delay(5);
   if(s4==0)
   {
    stop=0;
    display(a,b,c);
   }
  }
  if(s5==0)
  {
   num=0;
   display(0,0,0);
  }


 }
 

}
                                                     

原创粉丝点击