单片机控制的密码锁设计(含电路图及源程序)

[09-11 23:01:38]   来源:http://www.88dzw.com  单片机学习   阅读:8782

文章摘要:unsigned char data show_val[6];char code init_val[6]={1,2,3,4,5,0};char code led_seg_code[11]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00数码管不显示任何内容//延时程序void delay(unsigned int i)//延时{ while(--i); }//清除输入内容--

单片机控制的密码锁设计(含电路图及源程序),标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
unsigned char data show_val[6];
char code init_val[6]={1,2,3,4,5,0};
char code led_seg_code[11]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00数码管不显示任何内容
//--------延时程序----------------
void delay(unsigned int i)//延时
{ while(--i); }
//--------清除输入内容----------
void init_variant()
{unsigned char i;
 for(i=0;i<6;i++)
    show_val[i]=10; //led_seg_code[10]=0x00表示数码管不显示任何内容
 key_index=0;      //没有任何输入或清除所有输入时,保存当前键的位置
}
//---------按键扫描---------------
unsigned char scan_key()
{  unsigned char i,k;
   i=P1;
   if (i==0xff && cnt_state!=2)
   { k=255; }    //无键按下
   else          //有键按下
   { delay(500);  //延时去抖动
     if(i!=P1)
     {k=255;}
     else
     { TR1=1;   //有键按下则开定时器,启动待机计时
       cnt_val_5s=0;
       switch (i)
       { case 0xfe: k=0; break;
         case 0xfd: k=1; break;
         case 0xfb: k=2; break;
         case 0xf7: k=3; break;
         case 0xef: k=4; break;
         case 0xdf: k=5; break;
         case 0xbf: k=6; break;
         case 0x7f: k=7; break;
       }
      }
   }
   return k;
}
//---------数码管显示---------------
void led_show()
{P0=led_seg_code[show_val[0]];
 P2=0xdf;
 delay(500);
 P0=led_seg_code[show_val[1]];
 P2=0xef;
 delay(500);
 P0=led_seg_code[show_val[2]];
 P2=0xf7;
 delay(500);
 P0=led_seg_code[show_val[3]];
 P2=0xfb;
 delay(500);
 P0=led_seg_code[show_val[4]];
 P2=0xfd;
 delay(500);
 P0=led_seg_code[show_val[5]];
 P2=0xfe;
 delay(500);
}
//--------定时器T1中断服务程序-----------------
void  timer1() interrupt 3     //T1中断
{ T1_cnt++;
  if(T1_cnt>3999)      //如果计数>3999, 计时1s
  {  T1_cnt=0;
     switch (cnt_state)
     { case 0: //待机,需要计时5s
           if(cnt_val_5s<5)
              { cnt_val_5s++;}
           else
              { cnt_val_5s=0;
                init_variant();//待机计时到5秒时,清除输入的内容

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习
分类导航
最新更新
热门排行