| 注意:访问本站需要Cookie和JavaScript支持!请设置您的浏览器! • 打开购物车 • 查看留言 • 付款方式 • 联系我们 | 
![]()  | 
| 首页 | 电子入门 | 学单片机 | 免费资源 | 下载中心 | 商品列表 | 象棋在线 | 在线绘图 | 加盟五一 | 加入收藏 | 设为首页 | 
|   选择分类:当前分类——学单片机    相关联或者相类似的文章:    CMOS集成电路应用常识(543) 直流输入如何得到220V/1-2W的交流电(543) 法传销组织的“洗脑”骗术三(542) 电子技术自立学习法(541) 一款最简单的手机/MP3充电器电路图(541) 可充电电池技术和充电方法(540) SC3610频率及时钟显示驱动电路(540) 写给伟大教师的一封信:(539) STC单片机简介(539) 什么是卫星电视广播,它由几部分组(539) 多间单房长年低价招租(538) 固态继电器的选型注意事项(538) 存储器名词解释 (538) 专访中国农民制造超轻型飞机第一人——刘亦兵 (538) 常用三极管资料查询2(537) 常用三极管资料查询1(537) 【图文】科学家找到揭开地球最初奥(536) 摩托罗拉168VA手机汽车充电器剖析 (536) ★单片双路四位计数器程序(536) 简易漏电报警器(535) 首页 前页 后页 尾页  本站推荐:        |    32.            电子密码锁设计  1.实验任务  
根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。 
2.电路原理图  
![]() 图4.32.1 
3.系统板上硬件连线  
(1).            把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPK IN端子上; 
(2).            把“音频放大模块”区域中的SPK OUT端子接喇叭和; 
(3).            把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上; 
(4).            把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上; 
(5).            把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上; 
4.程序设计内容  
(1).            密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。 
(2).            密码的输入问题: 
由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。 
(3).            按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。 
5.C语言源程序  
#include <AT89X52.H>  
unsigned char code ps[]={1,2,3,4,5};  
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,  
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};  
unsigned char pslen=9;  
unsigned char templen;  
unsigned char digit;  
unsigned char funcount;  
unsigned char digitcount;  
unsigned char psbuf[9];  
bit cmpflag;  
bit hibitflag;  
bit errorflag;  
bit rightflag;  
unsigned int second3;  
unsigned int aa;  
unsigned int bb;  
bit alarmflag;  
bit exchangeflag;  
unsigned int cc;  
unsigned int dd;  
bit okflag;  
unsigned char oka;  
unsigned char okb;  
void main(void)  
{  
  unsigned char i,j;  
  P2=dispcode[digitcount];  
  TMOD=0x01;  
  TH0=(65536-500)/256;  
  TL0=(65536-500)%256;  
  TR0=1;  
  ET0=1;  
  EA=1;  
  while(1)  
    {  
      if(cmpflag==0)  
        {  
          if(P3_6==0) //function key  
            {  
              for(i=10;i>0;i--)  
              for(j=248;j>0;j--);  
              if(P3_6==0)  
                {  
                  if(hibitflag==0)  
                    {  
                      funcount++;  
                      if(funcount==pslen+2)  
                        {  
                          funcount=0;  
                          cmpflag=1;  
                         }  
                       P1=dispcode[funcount];  
                    }  
                    else  
                      {  
                         second3=0;  
                      }  
                  while(P3_6==0);  
                }  
            }  
          if(P3_7==0) //digit key  
            {  
              for(i=10;i>0;i--)  
              for(j=248;j>0;j--);  
              if(P3_7==0)  
                {  
                  if(hibitflag==0)  
                    {  
                      digitcount++;                       
                      if(digitcount==10)  
                        {  
                          digitcount=0;  
                        }  
                      P2=dispcode[digitcount];  
                      if(funcount==1)  
                        {  
                          pslen=digitcount;  
                          templen=pslen;  
                        }  
                        else if(funcount>1)  
                          {  
                            psbuf[funcount-2]=digitcount;  
                          }  
                    }  
                    else  
                      {  
                        second3=0;  
                      }  
                  while(P3_7==0);  
                }  
            }  
        }  
        else  
          {  
            cmpflag=0;  
            for(i=0;i<pslen;i++)  
              {  
                if(ps[i]!=psbuf[i])  
                  {  
                    hibitflag=1;  
                    i=pslen;  
                    errorflag=1;  
                    rightflag=0;  
                    cmpflag=0;  
                    second3=0;  
                    goto a;  
                  }  
              }  
            cc=0;  
            errorflag=0;  
            rightflag=1;  
            hibitflag=0;  
a:          cmpflag=0;  
          }  
    }  
}  
void t0(void) interrupt 1 using 0  
{  
  TH0=(65536-500)/256;  
  TL0=(65536-500)%256;  
  if((errorflag==1) && (rightflag==0))  
    {  
      bb++;  
      if(bb==800)  
        {  
          bb=0;  
          alarmflag=~alarmflag;  
        }  
      if(alarmflag==1)  
        {  
          P0_0=~P0_0;  
        }  
      aa++;  
      if(aa==800)  
        {  
          aa=0;  
          P0_1=~P0_1;  
        }  
      second3++;  
      if(second3==6400)  
        {  
          second3=0;  
          hibitflag=0;  
          errorflag=0;  
          rightflag=0;  
          cmpflag=0;  
          P0_1=1;  
          alarmflag=0;  
          bb=0;  
          aa=0;  
        }  
    }  
  if((errorflag==0) && (rightflag==1))  
    {  
      P0_1=0;  
      cc++;  
      if(cc<1000)  
        {  
          okflag=1;  
        }  
        else if(cc<2000)  
          {  
            okflag=0;  
          }  
          else  
            {  
              errorflag=0;  
              rightflag=0;  
              hibitflag=0;  
              cmpflag=0;  
              P0_1=1;  
              cc=0;  
              oka=0;  
              okb=0;  
              okflag=0;  
              P0_0=1;  
            }  
      if(okflag==1)  
        {  
          oka++;  
          if(oka==2)  
            {  
              oka=0;  
              P0_0=~P0_0;  
            }  
        }  
        else  
          {  
            okb++;  
            if(okb==3)  
              {  
                okb=0;  
                P0_0=~P0_0;  
              }  
          }  
    }  
}  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  |