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

標題: 單片機按鍵密碼鎖源代碼 [打印本頁]

作者: niujia    時間: 2015-7-15 23:08
標題: 單片機按鍵密碼鎖源代碼
電路圖:http://www.zg4o1577.cn/f/51hei-5.pdf


源代碼:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. #define KeyPort P1

  5. sbit Dula=P2^2;   //段選
  6. sbit Wela=P2^3;   //位選
  7. sbit Led =P2^0;

  8. uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   //段碼
  9. uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};      //位碼
  10. uchar password[8];
  11. uchar dis_smg[8];
  12. bit Flag=0;

  13. uchar KeyScan(void);
  14. uchar KeyPro(void);

  15. /**********************************************************************************
  16. *************************  延 時 函 數   ******************************************
  17. ***********************************************************************************/
  18. void delayus(uchar t)
  19. {
  20. while(--t);
  21. }

  22. void delayms(uchar t)
  23. {
  24. while(t--)
  25. {
  26.   delayus(245);
  27.   delayus(245);
  28. }
  29. }

  30. /**********************************************************************************
  31. *************************  顯 示 函 數   ******************************************
  32. ***********************************************************************************/
  33. void Display(uchar Firstbit ,uchar Num)
  34. {
  35. static uchar i;

  36. P0=0x00;
  37. Dula=1;Dula=0;

  38. P0=smg_we[i+Firstbit];
  39. Wela=1;Wela=0;

  40. P0=dis_smg[i];
  41. Dula=1;Dula=0;

  42. i++;
  43. if(i==Num)
  44.   i=0;
  45. }

  46. /**********************************************************************************
  47. ***************************  定時初始化   ******************************************
  48. ***********************************************************************************/
  49. void Timer0_Init(void)
  50. {
  51. TMOD|=0X01;
  52. TR0=1;
  53. ET0=1;
  54. EA=1;
  55. }

  56. /**********************************************************************************
  57. *************************  設 置 密 碼   ******************************************
  58. ***********************************************************************************/
  59. void SetPassword(uchar KeyNum)
  60. {
  61. static uchar i=0;
  62. uchar j,n;
  63. uchar tempcode[8];
  64. if((KeyNum>=0)&&(KeyNum<=9))
  65. {
  66.   Led=1;
  67.   if(i==0)
  68.   {      
  69.    for(j=0;j<8;j++)
  70.    tempcode[j]=0;
  71.   }
  72.   if(i<8)
  73.   {
  74.    tempcode[i]=smg_du[KeyNum];
  75.    for(j=0;j<=i;j++)
  76.      dis_smg[7-i+j]=tempcode[j];
  77.   }
  78.   i++;
  79.   if(i==8)
  80.    i=0;
  81. }
  82. if(KeyNum==15)      //密碼修改確認鍵
  83. {
  84.   KeyNum=0xff;
  85.   for(n=0;n<8;n++)
  86.   {
  87.     password[n]=tempcode[n];
  88.     dis_smg[n]=0;
  89.   }
  90.   dis_smg[0]=0x3f;
  91.   dis_smg[1]=0x76;
  92.   Flag=0;
  93.   i=0;      //靜態變量清零,下次進入時可以從新開始
  94. }
  95. }

  96. /**********************************************************************************
  97. *************************  輸 入 密 碼   ******************************************
  98. ***********************************************************************************/
  99. void KeyControl(uchar Keynum)
  100. {
  101. static uchar i=0;
  102. uchar j;
  103. uchar temp[8];
  104. bit flag;
  105. if((Keynum>=0)&&(Keynum<=9))    //數字輸入按鍵
  106. {
  107.   Led=0;
  108.   if(i==0)
  109.   {   
  110.    
  111.    for(j=0;j<8;j++)
  112.    dis_smg[j]=0;
  113.   }
  114.   if(i<8)
  115.   {
  116.    temp[i]=smg_du[Keynum];
  117.    for(j=0;j<=i;j++)
  118.     dis_smg[7-i+j]=temp[j];
  119.   }
  120.   i++;
  121.   if(i==8)
  122.    i=0;
  123. }
  124. if(Keynum==15)       //確認鍵
  125. {
  126.   Keynum=0xff;
  127.   flag=1;
  128.   for(j=0;j<8;j++)
  129.   {
  130.    flag=flag&&(temp[j]==password[j]);//比較八位密碼數字是否全正確
  131.    dis_smg[j]=0;
  132.   }
  133.   if(flag)
  134.   {
  135.     dis_smg[0]=0x3f; // "o"
  136.           dis_smg[1]=0x73; // "p"
  137.     dis_smg[2]=0x79; // "E"
  138.     dis_smg[3]=0x37; // "n"
  139.   }
  140.   else
  141.   {
  142.     dis_smg[0]=0x79; // "E"
  143.           dis_smg[1]=0x50; // "r"
  144.     dis_smg[2]=0x50; // "r"
  145.   }
  146.   i=0;   //清零,準備下次輸入密碼
  147. }
  148. if(Keynum==14)        //修改密碼鍵
  149. {
  150.   Flag=1;
  151.   for(i=0;i<8;i++)
  152.   {
  153.    dis_smg[i]=0x40;
  154.   }
  155.   i=0;      //靜態變量清零,下次進入時可以從新開始
  156. }
  157. }

  158. /**********************************************************************************
  159. *************************  控 制 函 數   ******************************************
  160. ***********************************************************************************/
  161. void Dominate(void)
  162. {
  163. uchar keynum;
  164. keynum=KeyPro();
  165. if(keynum!=0xff)
  166. {
  167.   if(Flag==0)
  168.    KeyControl(keynum);
  169.   else
  170.    SetPassword(keynum);
  171. }
  172. }

  173. /**********************************************************************************
  174. *************************   main 函 數   ******************************************
  175. ***********************************************************************************/
  176. void main()
  177. {
  178. Timer0_Init();
  179. while(1)
  180. {
  181.    Dominate();
  182. }
  183. }

  184. /**********************************************************************************
  185. ************************* 中斷服務函數   ******************************************
  186. ***********************************************************************************/
  187. void Timer0(void) interrupt 1
  188. {
  189. TH0=0XF8;
  190. TL0=0X30; //2ms

  191. Display(0,8);
  192. }

  193. /**********************************************************************************
  194. *************************  按 鍵 掃 描(反復式掃描法)   **************************
  195. ***********************************************************************************/
  196. uchar KeyScan(void)
  197. {
  198. uchar cord_h,cord_l;
  199. KeyPort=0x0f;
  200. cord_l=KeyPort&0x0f;
  201. if(cord_l!=0x0f)
  202. {
  203.   delayms(10);
  204.   if((KeyPort&0x0f)!=0x0f)
  205.   {
  206.    cord_l=KeyPort&0x0f;
  207.    KeyPort=cord_l|0xf0;
  208.    cord_h=KeyPort&0xf0;
  209.    while((KeyPort&0xf0)!=0xf0);

  210.    return (cord_h+cord_l);
  211.   }
  212. }return (0xff);
  213. }

  214. uchar KeyPro(void)
  215. {
  216.   switch(KeyScan())
  217.   {
  218.     case 0x7e:return 0;break;//0 按下相應的鍵顯示相對應的碼值
  219.     case 0x7d:return 1;break;//1
  220.     case 0x7b:return 2;break;//2
  221.     case 0x77:return 3;break;//3
  222.     case 0xbe:return 4;break;//4
  223.     case 0xbd:return 5;break;//5
  224.     case 0xbb:return 6;break;//6
  225.     case 0xb7:return 7;break;//7
  226.     case 0xde:return 8;break;//8
  227.     case 0xdd:return 9;break;//9
  228.     case 0xdb:return 10;break;//a
  229.     case 0xd7:return 11;break;//b
  230.     case 0xee:return 12;break;//c
  231.     case 0xed:return 13;break;//d
  232.     case 0xeb:return 14;break;//e
  233.     case 0xe7:return 15;break;//f
  234.     default:return 0xff;break;
  235.   }
  236. }
