找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3371|回复: 0
收起左侧

PIC18F452单片机proteus仿真 密码锁程序

[复制链接]
ID:724118 发表于 2020-5-31 18:04 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

仿真图

仿真图



单片机源码:
  1. #include <p18F452.h>       //调用头文件
  2. #include<string.h>

  3. #define RB0  PORTBbits.RB0         
  4. #define RB1  PORTBbits.RB1  
  5. #define RB2  PORTBbits.RB2  
  6. #define RB3  PORTBbits.RB3  
  7. #define RB4  PORTBbits.RB4  
  8. #define RB5  PORTBbits.RB5  
  9. #define RB6  PORTBbits.RB6  
  10. #define RB7  PORTBbits.RB7  



  11. /*定义密码*/
  12. char password1[9]={'1','2','3','4','5','6','B','A','\0'
  13. };

  14. unsigned int VALUE[]=
  15. { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,16};
  16. const unsigned char LED[17]=
  17. {
  18. 0x80,          //.
  19. 0x3f,     //0
  20. 0x06,     //1
  21. 0x5b,          //2
  22. 0x4f,          //3
  23. 0x66,          //4
  24. 0x6d,          //5
  25. 0x7d,          //6
  26. 0x07,          //7
  27. 0x7f,          //8
  28. 0x6f,          //9
  29. 0x77,          //A
  30. 0x7c,          //b
  31. 0x39,          //C
  32. 0x5e,          //d
  33. 0x79,          //E
  34. 0x71,     //F
  35. };

  36. int i,j,k,wei,t,m;
  37. char x[9]={'0','0','0','0','0','0','0','0','\0'};

  38. void key(void);        //按键扫描
  39. void choose(void);     //按键确定
  40. void delay(void);      //延时
  41. char turn(char z);     //将asca值转化为字符类型值
  42. void reset(void);      //重置


  43. //---------------------------------------
  44. //名称: 主函数                 
  45. //-----------------------------------------
  46. void main(void)
  47. {        
  48.          

  49.           TRISB=0B11110000;           //RC高四位输入,低四位输出
  50.         TRISD=0B00000000;           //RD设置为输出
  51.         TRISC=0B00000000;
  52.         PORTD=0B00000000;       //
  53.         PORTC=0B00000000;
  54.         j=0;
  55.         wei=0;
  56.         

  57.         while(1)
  58.           {         
  59.         
  60.         if(wei==1){
  61.            PORTC=0B00000000;
  62.            
  63.         }
  64.         if(wei==2){
  65.            PORTC=0B00000001;
  66.         }
  67.         if(wei==3){
  68.            PORTC=0B00000010;
  69.         }
  70.         if(wei==4){
  71.            PORTC=0B00000011;
  72.         }
  73.         if(wei==5){
  74.            PORTC=0B00000100;
  75.         }
  76.         if(wei==6){
  77.            PORTC=0B00000101;
  78.         }
  79.         if(wei==7){
  80.            PORTC=0B00000110;
  81.         }
  82.         if(wei==8){
  83.             PORTC=0B00000111;
  84.         }
  85.         if(k==16){               //按F  重置
  86.          reset();
  87.            }
  88.         key();
  89.         PORTD=LED[k];
  90.         x[wei-1]=turn(k-1);
  91.         //PORTCbits.RC7=1;
  92.         
  93.         if(strcmp(x,password1)==0 && wei==8){
  94.          PORTCbits.RC7=1;
  95.            }
  96.         
  97.         
  98.         }         
  99.                                     
  100. }

  101. void choose()
  102. {
  103.         if(RB4==0){
  104.            delay();
  105.            if(RB4==0){
  106.                j=VALUE[i];
  107.                wei++;
  108.                while(!RB4);
  109.                delay();
  110.                while(!RB4);
  111.               }
  112.         }
  113.    else if(RB5==0){
  114.       delay();
  115.            if(RB5==0){
  116.                j=VALUE[i+1];
  117.                wei++;
  118.                while(!RB5);
  119.                delay();
  120.                while(!RB5);
  121.               }
  122.    }
  123.    else if(RB6==0){
  124.            delay();
  125.            if(RB6==0){
  126.                j=VALUE[i+2];
  127.                wei++;
  128.                while(!RB6);
  129.                delay();
  130.                while(!RB6);
  131.               }
  132.    }
  133.    else if(RB7==0){
  134.           delay();
  135.            if(RB7==0){
  136.                j=VALUE[i+3];
  137.                wei++;
  138.                while(!RB7);
  139.                delay();
  140.                while(!RB7);
  141.               }
  142.    }
  143.    k=j;
  144.    Nop();
  145. }


  146. void key()
  147. {     

  148.        RB0=0,RB1=1,RB2=1,RB3=1;
  149.        i=0;
  150.        choose();
  151.        RB0=1,RB1=0,RB2=1,RB3=1;
  152.        i=4;
  153.        choose();
  154.        RB0=1,RB1=1,RB2=0,RB3=1;
  155.        i=8;
  156.        choose();
  157.        RB0=1,RB1=1,RB2=1,RB3=0;
  158.        i=12;
  159.        choose();
  160.          
  161.        Nop();
  162. }

  163. void delay(){
  164.     for(t=2;t>0;t--)
  165.       for(m=100;m>0;m--);
  166.    }

  167. char turn(char z)
  168. {
  169.       if(z>=0 && z<=0x09)  return z+'1'-1;
  170.       if(z>=0X0A && z<=0x0F)  return z+'A'-10;
  171.    }

  172. void reset(void)
  173. {
  174.       PORTD=0B00000000;       //
  175.       PORTC=0B00000000;
  176.       j=0;
  177.       wei=0;
  178.       x[0]='0';
  179.       x[1]='0';
  180.       x[2]='0';
  181.       x[3]='0';
  182.       x[4]='0';
  183.       x[5]='0';
  184.       x[6]='0';
  185.       x[7]='0';
  186.       x[8]='\0';
  187.       i=0;

  188.       k=0;
  189.    }
复制代码
全部资料51hei下载地址:
password.rar (90.39 KB, 下载次数: 55)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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