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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

實訓做的一個單片機密碼鎖程序及仿真,功能不多

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit RS = P1^0;
  5. sbit RW = P1^1;
  6. sbit EN = P1^2;
  7. sbit ledg=P1^3;                   //綠燈
  8. sbit ledr=P1^4;                   //紅燈
  9. sbit forward=P1^5;     //正轉
  10. sbit reversal=P1^6;    //反轉
  11. sbit braking=P1^7;           //制動
  12. char table0[]=" Unlock Failed ";
  13. char table1[]="Unlock Successed";
  14. char table2[]="Enter PS:";
  15. char table3[]="Wrong Password";
  16. int temp,ch,p;
  17. int n0,n1,n2,n3,n4,n5,n6; //6位密碼數

  18. //***延時函數***//
  19. void delay(int time)
  20. {
  21.         int t=0;
  22.         for(;time>0;time--)
  23.         for(t=0;t<300;t++);
  24. }

  25. //=====鍵盤部分=====//
  26. keyscan()
  27. {
  28.         temp=P2&0xf0;         //第1行鍵盤數,P2輸入
  29.         P2=0xfe;
  30.         delay(1);
  31.         temp=P2&0xf0;
  32.         while(temp!=0xf0)
  33.         {
  34.                 switch(temp)
  35.                 {
  36.                         case 0xe0:ch='1';break;
  37.                         case 0xd0:ch='2';break;
  38.                         case 0xb0:ch='3';break;
  39.                         default:ch=p; break;
  40.                  }
  41.                 while(temp!=0xf0)
  42.                 {
  43.                         temp=P2;
  44.                         temp=temp&0xf0;
  45.                  }
  46.         }
  47.         P2=0xfd;     //第2行鍵盤數
  48.         delay(1);
  49.         temp=P2&0xf0;
  50.         while(temp!=0xf0)
  51.         {
  52.                 switch(temp)
  53.                 {
  54.                         case 0xe0:ch='4';break;
  55.                         case 0xd0:ch='5';break;
  56.                         case 0xb0:ch='6';break;
  57.                         default:ch=p;break;
  58.                 }
  59.                 while(temp!=0xf0)
  60.                 {
  61.                         temp=P2;
  62.                         temp=temp&0xf0;
  63.                 }
  64.         }
  65.         P2=0xfb;      //第3行鍵盤數
  66.         delay(1);
  67.         temp=P2&0xf0;
  68.         while(temp!=0xf0)
  69.         {
  70.             switch(temp)
  71.                 {
  72.                         case 0xe0:ch='7';break;
  73.                         case 0xd0:ch='8';break;
  74.                         case 0xb0:ch='9';break;
  75.                         default:ch=p;break;
  76.                 }
  77.                 while(temp!=0xf0)
  78.                 {
  79.                         temp=P2;
  80.                         temp=temp&0xf0;
  81.                 }
  82.         }
  83.         P2=0xf7;                 //第4行鍵盤數
  84.         delay(1);
  85.         temp=P2&0xf0;
  86.         while(temp!=0xf0)
  87.         {
  88.                 switch(temp)
  89.                 {
  90.                         case 0xe0:ch='*';break;       
  91.                         case 0xd0:ch='0';break;
  92.                         case 0xb0:ch='#';break;       
  93.                         default:ch=p;break;
  94.                 }
  95.                 while(temp!=0xf0)
  96.                 {
  97.                         temp=P2;
  98.                         temp=temp&0xf0;
  99.                 }
  100.         }
  101.         return ch;
  102. }

  103. //=====LCD液晶部分=====//
  104. //***寫指令函數***//
  105. void LCDWrite(uchar com)//顯示
  106. {
  107.         P0=com;                  //送出指令
  108.         RS=0;RW=0;EN=1;   //寫指令時序
  109.         delay(10);
  110.         EN=0;
  111. }

  112. //***寫數據函數***//
  113. void LCDData(uchar dat)//輸入
  114. {
  115.         P0=dat;                    //送出數據
  116.         RS=1;RW=0;EN=1; //寫數據時序       
  117.         delay(10);
  118.         EN=0;
  119. }

  120. //***屏幕初始化函數***//
  121. void init()
  122. {
  123.         LCDWrite(0x01);         //清屏
  124.         LCDWrite(0x38);         //設置16*2顯示,5*7點陣,8位數據接口
  125.         LCDWrite(0x0f);         //開顯示,光標閃爍,顯示光標
  126.         LCDWrite(0x06);         //地址加1,整屏右移       
  127. }

  128. //***數字變為'*'函數***//
  129. change(int m)                        //輸入數字延時后變為*
  130. {
  131.         delay(200);
  132.         LCDWrite(m);
  133.         LCDData('*');
  134. }
  135.        
  136. //***字幕顯示調用函數***//
  137. void ps()                                         //輸入密碼界面"Enter PS:"
  138. {
  139.         char d1;
  140.         LCDWrite(0x80);                         //第1行第1個字符開始顯示
  141.         for(d1=0;d1<9;d1++)
  142.         {
  143.                 LCDData(table2[d1]);
  144.         }
  145. }
  146. void error()                                 //密碼錯誤時調用顯示"Unlock Failed"
  147. {   char d1;                 //液晶屏幕第1行
  148.         LCDWrite(0x01);                         //清屏
  149.         LCDWrite(0x81);          //第1行第1個字符開始顯示
  150.         for(d1=0;d1<13;d1++)     //字符字數
  151.         {
  152.                 LCDData(table0[d1]); //顯示調用table0
  153.         }
  154.        
  155. }
  156. void error1()                                 //密碼錯誤時調用顯示"Wrong Password"
  157. {   char d2;                 //液晶屏幕第2行
  158.         LCDWrite(0xc1);          //第2行第2個字符開始顯示
  159.         for(d2=0;d2<14;d2++)      //字符字數
  160.         {
  161.                 LCDData(table3[d2]); //顯示調用table3
  162.         }       
  163. }
  164. void open()                                         //密碼正確時調用顯示"Unlock Successed"
  165. {
  166.         char d2;                                 
  167.         LCDWrite(0xc0);                         //第2行第1個字符開始顯示
  168.         for(d2=0;d2<16;d2++)
  169.         {
  170.                 LCDData(table1[d2]);
  171.         }
  172. }

  173. //===步進電機部分===//
  174. //***緊急制動子程序***//
  175. void stop()                              
  176. {
  177.         if(braking==0)
  178.         {  
  179.            if(braking==0)
  180.            while(!braking)
  181.              {P3=0xff;}
  182.          }  
  183. }

  184. //===正反轉子程序===//
  185. void zfz()                              
  186. {  int i;
  187.    if(!forward&&ledg==1)                          //正轉
  188.    { delay(10);
  189.      while(!forward)
  190.          { stop();
  191.            for(i=0,P3=0x01;i<4;i++)
  192.                   { delay(90);
  193.                     P3=P3<<1;
  194.                   }
  195.          }
  196.    }
  197.    if(!reversal&&ledg==1)                                //反轉
  198.    { delay(10);
  199.      while(!reversal)
  200.          { stop();
  201.            for(i=0,P3=0xf7;i<4;i++)
  202.                   { delay(90);
  203.                     P3=P3>>1;
  204.                   }
  205.          }
  206.    }
  207. }

  208. //=====主函數=====//
  209. //***程序初始化***//
  210. void main()
  211. {
  212.         RW=0;
  213.         ledg=0;                   //綠燈
  214.         ledr=0;                   //紅燈               
  215.         init();
  216.         stop();
  217.         zfz();
  218.         delay(5);
  219.         ps();

  220. //***按鍵,屏幕關聯函數***//
  221. //*密碼1*//
  222.         LCDWrite(0x89);            //第1行第10個字符位置顯示
  223.         while(keyscan()==p)
  224.         {
  225.                 delay(3);
  226.                 keyscan();
  227.         }
  228.         LCDData(keyscan());        //第1行第10個字符位置輸入
  229.         n0=keyscan();                //第1個密碼
  230.         ch=p;
  231.         change(0x89);                //數字變*函數調用       
  232.     delay(1);
  233. //*密碼2*//
  234.         LCDWrite(0x8a);               
  235.         while(keyscan()==p)
  236.         {
  237.                 delay(3);
  238.                 keyscan();
  239.         }
  240.         LCDData(keyscan());         
  241.         n1=keyscan();
  242.         ch=p;               
  243.         change(0x8a);
  244.         delay(1);
  245. //*密碼3*//
  246.         LCDWrite(0x8b);               
  247.         while(keyscan()==p)
  248.         {
  249.                 delay(3);
  250.             keyscan();
  251.         }
  252.         LCDData(keyscan());   
  253.         n2=keyscan();                  
  254.     ch=p;
  255.         change(0x8b);
  256.         delay(1);
  257. //*密碼4*//
  258.         LCDWrite(0x8c);                  
  259.         while(keyscan()==p)
  260.         {
  261.                 delay(3);
  262.                 keyscan();
  263.         }
  264.         LCDData(keyscan());       
  265.         n3=keyscan();
  266.         ch=p;
  267.         change(0x8c);
  268.         delay(1);       
  269. //*密碼5*//
  270.         LCDWrite(0x8d);               
  271.         while(keyscan()==p)
  272.         {
  273.                 delay(3);
  274.                 keyscan();
  275.         }
  276.         LCDData(keyscan());       
  277.         n4=keyscan();
  278.         ch=p;
  279.         change(0x8d);
  280.         delay(1);               
  281. //*密碼6*//
  282. ……………………

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

所有資料51hei提供下載:
程序及仿真.zip (43.75 KB, 下載次數: 28)



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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九亚洲 | 精品亚洲一区二区 | 亚洲免费在线视频 | 免费黄色大片 | 手机看片在线播放 | 亚洲一区二区三区在线播放 | 色综合一区二区 | 久久久久久久久久久蜜桃 | 亚洲天堂中文字幕 | 日本 欧美 三级 高清 视频 | 成人不卡视频 | 中文字幕在线欧美 | 久久久久精 | 一级欧美黄色片 | 一区二区三区在线 | 2022国产精品 | 99视频在线免费观看 | 精品国产乱码久久久久久中文 | 亚洲最色视频 | 欧美成年人视频在线观看 | 国产精品久久久久久久岛一牛影视 | 国产国拍亚洲精品av | 在线观看成人精品 | 亚洲综合99 | 久久久精品一区 | 国产精品网址 | 日韩精品一区二区三区免费视频 | 狠狠av | 亚洲欧美日本在线 | 精品一区电影 | 亚洲欧美网站 | 日韩在线视频一区二区三区 | 人人操日日干 | 久干网| 亚洲国产日韩一区 | 久久精品亚洲精品国产欧美 | 国产一区二区三区在线观看免费 | 青青久在线视频 | 中文字幕视频在线观看 | 国家一级黄色片 | 亚洲一二三在线 |