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

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

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

  1. p=dig_table[ucDigShow7];
  2. if(ucDigDot7==1)
  3. {
  4. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  5. }
  6. dig_hc595_drive(ucDigShowTemp,0xbf);
  7. break;
  8. case 8://显示第8位
  9. ucDigShowTemp=dig_table[ucDigShow8];
  10. if(ucDigDot8==1)
  11. {
  12. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  13. }
  14. dig_hc595_drive(ucDigShowTemp,0x7f);
  15. break;
  16. }
  17. ucDisplayDriveStep++;
  18. if(ucDisplayDriveStep>8)//扫描完8个数码管后,重新从第一个开始扫描
  19. {
  20. ucDisplayDriveStep=1;
  21. }
  22. }
  23. //数码管的74HC595驱动函数
  24. void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01)
  25. {
  26. unsigned char i;
  27. unsigned char ucTempData;
  28. dig_hc595_sh_dr=0;
  29. dig_hc595_st_dr=0;
  30. ucTempData=ucDigStatusTemp16_09;//先送高8位
  31. for(i=0;i<8;i++)
  32. {
  33. if(ucTempData>=0x80)dig_hc595_ds_dr=1;
  34. else dig_hc595_ds_dr=0;
  35. dig_hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器
  36. delay_short(1);
  37. dig_hc595_sh_dr=1;
  38. delay_short(1);
  39. ucTempData=ucTempData<1;
  40. }
  41. ucTempData=ucDigStatusTemp08_01;//再先送低8位
  42. for(i=0;i<8;i++)
  43. {
  44. if(ucTempData>=0x80)dig_hc595_ds_dr=1;
  45. else dig_hc595_ds_dr=0;
  46. dig_hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器
  47. delay_short(1);
  48. dig_hc595_sh_dr=1;
  49. delay_short(1);
  50. ucTempData=ucTempData<1;
  51. }
  52. dig_hc595_st_dr=0;//ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来
  53. delay_short(1);
  54. dig_hc595_st_dr=1;
  55. delay_short(1);
  56. dig_hc595_sh_dr=0; //拉低,抗干扰就增强
  57. dig_hc595_st_dr=0;
  58. dig_hc595_ds_dr=0;
  59. }
  60. //LED灯的74HC595驱动函数
  61. void hc595_drive(unsigned char ucLedStatusTemp16_09,unsigned char ucLedStatusTemp08_01)
  62. {
  63. unsigned char i;
  64. unsigned char ucTempData;
  65. hc595_sh_dr=0;
  66. hc595_st_dr=0;
  67. ucTempData=ucLedStatusTemp16_09;//先送高8位
  68. for(i=0;i<8;i++)
  69. {
  70. if(ucTempData>=0x80)hc595_ds_dr=1;
  71. else hc595_ds_dr=0;
  72. hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器
  73. delay_short(1);
  74. hc595_sh_dr=1;
  75. delay_short(1);
  76. ucTempData=ucTempData<1;
  77. }
  78. ucTempData=ucLedStatusTemp08_01;//再先送低8位
  79. for(i=0;i<8;i++)
  80. {
  81. if(ucTempData>=0x80)hc595_ds_dr=1;
  82. else hc595_ds_dr=0;
  83. hc595_sh_dr=0; //SH引脚的上升沿把数据送入寄存器
  84. delay_short(1);
  85. hc595_sh_dr=1;
  86. delay_short(1);
  87. ucTempData=ucTempData<1;
  88. }
  89. hc595_st_dr=0;//ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来
  90. delay_short(1);
  91. hc595_st_dr=1;
  92. delay_short(1);
  93. hc595_sh_dr=0; //拉低,抗干扰就增强
  94. hc595_st_dr=0;
  95. hc595_ds_dr=0;
  96. }
  97. void T0_time() interrupt 1
  98. {
  99. unsigned int i;
  100. TF0=0;//清除中断标志
  101. TR0=0; //关中断
  102. if(ucWd==3)//在窗口3下
  103. {
  104. if(uiPasswordTimer>0)
  105. {
  106. uiPasswordTimer--;
  107. }
  108. if(uiPasswordTimer==0)
  109. {
  110. if(ucInputPassword[0]==9&&ucInputPassword[1]==9&&ucInputPassword[2]==2&&ucInputPassword[3]==2)
  111. { //如果密码等于9922,则正确
  112. ucWd=2;//切换到第2个显示按键的窗口
  113. ucWd2Update=1;//更新显示窗口2
  114. }
  115. else //如果密码不正确,则继续显示----
  116. {
  117. for(i=0;i<4;i++)
  118. {
  119. ucInputPassword[i]=11;//开机默认密码全部显示"----"
  120. }
  121. ucWd=1;
  122. ucWd1Update=1; //更新显示窗口1
  123. }
  124. }
  125. }
  126. if(ucWd==2)//在窗口2下
  127. {
  128. if(uiNoKeyPushTimer>0)
  129. {
  130. uiNoKeyPushTimer--;
  131. }
  132. if(uiNoKeyPushTimer==0)//如果10秒内无按键按下,则自动切换到显示密码登录框的界面
  133. {
  134. for(i=0;i<4;i++)
  135. {
  136. ucInputPassword[i]=11;//开机默认密码全部显示"----"
  137. }
  138. ucWd=1;
  139. ucWd1Update=1; //更新显示窗口1
  140. }
  141. }
  142. key_scan(); //按键扫描函数
  143. if(uiVoiceCnt!=0)
  144. {
  145. uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
  146. beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
  147. // beep_dr=1;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
  148. }
  149. else
  150. {
  151. ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
  152. beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
  153. // beep_dr=0;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
  154. }
  155. dis

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

网站地图

Top