当前位置:   article > 正文

51单片机矩阵键盘扫描控制数码管动态显示(代码详解)_51单片机如何实现扫频代码

51单片机如何实现扫频代码

实现效果:矩阵键盘扫描,将矩阵键盘设置的数值在数码管上动态扫描的方式显示出来

废话不多说,直接上代码。

  1. /*------------------
  2. 编辑作者:小小扫地僧
  3. 编辑日期:2023年5月
  4. -------------------*/
  5. #include<reg51.h>
  6. sbit beep=P2^3;//定义蜂鸣器引脚,按下按键,蜂鸣器响
  7. sbit dula=P2^6;//数码管段选锁存器引脚
  8. sbit wela=P2^7;//数码管位选锁存器引脚
  9. unsigned char i=100;
  10. unsigned char j,k,temp,key;//定义用到的变量
  11. /*------------------
  12. 函数功能:延时函数
  13. --------------------*/
  14. void delay(unsigned char i)
  15. {
  16. for(j=i;j>0;j--)
  17. for(k=125;k>0;k--);
  18. }
  19. /*定义数组来存储数码管显示的数值:0~9*/
  20. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  21. 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  22. /*-------------------
  23. 函数功能:数码管显示函数
  24. ---------------------*/
  25. display(unsigned char num)
  26. {
  27. P0=table[num];
  28. dula=1;//这里不停拉低段选位选的引脚,是为了驱动数码管段选位选锁存器
  29. dula=0;
  30. P0=0x00;//设置数码管第一位显示
  31. wela=1;
  32. wela=0;
  33. }
  34. /*-------------------
  35. 函数功能:主函数
  36. ---------------------*/
  37. void main()
  38. {
  39. dula=0;
  40. wela=0;
  41. while(1)
  42. {
  43. P3=0xfe;
  44. temp=P3;
  45. temp=temp&0xf0;//矩阵键盘初始状态定义
  46. if(temp!=0xf0)//矩阵键盘扫描,判断是否有按键按下
  47. {
  48. delay(10);
  49. if(temp!=0xf0)//消抖
  50. {
  51. temp=P3;
  52. switch(temp)//以下就是矩阵键盘的行扫描
  53. {
  54. case 0xee:
  55. key=0;
  56. break;
  57. case 0xde:
  58. key=1;
  59. break;
  60. case 0xbe:
  61. key=2;
  62. break;
  63. case 0x7e:
  64. key=3;
  65. break;
  66. }
  67. while(temp!=0xf0)
  68. {
  69. temp=P3;
  70. temp=temp&0xf0;
  71. beep=0;
  72. }
  73. beep=1;
  74. display(key);
  75. // P1=0xfe;
  76. }
  77. }
  78. P3=0xfd;
  79. temp=P3;
  80. temp=temp&0xf0;//扫描完行后,重新定义初始状态,进行列扫描
  81. if(temp!=0xf0)
  82. {
  83. delay(10);
  84. if(temp!=0xf0)
  85. {
  86. temp=P3;
  87. switch(temp)//以下就是矩阵键盘的列扫描
  88. {
  89. case 0xed:
  90. key=4;
  91. break;
  92. case 0xdd:
  93. key=5;
  94. break;
  95. case 0xbd:
  96. key=6;
  97. break;
  98. case 0x7d:
  99. key=7;
  100. break;
  101. }
  102. while(temp!=0xf0)
  103. {
  104. temp=P3;
  105. temp=temp&0xf0;
  106. beep=0;
  107. }
  108. beep=1;
  109. display(key);
  110. }
  111. }
  112. P3=0xfb;
  113. temp=P3;
  114. temp=temp&0xf0;
  115. if(temp!=0xf0)
  116. {
  117. delay(10);
  118. if(temp!=0xf0)
  119. {
  120. temp=P3;
  121. switch(temp)
  122. {
  123. case 0xeb:
  124. key=8;
  125. break;
  126. case 0xdb:
  127. key=9;
  128. break;
  129. case 0xbb:
  130. key=10;
  131. break;
  132. case 0x7b:
  133. key=11;
  134. break;
  135. }
  136. while(temp!=0xf0)
  137. {
  138. temp=P3;
  139. temp=temp&0xf0;
  140. beep=0;
  141. }
  142. beep=1;
  143. display(key);
  144. }
  145. }
  146. P3=0xf7;
  147. temp=P3;
  148. temp=temp&0xf0;
  149. if(temp!=0xf0)
  150. {
  151. delay(10);
  152. if(temp!=0xf0)
  153. {
  154. temp=P3;
  155. switch(temp)
  156. {
  157. case 0xe7:
  158. key=12;
  159. break;
  160. case 0xd7:
  161. key=13;
  162. break;
  163. case 0xb7:
  164. key=14;
  165. break;
  166. case 0x77:
  167. key=15;
  168. break;
  169. }
  170. while(temp!=0xf0)
  171. {
  172. temp=P3;
  173. temp=temp&0xf0;
  174. beep=0;
  175. }
  176. beep=1;
  177. display(key);
  178. }
  179. }
  180. }
  181. }

最后,希望我的分享能让你有所收获,创作不易,敬请关注点赞,持续更新中!愿我们一起成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/408864
推荐阅读
相关标签
  

闽ICP备14008679号