久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3526|回復: 2
打印 上一主題 下一主題
收起左側

基于C51單片機的密碼鎖代碼

[復制鏈接]
跳轉到指定樓層
樓主
分享一個密碼鎖的小程序


單片機源代碼如下:
  1. #include<reg51.h>        //  包含51單片機寄存器定義的頭文件
  2. unsigned char ID;    //儲存流水燈的流動速度
  3. sbit S1=P1^4;          //位定義S1為P1.4

  4. /**************************************************************
  5. 函數功能:延時子程序
  6. **************************************************************/
  7. void delay(void)    //因為僅對一個按鍵掃描,所以延時時間較長約200ms
  8. {
  9.   unsigned char i,j;
  10.   for(i=0;i<200;i++)
  11.    for(j=0;j<100;j++)
  12.            ;
  13. }


  14. /**************************************************************
  15. 函數功能:主函數
  16. **************************************************************/
  17. void main(void)
  18. {
  19.    TMOD=0x02;     //使用定時器T0的模式2
  20.           EA=1;          //開總中斷
  21.         ET0=1;         //定時器T0中斷允許
  22.         TR0=1;         //定時器T0開始運行
  23.         TH0=256-200;   //定時器T0賦初值,每200微妙來1次中斷請求
  24.         TL0=256-200;

  25.   ID=0;
  26.    while(1)
  27.           {
  28.                   switch(ID)
  29.             {
  30.               case 0: P3=0xfe;
  31.                       break;
  32.                                   case 1: P3=0xfd;
  33.                       break;
  34.                                   case 2: P3=0xfb;
  35.                       break;
  36.                                   case 3: P3=0xf7;
  37.                       break;            
  38.             }
  39.      }
  40.    }
  41. /**************************************************************
  42. 函數功能:定時器T0的中斷服務子程序,進行鍵盤掃描
  43. **************************************************************/
  44. void intersev(void) interrupt 1 using 1
  45. {
  46.   TR0=0;  //關閉定時器T0
  47.   P1=0xff;
  48.   if(S1==0)       //如果是按鍵S1按下
  49.     {
  50.            delay();       //延時20ms,軟件消抖
  51.             if(S1==0)       //如果是按鍵S1按下
  52.                    ID=ID+1;
  53.           }   
  54.         if(ID==4)
  55.            ID=0;       

  56.           TR0=1;               //啟動定時器T0

  57. }


  58. #include<reg51.h>   //包含51單片機寄存器定義的頭文件
  59. sbit P14=P1^4;      //將P14位定義為P1.4引腳
  60. sbit P15=P1^5;      //將P15位定義為P1.5引腳
  61. sbit P16=P1^6;      //將P16位定義為P1.6引腳
  62. sbit P17=P1^7;      //將P17位定義為P1.7引腳
  63. sbit sound=P3^7;    //將sound位定義為P3.7
  64. unsigned char keyval;    //儲存按鍵值
  65. /**************************************************************
  66. 函數功能:延時輸出音頻
  67. **************************************************************/
  68. void delay(void)   
  69. {
  70.    unsigned char i;
  71.         for(i=0;i<200;i++)
  72.                  ;
  73. }

  74. /**************************************************************
  75. 函數功能:軟件延時子程序
  76. **************************************************************/
  77. void delay20ms(void)   
  78. {
  79.    unsigned char i,j;
  80.         for(i=0;i<100;i++)
  81.          for(j=0;j<60;j++)
  82.            ;
  83. }
  84. /**************************************************************
  85. 函數功能:主函數
  86. **************************************************************/
  87. void main(void)
  88. {
  89.    unsigned char D[ ]={0,8,0,8,7,4,11};      //設定密碼
  90.    EA=1;                  //開總中斷
  91.         ET0=1;                 //定時器T0中斷允許         
  92.         TMOD=0x01;            //使用定時器T0的模式1
  93.         TH0=(65536-500)/256;  //定時器T0的高8位賦初值
  94.         TL0=(65536-500)%256;  //定時器T0的高8位賦初值
  95.         TR0=1;                //啟動定時器T0
  96.         keyval=0xff;          //按鍵值初始化
  97.        
  98.         while(keyval!=D[0])   //第一位密碼輸入不正確,等待
  99.              ;                 
  100.         while(keyval!=D[1])   //第二位密碼輸入不正確,等待
  101.              ;
  102.         while(keyval!=D[2])   //第三位密碼輸入不正確,等待
  103.              ;       
  104.         while(keyval!=D[3])   //第四位密碼輸入不正確,等待
  105.              ;
  106.         while(keyval!=D[4])   //第五位密碼輸入不正確,等待
  107.              ;
  108.         while(keyval!=D[5])   //第六位密碼輸入不正確,等待
  109.              ;   
  110.         while(keyval!=D[6])  //沒有輸入"OK",等待
  111.            ;                 
  112.          P3=0xfe;           //P3.0引腳輸出低電平,點亮LED

  113. }
  114. /**************************************************************
  115. 函數功能:定時器0的中斷服務子程序,進行鍵盤掃描,判斷鍵位
  116. **************************************************************/
  117.   void time0_interserve(void) interrupt 1 using 1    //定時器T0的中斷編號為1,使用第一組寄存器
  118.   {
  119.      unsigned char i;
  120.      TR0=0;                  //關閉定時器T0          
  121.      P1=0xf0;                 //所有行線置為低電平"0",所有列線置為高電平"1"
  122.           if((P1&0xf0)!=0xf0)      //列線中有一位為低電平"0",說明有鍵按下
  123.              delay20ms();           //延時一段時間、軟件消抖
  124.           if((P1&0xf0)!=0xf0)      //確實有鍵按下
  125.             {
  126.                P1=0xfe;             //第一行置為低電平"0"(P1.0輸出低電平"0")
  127.                if(P14==0)           //如果檢測到接P1.4引腳的列線為低電平"0"
  128.              keyval=1;            //可判斷是S1鍵被按下
  129.            if(P15==0)             //如果檢測到接P1.5引腳的列線為低電平"0"
  130.              keyval=2;            //可判斷是S2鍵被按下
  131.            if(P16==0)             //如果檢測到接P1.6引腳的列線為低電平"0"
  132.              keyval=3;            //可判斷是S3鍵被按下
  133.            if(P17==0)            //如果檢測到接P1.7引腳的列線為低電平"0"
  134.              keyval=4;           //可判斷是S4鍵被按下

  135.            P1=0xfd;             //第二行置為低電平"0"(P1.1輸出低電平"0")
  136.               if(P14==0)           //如果檢測到接P1.4引腳的列線為低電平"0"
  137.              keyval=5;            //可判斷是S5鍵被按下
  138.            if(P15==0)             //如果檢測到接P1.5引腳的列線為低電平"0"
  139.              keyval=6;            //可判斷是S6鍵被按下
  140.            if(P16==0)             //如果檢測到接P1.6引腳的列線為低電平"0"
  141.              keyval=7;            //可判斷是S7鍵被按下
  142.            if(P17==0)            //如果檢測到接P1.7引腳的列線為低電平"0"
  143.              keyval=8;           //可判斷是S8鍵被按下
  144.                
  145.            P1=0xfb;             //第三行置為低電平"0"(P1.2輸出低電平"0")
  146.             if(P14==0)          //如果檢測到接P1.4引腳的列線為低電平"0"
  147.              keyval=9;          //可判斷是S9鍵被按下
  148.            if(P15==0)           //如果檢測到接P1.5引腳的列線為低電平"0"
  149.              keyval=0;         //可判斷是S10鍵被按下
  150.            if(P16==0)          //如果檢測到接P1.6引腳的列線為低電平"0"
  151.              keyval=11;        //可判斷是S11鍵被按下
  152.        if(P17==0)          //如果檢測到接P1.7引腳的列線為低電平"0"
  153.                                      keyval=12;        //可判斷是S12鍵被按下
  154.                        
  155.                                    P1=0xf7;             //第四行置為低電平"0"(P1.3輸出低電平"0")
  156. ……………………

  157. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
密碼鎖.rar (9.75 KB, 下載次數: 18)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:344774 發表于 2018-6-6 13:15 | 只看該作者
怎么沒有
回復

使用道具 舉報

板凳
ID:344774 發表于 2018-6-6 13:16 | 只看該作者
什么情況?我點下載附件了,結果什么都沒下載下來,還扣了我的積分
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区四区 | 最近免费日本视频在线 | 国产成人免费视频网站高清观看视频 | 日韩高清中文字幕 | 99爱在线| 欧美综合在线视频 | 天堂在线1 | 成人性生交大片免费看r链接 | 国产成人自拍一区 | 巨大荫蒂视频欧美另类大 | 天天拍天天射 | 日韩在线视频一区 | av资源网站 | 中文字幕在线观看 | 欧美亚洲国产一区二区三区 | 国产一区2区 | 青娱乐国产 | 97av视频在线| 91香蕉 | 自拍偷拍视频网 | 日韩国产在线 | 国产资源在线观看 | 日韩视频在线一区 | 亚洲精品一区二区 | 麻豆精品一区二区三区在线观看 | 在线视频成人 | 日韩激情网 | 日本综合在线观看 | 久久久精品视频一区二区三区 | 成人精品一区二区三区中文字幕 | 岛国毛片在线观看 | 欧美三级免费观看 | 成人自拍视频网站 | 蜜桃视频在线观看免费视频网站www | 一级a爱片性色毛片免费 | 婷婷久久五月天 | 中文字幕视频在线看5 | 爱草在线| 精品一区二区三区四区在线 | 国产成人jvid在线播放 | 欧美精品福利 |