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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3067|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)密碼鎖仿真-我的課程設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

密碼鎖仿真使用說明

一、 配鑰匙:
1、 打開仿真,把門鎖.hex和鑰匙.hex下載到相應(yīng)單片機(jī)里,單片機(jī)晶振都統(tǒng)一設(shè)置為12MHz,運(yùn)行仿真,可以看到門鎖的指示燈和鑰匙的指示燈都為熄滅狀態(tài)。此時門鎖為等待開門狀態(tài),兩把鑰匙為沒有注入開門密碼狀態(tài)。
2、 點(diǎn)擊、閉合1號開關(guān)(按按鍵右邊的小紅色箭頭),點(diǎn)擊一下1號鑰匙KEY2,此時可以看到1號鑰匙藍(lán)燈點(diǎn)亮,為等待注入數(shù)據(jù)狀態(tài)。
3、 點(diǎn)擊一下門鎖KEY1鍵,可以看到門鎖藍(lán)燈點(diǎn)亮,此時為即將注入數(shù)據(jù)狀態(tài)(也是刪除鑰匙的前一步,下面細(xì)說,跳過)。
4、 點(diǎn)擊一下門鎖KEY2鍵,可以看到1號鑰匙藍(lán)燈熄滅,黃燈點(diǎn)亮。此狀態(tài)表示數(shù)據(jù)注入成功。點(diǎn)擊、斷開1號開關(guān),點(diǎn)擊一下門鎖KEY3鍵,門鎖指示燈全部熄滅,此時門鎖回到等待開門狀態(tài)。點(diǎn)擊一下1號鑰匙KEY1,此時可以看到1號鑰匙綠燈點(diǎn)亮、黃燈熄滅。此時為鑰匙已經(jīng)注入開門密碼狀態(tài)。
5、 當(dāng)配第二把鑰匙時,重復(fù)以上過程即可,只是要把對1號開關(guān)、按鍵的操作改為2號開關(guān)、按鍵。(配鑰匙時,開關(guān)只能同時閉合一個)
二、 開門:
1、將注入過數(shù)據(jù)的1號鑰匙(綠燈點(diǎn)亮)的開關(guān)點(diǎn)擊、閉合。此時即可看到門鎖綠燈點(diǎn)亮,表示門鎖被打開。此時可以點(diǎn)擊、打開1號開關(guān),點(diǎn)擊一下門鎖KEY4鍵,門鎖綠燈熄滅,門鎖重新回到閉合狀態(tài),等待開門。
三、 刪除鑰匙
11號、2號開關(guān)為斷開狀態(tài),此時點(diǎn)擊一下門鎖KEY1鍵,可以看到門鎖藍(lán)燈點(diǎn)亮,
此時點(diǎn)擊一下門鎖KEY4鍵,即刪除了第一把所配的鑰匙,門鎖所有燈熄滅,回到等待開門狀態(tài)。(重復(fù)此動作,即可一次刪除第二把、第三把鑰匙。)
2、此后,點(diǎn)擊、閉合1號開關(guān)(剛才已經(jīng)注入過數(shù)據(jù)的那把鑰匙),可以看到門鎖紅燈點(diǎn)亮,蜂鳴器長叫,表示有人用已經(jīng)刪除的鑰匙開門,報警。此時,若斷開1號開關(guān),再點(diǎn)擊一下門鎖KEY4鍵,報警解除,門鎖又回到等待開門狀態(tài)。

注意:1、仿真不同于實(shí)物,操作數(shù)據(jù)無法關(guān)閉后無法保存,所以以上演示過程,仿真要一直運(yùn)行,關(guān)閉仿真后等于重新開始。
2、若配過鑰匙后,,斷開開關(guān)按門鎖復(fù)位鍵,可以恢復(fù)以前刪除的所有鑰匙。
3、同理,點(diǎn)擊一下鑰匙的復(fù)位鍵,也可以清楚已經(jīng)注入的數(shù)據(jù)。
4、點(diǎn)擊按鍵時,可以放大仿真窗口,方便操作。
      5、門鎖綠燈點(diǎn)亮,即為開門。
