| 注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 | 
![]()  | 
| 首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 | 
|   选择分类:当前分类——学单片机    相关联或者相类似的文章:    三十分钟一个小时学会单片机(9045) 什么是单片机?单片机有什么用? (8723) 如何用STC板将代码烧录进IC(8681) 怎样安装AT51编程板的USB转串口软件?(8206) 送给单片机爱好者——LED在线编码器(1814) 送给单片机爱好者——LED点阵在线编码器(1544) 单片机系统中的汉字显示(1492) 带语音报数功能的抢答器(1489) 用VB进行串口实时数据采集(1347) 用AT89C2051设计超声波测距仪(1171) 小小电子闹钟 生活学习良伴(1165) DS1820测温原理(1129) 几句代码实现控制摄像头(转)(1117) STC单片机选型指南(1111) 自制PIC单片机编程器(1105) USB转串口芯片CH340(1010) 快速学习单片机之黄金机会!(1010) 告戒购单片机开发实验板初学者(970) 新款实用旋转LED显示屏A(890) 使用市售 USB转RS232串口与PLC通信的测试报告 (881) 首页 前页 后页 尾页  本站推荐:        |    33.4×4键盘及8位数码管显示构成的电子密码锁  1.      实验任务  
用4×4组成0-9数字键及确认键。 
用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用LED发光二极管亮一秒钟做为提示,同时发出“叮咚”声;若密码不正确,禁止按键输入3秒,同时发出“嘀、嘀”报警声;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。 
2.      电路原理图  
![]() 图4.33.1 
3.      系统板上硬件连线  
(1).            把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。 
(2).            把“单片机系统“区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。 
(3).            把“单片机系统”区域中的P3.0-P3.7用8芯排线连接到“4×4行列式键盘”区域中的R1R2R3R4C1C2C3C4端子上。 
(4).            把“单片机系统”区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L2端子上。 
(5).            把“单片机系统”区域中的P1.7用导线连接到“音频放大模块”区域中的SPK IN端子上。 
(6).            把“音频放大模块”区域中的SPK OUT接到喇叭上。 
4.      程序设计内容  
(1).            4×4行列式键盘识别技术:有关这方面内容前面已经讨论过,这里不再重复。 
(2).            8位数码显示,初始化时,显示“P   ”,接着输入最大6位数的密码,当密码输入完后,按下确认键,进行密码比较,然后给出相应的信息。在输入密码过程中,显示器只显示“8.”。当数字输入超过6个时,给出报警信息。在密码输入过程中,若输入错误,可以利用“DEL”键删除刚才输入的错误的数字。 
(3).            4×4行列式键盘的按键功能分布图如图4.33.2所示: 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
图4.33.2 
5.      C语言源程序  
#include <AT89X52.H>  
unsigned char ps[]={1,2,3,4,5};  
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,  
                              0xef,0xdf,0xbf,0x7f};  
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,  
                               0x6d,0x7d,0x07,0x7f,0x6f,  
                               0x77,0x7c,0x39,0x5e,0x79,0x71,  
                               0x00,0x40,0x73,0xff};  
