单片机电子密码锁 第8页

单片机电子密码锁 第8页
void display(void)
{
 uchar i;
 switch (digbit)
 {
  case 1:  i=0; break;
  case 2:  i=1; break;
  case 4:  i=2; break;
  case 8:  i=3; break;
  case 16:     i=4; break;
  case 32:     i=5; break;
  default:      break;
 }
 P2 = 0x0;         // 关闭显示
 P0 = getcode(wordbuf[i]);    // 送字型码
 P2 = digbit;        // 送字位码
 if (digbit<0x20)       // 共6位
  digbit = digbit*2;     // 左移一位
 else
     digbit = 0x01;
}
/* 密码比较函数 */
bit pwcmp(void)
{
 bit flag;
 uchar i;
 for (i=0;i<6;i++)
 {
  if (pw[i]==pwbuf[i])
   flag = 1;
  else
  {
   flag = 0;
   i = 6;
  }
 }
 return(flag);
}

/* 主程序 */
void main()
{
 uchar j,key;

 P2 = 0x0;       // 关闭数码管显示
 TMOD = 0x11;      // T0,T1工作方式1

 /* 2ms 定时设置 */
 TH0 = -2000/256;
 TL0 = 2000%256;

 /* 50ms 定时设置 */
 TH1 = -50000/256;
 TL1 = -50000%256;
 
 /* 启动计数器0,关闭计数器1 */
 TR0 = 1;
 ET0 = 1;
 TR1 = 0;
 ET1 = 1;
 EA = 1;

 count = 0;         // 初始没有输入密码,计数器设为0
 enterflag = 0;     // 没有按下确认键
 pwflag = 0;      // 密码标志先置为0
    green = 1;      // 绿灯不亮
 red = 1;          // 红灯不亮
 
 /* 假设内定密码为937602 */
 pw[0] = 9;
 pw[1] = 3;
 pw[2] = 7;
 pw[3] = 6;
 pw[4] = 0;
 pw[5] = 2;
 
 digbit = 0x01;          // 从第一位数码管开始动态扫描

 /* 刚加电时,显示888888 */
 for (j=0;j<6;j++)
  wordbuf[j] = 8;
showflag = 1;              // 打开数码管显示
while(1)
    {
  key = keyscan();        // 调用键盘扫描函数
  switch(key)
     {
        case 0x11:         // 1行1列,数字0
    if (count<6)
    {
     wordbuf[count] = 0x0f; // 对应密码位上显示“F”
     pwbuf[count] = 0;
     count++;
    }
    break;
   case 0x21:         // 1行2列,数字1
    if (count<6)
    {
     wordbuf[count] = 0x0f; // 对应密码位上显示“F"
     pwbuf[count] = 1;
     count++;

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

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有