找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 3801|回复: 4
打印 上一主题 下一主题
收起左侧

单片机c语言密码锁程序源码

[复制链接]
跳转到指定楼层
楼主
ID:70976 发表于 2014-12-25 13:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 daniu 于 2014-12-25 13:15 编辑
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. uchar code tab1[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,
  4.        0X80,0X90,0xff,0xfe};  //0~f字型码表

  5. sbit lv=P2^7;
  6. sbit hong=P2^5;
  7. sbit qd=P3^3;
  8. sbit zy=P2^1;
  9. sbit yy=P2^2;
  10. void delay(uchar x)          //毫秒级延时函数
  11. {
  12. uchar y;            
  13. for(;x>0;x--)
  14.   for(y=110;y>0;y--);
  15. }


  16. scanf()    //按键处理函数   
  17. {
  18. uchar temp,temp1,i;   
  19. P0=0xf0;        //给P0口赋值为oxf0,用于列扫描
  20. if(P0!=0xf0)   //判别是否有键按下
  21. {
  22.   delay(2);  
  23.   if(P0!=0xf0)    //再次判别是否有键按下
  24.   {
  25.    temp1=P0;   //P0值赋给temp1
  26.    P0=0x0f;   //P0值赋为0x0f,用于行扫描
  27.    temp=temp1|P0; //将行列扫描值合并,赋给temp
  28.   }

  29. switch(temp)
  30. {
  31.   case 0xee:i=1; break;
  32.   case 0xed:i=2; break;
  33.   case 0xeb:i=3; break;
  34.   case 0xe7:i=4; break;
  35.   case 0xde:i=5; break;
  36.   case 0xdd:i=6; break;
  37.   case 0xdb:i=7; break;
  38.   case 0xd7:i=8; break;
  39.   case 0xbe:i=9; break;
  40.   case 0xbd:i=0; break;

  41. }
  42. }
  43.   else return 10;
  44.   return i;
  45. }  











  46. void main(void)     //主函数
  47. {


  48. uchar x,i,f=0,k=3;
  49. uchar zhi[6]={10,10,10,10,10,10};
  50. uchar zhi1[6]={6,5,4,3,2,1};

  51. while(1)
  52. {
  53.   for(i=0;i<6;i++)
  54. {   if(x==i)SBUF=tab1[11];
  55.   else SBUF=tab1[zhi[ i]];   
  56.   while(!TI);   
  57.   TI=0;         
  58. }    delay(200);



  59.    for(i=0;i<6;i++)
  60. {   
  61.   SBUF=tab1[zhi[ i]];   
  62.   while(!TI);   
  63.   TI=0;         
  64. }    delay(200);


  65.   if(x<6&&k)
  66.   { if(scanf()<10)
  67.   {
  68.    delay(10);
  69.    if(scanf()<10)
  70.    {
  71.      if(x==0){zhi[0]=scanf();while(scanf()!=10);}

  72.      if(x==1){zhi[1]=scanf();while(scanf()!=10);}

  73.      if(x==2){zhi[2]=scanf();while(scanf()!=10);}

  74.      if(x==3){zhi[3]=scanf();while(scanf()!=10);}

  75.      if(x==4){zhi[4]=scanf();while(scanf()!=10);}

  76.      if(x==5){zhi[5]=scanf();while(scanf()!=10);}           


  77.      x++;           






  78.     }

  79.    }

  80.   }



  81.   if(yy==0)
  82.   {
  83.    delay(5);
  84.    if(yy==0)
  85.    {
  86.     while(zy==0);
  87.     x++;
  88.     if(x==6)x=0;
  89.    }
  90.   }



  91.   if(zy==0)
  92.   {
  93.    delay(5);
  94.    if(zy==0)
  95.    {
  96.     while(yy==0);
  97.     if(x==0)x=6;
  98.     x--;
  99.    }
  100.   }   



  101.   while(f);
  102.   while(!k);


  103. if(qd==0)
  104. {
  105. delay(5);
  106. if(x==6&&qd==0)
  107. {
  108. if(zhi[0]==zhi1[0]&&zhi[1]==zhi1[1]&&zhi[2]==zhi1[2]&&zhi[3]==zhi1[3]&&zhi[4]==zhi1[4]&&zhi[5]==zhi1[5])
  109. {
  110. lv=0;
  111. hong=1;
  112. P0=0xff;
  113. for(i=0;i<6;i++)zhi[ i]=8;f=1;
  114. }
  115. else
  116. {
  117. hong=0;
  118. k--;
  119. x=0;P0=0xff;
  120. for(i=0;i<6;i++)zhi[ i]=10;
  121. }
  122. }

  123. }



  124. }

  125. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

沙发
ID:44267 发表于 2015-9-7 08:25 | 只看该作者
用单片机控制太阳能公路照明確保陰雨天晚上照明真是节能好帮手
回复

举报

板凳
ID:44267 发表于 2015-11-16 11:39 | 只看该作者
diy的精神让人钦佩
回复

举报

地板
ID:107947 发表于 2016-3-17 14:52 | 只看该作者
能具体解释下功能吗,比如初始密码是什么之类的
回复

举报

5#
ID:393296 发表于 2018-9-4 09:34 | 只看该作者
学学学 发表于 2016-3-17 14:52
**** 作者被禁止或删除 内容自动屏蔽 ****

数组里123456
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表