微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第34节:在数码管中实现iphone4S开机密码锁的程序

第34节:在数码管中实现iphone4S开机密码锁的程序

时间:11-22 来源:互联网 点击:

  1. 显示输入的密码
  2. ucDigShow2=ucInputPassword[2];//第2位数码管显示输入的密码
  3. ucDigShow1=ucInputPassword[3];//第1位数码管显示输入的密码
  4. }
  5. break;
  6. }
  7. }
  8. void key_scan()//按键扫描函数 放在定时中断里
  9. {
  10. switch(ucKeyStep)
  11. {
  12. case 1: //按键扫描输出第ucRowRecord列低电平
  13. if(ucRowRecord==1)//第一列输出低电平
  14. {
  15. key_dr1=0;
  16. key_dr2=1;
  17. key_dr3=1;
  18. key_dr4=1;
  19. }
  20. else if(ucRowRecord==2)//第二列输出低电平
  21. {
  22. key_dr1=1;
  23. key_dr2=0;
  24. key_dr3=1;
  25. key_dr4=1;
  26. }
  27. else if(ucRowRecord==3)//第三列输出低电平
  28. {
  29. key_dr1=1;
  30. key_dr2=1;
  31. key_dr3=0;
  32. key_dr4=1;
  33. }
  34. else //第四列输出低电平
  35. {
  36. key_dr1=1;
  37. key_dr2=1;
  38. key_dr3=1;
  39. key_dr4=0;
  40. }
  41. uiKeyTimeCnt=0;//延时计数器清零
  42. ucKeyStep++; //切换到下一个运行步骤
  43. break;
  44. case 2: //此处的小延时用来等待刚才列输出信号稳定,再判断输入信号。不是去抖动延时。
  45. uiKeyTimeCnt++;
  46. if(uiKeyTimeCnt>1)
  47. {
  48. uiKeyTimeCnt=0;
  49. ucKeyStep++; //切换到下一个运行步骤
  50. }
  51. break;
  52. case 3:
  53. if(key_sr1==1&&key_sr2==1&&key_sr3==1&&key_sr4==1)
  54. {
  55. ucKeyStep=1;//如果没有按键按下,返回到第一个运行步骤重新开始扫描
  56. ucKeyLock=0;//按键自锁标志清零
  57. uiKeyTimeCnt=0; //按键去抖动延时计数器清零,此行非常巧妙
  58. ucRowRecord++;//输出下一列
  59. if(ucRowRecord>4)
  60. {
  61. ucRowRecord=1; //依次输出完四列之后,继续从第一列开始输出低电平
  62. }
  63. }
  64. else if(ucKeyLock==0)//有按键按下,且是第一次触发
  65. {
  66. if(key_sr1==0&&key_sr2==1&&key_sr3==1&&key_sr4==1)
  67. {
  68. uiKeyTimeCnt++;//去抖动延时计数器
  69. if(uiKeyTimeCnt>const_key_time)
  70. {
  71. uiKeyTimeCnt=0;
  72. ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
  73. if(ucRowRecord==1)//第一列输出低电平
  74. {
  75. ucKeySec=1;//触发1号键 对应朱兆祺学习板的S1键
  76. }
  77. else if(ucRowRecord==2)//第二列输出低电平
  78. {
  79. ucKeySec=2;//触发2号键 对应朱兆祺学习板的S2键
  80. }
  81. else if(ucRowRecord==3)//第三列输出低电平
  82. {
  83. ucKeySec=3;//触发3号键 对应朱兆祺学习板的S3键
  84. }
  85. else //第四列输出低电平
  86. {
  87. ucKeySec=4;//触发4号键 对应朱兆祺学习板的S4键
  88. }
  89. }
  90. }
  91. else if(key_sr1==1&&key_sr2==0&&key_sr3==1&&key_sr4==1)
  92. {
  93. uiKeyTimeCnt++;//去抖动延时计数器
  94. if(uiKeyTimeCnt>const_key_time)
  95. {
  96. uiKeyTimeCnt=0;
  97. ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
  98. if(ucRowRecord==1)//第一列输出低电平
  99. {
  100. ucKeySec=5;//触发5号键 对应朱兆祺学习板的S5键
  101. }
  102. else if(ucRowRecord==2)//第二列输出低电平
  103. {
  104. ucKeySec=6;//触发6号键 对应朱兆祺学习板的S6键
  105. }
  106. else if(ucRowRecord==3)//第三列输出低电平
  107. {
  108. ucKeySec=7;//触发7号键 对应朱兆祺学习板的S7键
  109. }
  110. else //第四列输出低电平
  111. {
  112. ucKeySec=8;//触发8号键 对应朱兆祺学习板的S8键
  113. }
  114. }
  115. }
  116. else if(key_sr1==1&&key_sr2==1&&key_sr3==0&&key_sr4==1)
  117. {
  118. uiKeyTimeCnt++;//去抖动延时计数器
  119. if(uiKeyTimeCnt>const_key_time)
  120. {
  121. uiKeyTimeCnt=0;
  122. ucKeyLock=1;//自锁按键置位,避免一直触发,只有松开按键,此标志位才会被清零
  123. if(ucRowRecord==1)//第一列输出低电平
  124. {
  125. ucKeySec=9;//触发9号键 对应朱兆祺学习板的S9键
  126. }
  127. else if(ucRowRecord==2)//第二列输出低电平
  128. {
  129. ucKeySec=10;//触发10号键 对应朱兆祺学习板的S10键
  130. }
  131. else if(ucRowRecord==3

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top