復制代碼




作者: changfeng4hao    時間: 2015-11-23 08:49
那原始密碼是多少?程序一進去的是輸入密碼而不是設置密碼




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品国产乱码久久久久久图片 | 日韩成人在线播放 | 日韩视频一区二区 | 亚洲午夜精品一区二区三区 | 嫩草视频在线免费观看 | 中文字幕乱码一区二区三区 | 亚洲区中文字幕 | 国产一极毛片 | 欧洲亚洲视频 | 亚洲成人一区二区在线 | 日韩在线国产 | 亚洲精品第一国产综合野 | 蜜桃臀av一区二区三区 | 91精品国产综合久久国产大片 | 欧美成人免费在线 | 免费在线观看毛片 | 天堂av免费观看 | 在线一级片 | 四虎在线视频 | 99精品免费久久久久久日本 | 精品国产99 | h视频免费在线观看 | 欧美精品导航 | 九九热免费视频在线观看 | 又黑又粗又长的欧美一区 | 久久一区二区三区电影 | 在线一区| 国产精品福利在线观看 | 亚洲欧洲一区二区 | av大片在线观看 | 99精品国产成人一区二区 | 成人精品毛片国产亚洲av十九禁 | 91精品www | 欧州一区二区三区 | 日韩精品亚洲专区在线观看 | 91影片 | 91精品国产一区二区三区 | 久久九九99 | 日本久久久一区二区三区 | 欧美 日韩 国产 成人 | 日本不卡免费新一二三区 |