門鎖程序:
  1. #include<reg51.h>
  2. #define SL 60//同步信號低電平時間設(shè)定
  3. #define SH 60//同步信號高電平時間設(shè)定
  4. #define DH 15//數(shù)據(jù)信號高電平時間設(shè)定
  5. #define DL 2 //數(shù)據(jù)信號低電平時間松瓚?
  6. #define SLM 110//同步信號低電平最大時間設(shè)定
  7. #define SHM 110//同步信號高電平最大時間設(shè)定
  8. #define DHM 30//數(shù)據(jù)信號高電平最大時間設(shè)定
  9. #define DLM 13//數(shù)據(jù)信號低電平最大時間設(shè)定
  10. #define SL_F 140//同步信號低電平時間設(shè)定
  11. #define SH_F 140//同步信號高電平時間設(shè)定
  12. #define DH_F 80//數(shù)據(jù)信號高電平時間設(shè)定
  13. #define DL_F 30 //數(shù)據(jù)信號低電平時間設(shè)定
  14. sbit P10=P1^0;//輸入端口
  15. sbit P11=P1^1;//輸出端口
  16. sbit LED_G=P3^0;
  17. sbit LED_R=P3^1;
  18. sbit LED_Y=P3^2;
  19. sbit LED_B=P3^3;
  20. sbit sound=P2^0;
  21. sbit key_1=P0^0;
  22. sbit key_2=P0^1;
  23. sbit key_3=P0^2;
  24. sbit key_4=P0^3;
  25. unsigned char data_1,data_2,data_3,data_4;
  26. unsigned int e=0;
  27. unsigned char t=0;
  28. unsigned char h=0;
  29. unsigned char d=0;
  30. unsigned char c=0;
  31. bit                flag_1=0;
  32. bit                flag_2=0;
  33. bit                flag_3=0;
  34. bit                flag_4=0;
  35. void GET_DATA(void)//提取信息
  36. {

  37. for (h=0;h<8;h++)
  38. {
  39.    d<<=0x01;
  40.    t=0;

  41.    while(!P10);
  42.    while(P10&&t<DHM)//高電平計(jì)數(shù)
  43.     t++;
  44.    if (t>DL&&t<DLM)//時間在100us左右為 數(shù)據(jù)0
  45.     d|=0x00;
  46.    else
  47.     if (t>DH&&t<DHM)//時間在200us左右為 數(shù)據(jù)1
  48.      d|=0x01;
  49.     else
  50.      return ;//在高電平計(jì)數(shù)超過時,則認(rèn)為錯誤,退出  
  51. }
  52. data_1=d;

  53. for (h=0;h<8;h++)
  54. {
  55.    c<<=0x01;
  56.    t=0;

  57.    while(!P10);
  58.    while(P10&&t<DHM)//高電平計(jì)數(shù)
  59.     t++;
  60.    if (t>DL&&t<DLM)//時間在100us左右為 數(shù)據(jù)0
  61.     c|=0x00;
  62.    else
  63.     if (t>DH&&t<DHM)//時間在200us左右為 數(shù)據(jù)1
  64.      c|=0x01;
  65.     else
  66.      return ;//在高電平計(jì)數(shù)超過時,則認(rèn)為錯誤,退出  
  67. }
  68. data_2=c;
  69. }


  70. void SEND_SYN(void)//發(fā)送同步位
  71. {
  72. unsigned int k=0;
  73. P10=0;
  74. while(k<100)//每次發(fā)送一組數(shù)據(jù)前加入低電平,具體值看測試, 發(fā)現(xiàn)數(shù)據(jù)間間隔加大可以使錯誤率減小,通訊速率加快
  75.    k++;

  76. P10=1;//同步位高電平
  77. k=0;
  78. while(k<SL_F)//高電平1MS左右
  79.    k++;

  80. P10=0;//同步位低電平
  81. k=0;
  82. while(k<SH_F)//低電平1MS左右
  83.    k++;   
  84. }

  85. void SEND_DATA(unsigned char a,unsigned char b)//數(shù)據(jù)位發(fā)送
  86. {
  87. unsigned char i;
  88. unsigned char j;

  89. SEND_SYN();
  90. for (i=0;i<8;i++)//發(fā)送8位數(shù)據(jù)
  91. {
  92.    if (a&0x80)//從高位開始發(fā)送
  93.    {
  94.     P10=1;//如果是1則發(fā)送高電平200us
  95.     j=0;
  96.     while(j<DH_F)
  97.      j++;
  98.     P10=0;
  99.     j=0;
  100.     while(j<DL_F)//發(fā)送低電平100us
  101.      j++;
  102.    }
  103.    else
  104.    {
  105.     P10=1;//如果是0則發(fā)送高電平100us
  106.     j=0;
  107.     while(j<DL_F)
  108.      j++;
  109.     P10=0;
  110.     j=0;
  111.     while(j<DL_F)//發(fā)送低電平100us
  112.      j++;
  113.    }
  114.    a<<=0x01;
  115. }
  116. for (i=0;i<8;i++)//發(fā)送8位數(shù)據(jù)
  117. {
  118.    if (b&0x80)//從高位開始發(fā)送
  119.    {
  120.     P10=1;//如果是1則發(fā)送高電平200us
  121.     j=0;
  122.     while(j<DH_F)
  123.      j++;
  124.     P10=0;
  125.     j=0;
  126.     while(j<DL_F)//發(fā)送低電平100us
  127.      j++;
  128.    }
  129.    else
  130.    {
  131.     P10=1;//如果是0則發(fā)送高電平100us
  132.     j=0;
  133.     while(j<DL_F)
  134.      j++;
  135.     P10=0;
  136.     j=0;
  137.     while(j<DL_F)//發(fā)送低電平100us
  138.      j++;
  139.    }
  140.    b<<=0x01;
  141. }   
  142. }
  143. 鑰匙程序:
  144. #include<reg51.h>

  145. #define SL 60//同步信號低電平時間設(shè)定
  146. #define SH 60//同步信號高電平時間設(shè)定
  147. #define DH 15//數(shù)據(jù)信號高電平時間設(shè)定
  148. #define DL 2 //數(shù)據(jù)信號低電平時間松瓚?
  149. #define SLM 110//同步信號低電平最大時間設(shè)定
  150. #define SHM 110//同步信號高電平最大時間設(shè)定
  151. #define DHM 30//數(shù)據(jù)信號高電平最大時間設(shè)定
  152. #define DLM 13//數(shù)據(jù)信號低電平最大時間設(shè)定

  153. #define SL_F 140//同步信號低電平時間設(shè)定
  154. #define SH_F 140//同步信號高電平時間設(shè)定
  155. #define DH_F 80//數(shù)據(jù)信號高電平時間設(shè)定
  156. #define DL_F 30 //數(shù)據(jù)信號低電平時間松瓚?

  157. sbit key_1=P0^7;
  158. sbit key_2=P0^6;
  159. sbit LED_G=P3^2;
  160. sbit LED_Y=P3^1;
  161. sbit LED_B=P3^0;

  162. sbit P10=P1^0;//output pin
  163. sbit P11=P1^1;//input pin

  164. unsigned char data_1,data_2;
  165. unsigned int e=0;
  166. unsigned char t=0;
  167. unsigned char h=0;
  168. unsigned char d=0;
  169. unsigned char c=0;

  170. bit                flag_1=0;
  171. bit                flag_2=0;
  172. unsigned char addr_self[3]={0x35,0x52};        
  173. const unsigned  char CRC_TABLE[16]={0x00,0x31,0x62,0x53,0xC4,0xF5,0xA6,0x97,
  174.                                                               0xB9,0x88,0xDB,0xEA,0x7D,0x4C,0x1F,0x2E};
  175. /****************************************/
  176. /*功能:CRC_8校驗(yàn)                                                */
  177. /*入口:待校驗(yàn)的數(shù)據(jù)指針和數(shù)據(jù)長度            */
  178. /****************************************/
  179. void CalculateCRC8(unsigned char *PData,unsigned char Len)         //CRC校驗(yàn)子程序
  180. {
  181.          unsigned char Temp,CRC;
  182.         CRC=0;
  183.         while(Len--)
  184.         {
  185.                 Temp=CRC>>4;
  186.                 CRC<<=4;
  187.                 CRC^=CRC_TABLE[Temp^(*PData>>4)];

  188.                 Temp=CRC>>4;
  189.                 CRC<<=4;
  190.                 CRC^=CRC_TABLE[Temp^(*PData&0x0F)];
  191.                 PData++;
  192.         }
  193. }



  194. void GET_DATA(void)//提取信息
  195. {


  196. for (h=0;h<8;h++)
  197. {
  198.    d<<=0x01;
  199.    t=0;

  200.    while(!P10);
  201.    while(P10&&t<DHM)//高電平計(jì)數(shù)
  202.     t++;
  203.    if (t>DL&&t<DLM)//時間在100us左右為 數(shù)據(jù)0
  204.     d|=0x00;
  205.    else
  206.     if (t>DH&&t<DHM)//時間在200us左右為 數(shù)據(jù)1
  207.      d|=0x01;
  208.     else
  209.      return ;//在高電平計(jì)數(shù)超過時,則認(rèn)為錯誤,退出  
  210. }
  211. data_1=d;

  212. for (h=0;h<8;h++)
  213. {
  214.    c<<=0x01;
  215.    t=0;

  216.    while(!P10);
  217.    while(P10&&t<DHM)//高電平計(jì)數(shù)
  218.     t++;
  219.    if (t>DL&&t<DLM)//時間在100us左右為 數(shù)據(jù)0
  220.     c|=0x00;
  221.    else
  222.     if (t>DH&&t<DHM)//時間在200us左右為 數(shù)據(jù)1
  223.      c|=0x01;
  224.     else
  225.      return ;//在高電平計(jì)數(shù)超過時,則認(rèn)為錯誤,退出  
  226. }
  227. data_2=c;
  228. CalculateCRC8(addr_self,2);         //CRC校驗(yàn)
  229. }


  230. void SEND_SYN(void)//發(fā)送同步位
  231. {
  232. unsigned int k=0;
  233. P10=0;
  234. while(k<100)//每次發(fā)送一組數(shù)據(jù)前加入低電平,具體值看測試, 發(fā)現(xiàn)數(shù)據(jù)間間隔加大可以使錯誤率減小,通訊速率加快
  235.    k++;

  236. P10=1;//同步位高電平
  237. k=0;
  238. while(k<SL_F)//高電平1MS左右
  239.    k++;

  240. P10=0;//同步位低電平
  241. k=0;
  242. while(k<SH_F)//低電平1MS左右
  243.    k++;   
  244. }

  245. void SEND_DATA(unsigned char a,unsigned char b)//數(shù)據(jù)位發(fā)送
  246. {
  247. unsigned char i;
  248. unsigned char j;
  249. CalculateCRC8(addr_self,2);         //CRC校驗(yàn)
  250. SEND_SYN();
  251. for (i=0;i<8;i++)//發(fā)送8位數(shù)據(jù)
  252. {
  253.    if (a&0x80)//從高位開始發(fā)送
  254.    {
  255.     P10=1;//如果是1則發(fā)送高電平200us
  256.     j=0;
  257.     while(j<DH_F)
  258.      j++;
  259.     P10=0;
  260.     j=0;
  261.     while(j<DL_F)//發(fā)送低電平100us
  262.      j++;
  263.    }
  264.    else
  265.    {
  266.     P10=1;//如果是0則發(fā)送高電平100us
  267.     j=0;
  268.     while(j<DL_F)
  269.      j++;
  270.     P10=0;
  271.     j=0;
  272.     while(j<DL_F)//發(fā)送低電平100us
  273.      j++;
  274.    }
  275.    a<<=0x01;
  276. }
  277. for (i=0;i<8;i++)//發(fā)送8位數(shù)據(jù)
  278. {
  279.    if (b&0x80)//從高位開始發(fā)送
  280.    {
  281.     P10=1;//如果是1則發(fā)送高電平200us
  282.     j=0;
  283.     while(j<DH_F)
  284.      j++;
  285.     P10=0;
  286.     j=0;
  287.     while(j<DL_F)//發(fā)送低電平100us
  288.      j++;
  289.    }
  290.    else
  291.    {
  292.     P10=1;//如果是0則發(fā)送高電平100us
  293.     j=0;
  294.     while(j<DL_F)
  295.      j++;
  296.     P10=0;
  297.     j=0;
  298.     while(j<DL_F)//發(fā)送低電平100us
  299.      j++;
  300.    }
  301.    b<<=0x01;
  302. }

  303. }
  304. void main(void)
  305. {

  306. key_1=1;
  307. key_2=1;
  308. LED_G=0;
  309. LED_Y=0;
  310. LED_B=0;

  311. while(1)
  312. {
  313.         if(flag_1==0&&flag_2==0)
  314.         {
  315.                 if(data_2==0xab)
  316.                 LED_G=1;
  317.                 else
  318.                 LED_G=0;

  319.             SEND_DATA(data_1,data_2);
  320.                 P10=1;
  321.     }



  322.                   if(key_2==0)
  323.         {
  324.                 while(key_2==0);
  325.                  flag_1=1;
  326.                   LED_B=1;
  327.                   LED_G=0;
  328.         
  329.     }
  330.         if(key_1==0&&flag_2==1)
  331.         {
  332.                 while(key_1==0);
  333.                  
  334.                   LED_Y=0;
  335.                   flag_2=0;
  336.     }
  337.         if(flag_1==1)

  338.         {
  339.                 while(!P10);                 
  340.                  e=0;
  341.                  while(P10&&(e<SHM))//對高電平計(jì)數(shù)
  342.                  e++;        
  343.                  if ((e>SH)&&(e<SHM))// 如果時間為1000us左右則進(jìn)行低電平檢測
  344.                  {  
  345.                     e=0;
  346.                     while(!P10&&(e<SHM))//對低電平計(jì)數(shù)
  347.                     e++;
  348.         
  349.             if ((e>SL)&&(e<SHM))//如果低電平時間為1000us左右則認(rèn)為同步位正確,接收數(shù)據(jù)
  350.             {
  351.         
  352.              GET_DATA();
  353.                  if(data_2==0xaa)
  354.                  {
  355.                          LED_Y=1;
  356.                    LED_B=0;
  357.                    flag_1=0;
  358.                    flag_2=1;
  359.                    data_2=data_2+1;

  360.                   }

  361.             }
  362.           }

  363.          }
  364. }
  365. }
  366. void main(void)
  367. {

  368.         LED_G=0;
  369.         LED_R=0;
  370.         LED_Y=0;
  371.         LED_B=0;

  372.         while(1)
  373.         {
  374.                   if(flag_1==0)
  375.                   { while(!P10)

  376.                     e=0;
  377.                    while(P10&&(e<SHM))//對高電平計(jì)數(shù)
  378.              e++;        
  379.              if ((e>SH)&&(e<SHM))// 如果時間為1000us左右則進(jìn)行低電平檢測
  380.              {  
  381.                     e=0;
  382.                     while(!P10&&(e<SHM))//對低電平計(jì)數(shù)
  383.                      e++;
  384.         
  385.                     if ((e>SL)&&(e<SHM))//如果低電平時間為1000us左右則認(rèn)為同步位正確,接收數(shù)據(jù)
  386.                     {
  387.         
  388.                      GET_DATA();
  389.                          if(data_1>data_4&&data_2==0xab)
  390.                           {
  391.                                 LED_G=1;
  392.                                    LED_R=0;
  393.                         }
  394.                          if(data_1<=data_4&&data_2==0xab)
  395.                           {
  396.                                 LED_G=0;
  397.                                    LED_R=1;
  398.                                 flag_4=1;

  399.                         }
  400.         
  401.                     }
  402.                    }
  403.                  }
  404.                    if(flag_4==1)
  405.                    sound=~sound;




  406.                          if(key_1==0&&flag_1==0)
  407.                         {
  408.                         LED_B=1;
  409.                         while(key_1==0);                        
  410.                         flag_1=1;
  411.                         LED_G=0;
  412.                         LED_R=0;
  413.                         flag_4=0;
  414.                         sound=0;
  415.                     }


  416.                          if(key_2==0&&flag_1&&flag_2==0)
  417.                         {

  418.                         LED_Y=1;
  419.                         while(key_1==0);                        
  420.                         LED_Y=0;
  421.                         data_3++;
  422.                     SEND_DATA(data_3,0xaa);
  423.                         P10=1;
  424.                         
  425.                         flag_2=1;

  426.                     }
  427.                         if(key_3==0&&flag_1)
  428.                         {
  429.                         LED_B=1;
  430.                         while(key_1==0);
  431.                         LED_B=0;
  432.                         LED_G=0;
  433.                         LED_Y=0;                        
  434.                         flag_1=0;
  435.                         flag_2=0;
  436.                     }
  437.                         if(key_4==0&&flag_1&&flag_2==0)
  438.                         {                        
  439.                          while(key_4==0);
  440.                          data_4++;
  441.                         LED_B=0;
  442.                         LED_G=0;
  443.                         LED_Y=0;                        
  444.                         flag_1=0;
  445.                         flag_2=0;
  446.                         }
  447.                         if(key_4==0&&flag_1==0&&flag_2==0)
  448.                         {
  449.                                 LED_R=0;
  450.                                 LED_B=0;
  451.                                 LED_G=0;
  452.                                 LED_Y=0;
  453.                                 flag_4=0;
  454.                                 sound=0;                        
  455.                         }






  456.         }
  457. }