unsigned char dispbuf[8]={18,16,16,16,16,16,16,16};  
unsigned char dispcount;  
unsigned char flashcount;  
unsigned char temp;  
unsigned char key;  
unsigned char keycount;  
unsigned char pslen=5;  
unsigned char getps[6];  
bit keyoverflag;  
bit errorflag;  
bit rightflag;  
unsigned int second3;  
unsigned int aa,bb;  
unsigned int cc;  
bit okflag;  
bit alarmflag;  
bit hibitflag;  
unsigned char oka,okb;  
void main(void)  
{  
  unsigned char i,j;  
  TMOD=0x01;  
  TH0=(65536-500)/256;  
  TL0=(65536-500)%256;  
  TR0=1;  
  ET0=1;  
  EA=1;  
  while(1)  
    {  
      P3=0xff;  
      P3_4=0;  
      temp=P3;  
      temp=temp & 0x0f;  
      if (temp!=0x0f)  
        {  
          for(i=10;i>0;i--)  
          for(j=248;j>0;j--);  
          temp=P3;  
          temp=temp & 0x0f;  
          if (temp!=0x0f)  
            {  
              temp=P3;  
              temp=temp & 0x0f;               
              switch(temp)  
                {  
                  case 0x0e:  
                    key=7;  
                    break;  
                  case 0x0d:  
                    key=8;  
                    break;  
                  case 0x0b:  
                    key=9;  
                    break;  
                  case 0x07:  
                    key=10;  
                    break;  
                }  
              temp=P3;  
              P1_1=~P1_1;  
              if((key>=0) && (key<10))  
                {  
                  if(keycount<6)  
                    {  
                      getps[keycount]=key;  
                      dispbuf[keycount+2]=19;  
                    }  
                  keycount++;  
                  if(keycount==6)  
                    {  
                      keycount=6;  
                    }  
                    else if(keycount>6)  
                      {  
                        keycount=6;  
                        keyoverflag=1;//key overflow                         
                      }  
                }  
                else if(key==12)//delete key  
                  {  
                    if(keycount>0)  
                      {  
                        keycount--;  
                        getps[keycount]=0;  
                        dispbuf[keycount+2]=16;  
                      }  
                      else  
                        {  
                          keyoverflag=1;  
                        }  
                  }  
                  else if(key==15)//enter key  
                    {  
                      if(keycount!=pslen)  
                        {  
                          errorflag=1;  
                          rightflag=0;  
                          second3=0;  
                        }  
                        else  
                          {  
                            for(i=0;i<keycount;i++)  
                              {  
                                if(getps[i]!=ps[i])  
                                  {  
                                    i=keycount;  
                                    errorflag=1;  
                                    rightflag=0;  
                                    second3=0;  
                                    goto a;  
                                  }  
                              }  
                            errorflag=0;  
                            rightflag=1;  
a:                          i=keycount;  
                          }  
                    }  
              temp=temp & 0x0f;               
              while(temp!=0x0f)  
                {  
                  temp=P3;  
                  temp=temp & 0x0f;               
                }  
              keyoverflag=0;//?????????  
            }  
        }  
      P3=0xff;  
      P3_5=0;  
      temp=P3;  
      temp=temp & 0x0f;  
      if (temp!=0x0f)  
        {  
          for(i=10;i>0;i--)  
          for(j=248;j>0;j--);  
          temp=P3;  
          temp=temp & 0x0f;  
          if (temp!=0x0f)  
            {  
              temp=P3;  
              temp=temp & 0x0f;               
              switch(temp)  
                {  
                  case 0x0e:  
                    key=4;  
                    break;  
                  case 0x0d:  
                    key=5;  
                    break;  
                  case 0x0b:  
                    key=6;  
                    break;  
                  case 0x07:  
                    key=11;  
                    break;  
                }  
              temp=P3;  
              P1_1=~P1_1;  
              if((key>=0) && (key<10))  
                {  
                  if(keycount<6)  
                    {  
                      getps[keycount]=key;  
                      dispbuf[keycount+2]=19;  
                    }  
                  keycount++;  
                  if(keycount==6)  
                    {  
                      keycount=6;  
                    }  
                    else if(keycount>6)  
                      {  
                        keycount=6;  
                        keyoverflag=1;//key overflow                         
                      }  
                }  
                else if(key==12)//delete key  
                  {  
                    if(keycount>0)  
                      {  
                        keycount--;  
                        getps[keycount]=0;  
                        dispbuf[keycount+2]=16;  
                      }  
                      else  
                        {  
                          keyoverflag=1;  
                        }  
                  }  
                  else if(key==15)//enter key  
                    {  
                      if(keycount!=pslen)  
                        {  
                          errorflag=1;  
                          rightflag=0;  
                          second3=0;  
                        }  
                        else  
                          {  
                            for(i=0;i<keycount;i++)  
                              {  
                                if(getps[i]!=ps[i])  
                                  {  
                                    i=keycount;  
                                    errorflag=1;  
                                    rightflag=0;  
                                    second3=0;  
                                    goto a4;  
                                  }  
                              }  
                            errorflag=0;  
                            rightflag=1;  
a4:                          i=keycount;  
                          }  
                    }  
              temp=temp & 0x0f;               
              while(temp!=0x0f)  
                {  
                  temp=P3;  
                  temp=temp & 0x0f;               
                }  
              keyoverflag=0;//?????????  
            }  
        }  
      P3=0xff;  
      P3_6=0;  
      temp=P3;  
      temp=temp & 0x0f;  
      if (temp!=0x0f)  
        {  
          for(i=10;i>0;i--)  
          for(j=248;j>0;j--);  
          temp=P3;  
          temp=temp & 0x0f;  
          if (temp!=0x0f)  
            {  
              temp=P3;  
              temp=temp & 0x0f;               
              switch(temp)  
                {  
                  case 0x0e:  
                    key=1;  
                    break;  
                  case 0x0d:  
                    key=2;  
                    break;  
                  case 0x0b:  
                    key=3;  
                    break;  
                  case 0x07:  
                    key=12;  
                    break;  
                }  
              temp=P3;  
              P1_1=~P1_1;  
              if((key>=0) && (key<10))  
                {  
                  if(keycount<6)  
                    {  
                      getps[keycount]=key;  
                      dispbuf[keycount+2]=19;  
                    }  
                  keycount++;  
                  if(keycount==6)  
                    {  
                      keycount=6;  
                    }  
                    else if(keycount>6)  
                      {  
                        keycount=6;  
                        keyoverflag=1;//key overflow                         
                      }  
                }  
                else if(key==12)//delete key  
                  {  
                    if(keycount>0)  
                      {  
                        keycount--;  
                        getps[keycount]=0;  
                        dispbuf[keycount+2]=16;  
                      }  
                      else  
                        {  
                          keyoverflag=1;  
                        }  
                  }  
                  else if(key==15)//enter key  
                    {  
                      if(keycount!=pslen)  
                        {  
                          errorflag=1;  
                          rightflag=0;  
                          second3=0;  
                        }  
                        else  
                          {  
                            for(i=0;i<keycount;i++)  
                              {  
                                if(getps[i]!=ps[i])  
                                  {  
                                    i=keycount;  
                                    errorflag=1;  
                                    rightflag=0;  
                                    second3=0;  
                                    goto a3;  
                                  }  
                              }  
                            errorflag=0;  
                            rightflag=1;  
a3:                          i=keycount;  
                          }  
                    }  
              temp=temp & 0x0f;               
              while(temp!=0x0f)  
                {  
                  temp=P3;  
                  temp=temp & 0x0f;               
                }  
              keyoverflag=0;//?????????  
            }  
        }  
      P3=0xff;  
      P3_7=0;  
      temp=P3;  
      temp=temp & 0x0f;  
      if (temp!=0x0f)  
        {  
          for(i=10;i>0;i--)  
          for(j=248;j>0;j--);  
          temp=P3;  
          temp=temp & 0x0f;  
          if (temp!=0x0f)  
            {  
              temp=P3;  
              temp=temp & 0x0f;               
              switch(temp)  
                {  
                  case 0x0e:  
                    key=0;  
                    break;  
                  case 0x0d:  
                    key=13;  
                    break;  
                  case 0x0b:  
                    key=14;  
                    break;  
                  case 0x07:  
                    key=15;  
                    break;  
                }  
              temp=P3;  
              P1_1=~P1_1;  
              if((key>=0) && (key<10))  
                {  
                  if(keycount<6)  
                    {  
                      getps[keycount]=key;  
                      dispbuf[keycount+2]=19;  
                    }  
                  keycount++;  
                  if(keycount==6)  
                    {  
                      keycount=6;  
                    }  
                    else if(keycount>6)  
                      {  
                        keycount=6;  
                        keyoverflag=1;//key overflow                         
                      }  
                }  
                else if(key==12)//delete key  
                  {  
                    if(keycount>0)  
                      {  
                        keycount--;  
                        getps[keycount]=0;  
                        dispbuf[keycount+2]=16;  
                      }  
                      else  
                        {  
                          keyoverflag=1;  
                        }  
                  }  
                  else if(key==15)//enter key  
                    {  
                      if(keycount!=pslen)  
                        {  
                          errorflag=1;  
                          rightflag=0;  
                          second3=0;  
                        }  
                        else  
                          {  
                            for(i=0;i<keycount;i++)  
                              {  
                                if(getps[i]!=ps[i])  
                                  {  
                                    i=keycount;  
                                    errorflag=1;  
                                    rightflag=0;  
                                    second3=0;  
                                    goto a2;  
                                  }  
                              }  
                            errorflag=0;  
                            rightflag=1;  
a2:                          i=keycount;  
                          }  
                    }  
              temp=temp & 0x0f;               
              while(temp!=0x0f)  
                {  
                  temp=P3;  
                  temp=temp & 0x0f;               
                }  
              keyoverflag=0;//?????????  
            }                           
        }  
    }  
}  
void t0(void) interrupt 1 using 0  
{  
  TH0=(65536-500)/256;  
  TL0=(65536-500)%256;  
  flashcount++;  
  if(flashcount==8)  
    {  
      flashcount=0;  
      P0=dispcode[dispbuf[dispcount]];  
      P2=dispbit[dispcount];  
      dispcount++;  
      if(dispcount==8)  
        {  
          dispcount=0;  
        }  
    }  
  if((errorflag==1) && (rightflag==0))  
    {  
      bb++;  
      if(bb==800)  
        {  
          bb=0;  
          alarmflag=~alarmflag;  
        }  
      if(alarmflag==1)//sound alarm signal  
        {  
          P1_7=~P1_7;  
        }  
      aa++;  
      if(aa==800)//light alarm signal  
        {  
          aa=0;  
          P1_0=~P1_0;  
        }  
      second3++;  
      if(second3==6400)  
        {  
          second3=0;  
          errorflag=0;  
          rightflag=0;  
          alarmflag=0;  
          bb=0;  
          aa=0;  
        }       
    }  
    else if((errorflag==0) && (rightflag==1))  
      {  
        P1_0=0;  
        cc++;  
        if(cc<1000)  
          {  
            okflag=1;  
          }  
          else if(cc<2000)  
            {  
              okflag=0;  
            }  
            else  
              {  
                errorflag=0;  
                rightflag=0;  
                P1_7=1;  
                cc=0;  
                oka=0;  
                okb=0;  
                okflag=0;  
                P1_0=1;  
              }  
        if(okflag==1)  
          {  
            oka++;  
            if(oka==2)  
              {  
                oka=0;  
                P1_7=~P1_7;  
              }  
          }  
          else  
            {  
              okb++;  
              if(okb==3)  
                {  
                  okb=0;  
                  P1_7=~P1_7;  
                }  
            }  
      }  
  if(keyoverflag==1)  
    {  
      P1_7=~P1_7;  
    }  
} nbsp;          case 0x0d:                     key=13;  
                    break;  
                  case 0x0b:  
                    key=14;  
                    break;  
                  case 0x07:  
                    key=15;  
                    break;  
                }  
              temp=P3;  
              P1_1=~P1_1;  
              if((key>=0) && (key<10))  
                {  
                  if(keycount<6)  
                    {  
                      getps[keycount]=key;  
                      dispbuf[keycount+2]=19;  
                    }  
                  keycount++;  
                  if(keycount==6)  
                    {  
                      keycount=6;  
                    }  
                    else if(keycount>6)  
                      {  
                        keycount=6;  
                        keyoverflag=1;//key overflow                         
                      }  
                }  
                else if(key==12)//delete key  
                  {  
                    if(keycount>0)  
                      {  
                        keycount--;  
                        getps[keycount]=0;  
                        dispbuf[keycount+2]=16;  
                      }  
                      else  
                        {  
                          keyoverflag=1;  
                        }  
                  }  
                  else if(key==15)//enter key  
                    {  
                      if(keycount!=pslen)  
                        {  
                          errorflag=1;  
                          rightflag=0;  
                          second3=0;  
                        }  
                        else  
                          {  
                            for(i=0;i<keycount;i++)  
                              {  
                                if(getps[i]!=ps[i])  
                                  {  
                                    i=keycount;  
                                    errorflag=1;  
                                    rightflag=0;  
                                    second3=0;  
                                    goto a2;  
                                  }  
                              }  
                            errorflag=0;  
                            rightflag=1;  
a2:                          i=keycount;  
                          }  
                    }  
              temp=temp & 0x0f;               
              while(temp!=0x0f)  
                {  
                  temp=P3;  
                  temp=temp & 0x0f;               
                }  
              keyoverflag=0;//?????????  
            }                           
        }  
    }  
}  
void t0(void) interrupt 1 using 0  
{  
  TH0=(65536-500)/256;  
  TL0=(65536-500)%256;  
  flashcount++;  
  if(flashcount==8)  
    {  
      flashcount=0;  
      P0=dispcode[dispbuf[dispcount]];  
      P2=dispbit[dispcount];  
      dispcount++;  
      if(dispcount==8)  
        {  
          dispcount=0;  
        }  
    }  
  if((errorflag==1) && (rightflag==0))  
    {  
      bb++;  
      if(bb==800)  
        {  
          bb=0;  
          alarmflag=~alarmflag;  
        }  
      if(alarmflag==1)//sound alarm signal  
        {  
          P1_7=~P1_7;  
        }  
      aa++;  
      if(aa==800)//light alarm signal  
        {  
          aa=0;  
          P1_0=~P1_0;  
        }  
      second3++;  
      if(second3==6400)  
        {  
          second3=0;  
          errorflag=0;  
          rightflag=0;  
          alarmflag=0;  
          bb=0;  
          aa=0;  
        }       
    }  
    else if((errorflag==0) && (rightflag==1))  
      {  
        P1_0=0;  
        cc++;  
        if(cc<1000)  
          {  
            okflag=1;  
          }  
          else if(cc<2000)  
            {  
              okflag=0;  
            }  
            else  
              {  
                errorflag=0;  
                rightflag=0;  
                P1_7=1;  
                cc=0;  
                oka=0;  
                okb=0;  
                okflag=0;  
                P1_0=1;  
              }  
        if(okflag==1)  
          {  
            oka++;  
            if(oka==2)  
              {  
                oka=0;  
                P1_7=~P1_7;  
              }  
          }  
          else  
            {  
              okb++;  
              if(okb==3)  
                {  
                  okb=0;  
                  P1_7=~P1_7;  
                }  
            }  
      }  
  if(keyoverflag==1)  
    {  
      P1_7=~P1_7;  
    }  
}  1、 本站不保证以上观点正确,就算是本站原创作品,本站也不保证内容正确。  2、如果您拥有本文版权,并且不想在本站转载,请书面通知本站立即删除并且向您公开道歉!  |   
| 
 本站协议 |
 版权信息 | 
 关于我们 | 
 本站地图 | 
 营业执照 | 
 发票说明 | 
 付款方式 | 
 联系方式
 深圳市宝安区西乡五壹电子商行——粤ICP备16073394号-1;地址:深圳西乡河西四坊183号;邮编:518102 E-mail:51dz$163.com($改为@);Tel:(0755)27947428 工作时间:9:30-12:00和13:30-17:30和18:30-20:30,无人接听时可以再打手机13537585389  |