復(fù)制代碼



全部資料51hei下載地址:
密碼鎖仿真所有資料.zip (77.32 KB, 下載次數(shù): 22)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-7-1 02:15 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 性在线| 婷婷一级片| 毛片一区二区 | 玖玖综合在线 | 成人精品视频免费 | 久久国产精品视频 | 国产成人在线视频 | 日韩精品免费播放 | 天堂在线91 | 国产精品一区久久久 | 国产高潮好爽受不了了夜色 | 亚洲一区二区 | 国产激情一区二区三区 | 精品久久久久久久久久久久久久 | 男人的天堂在线视频 | 日韩精品一区二区三区中文字幕 | 在线一区 | 免费视频99 | 91一区二区三区 | 国产精品一区二区三区在线 | 久久九精品 | 午夜免费网站 | 久久久国产一区二区三区 | 羞视频在线观看 | 91网在线观看 | 伊人久久免费 | 久久久一区二区 | 亚洲视频免费在线观看 | 国产sm主人调教女m视频 | 小早川怜子xxxxaⅴ在线 | 爱爱小视频 | 亚洲一区二区在线视频 | 国产精品亚洲精品 | 青青久草 | 欧美群妇大交群中文字幕 | 国产精品久久久久久福利一牛影视 | 久久99深爱久久99精品 | 91麻豆精品国产91久久久久久久久 | 久久久精品影院 | 日韩免费 | 精品九九|