找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4737|回复: 0
收起左侧

单片机独立键盘控制动态数码管显示 程序代码

[复制链接]
ID:511857 发表于 2019-9-30 10:46 | 显示全部楼层 |阅读模式
注意:此程序需要用到单片机74H138模块,才能通过独立键盘控制动态数码管

  1. #include<reg52.h> //此文件中定义了单片机的一些特殊功能
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit k1=P1^0; //定义 P10 口是 k1
  5. sbit k2=P1^1; //定义 P11 口是 k2
  6. sbit k3=P1^2; //定义 P12 口是 k3
  7. sbit k4=P1^3; //定义 P13 口是 k4
  8. sbit k5=P1^4; //定义 P14 口是 k5
  9. sbit k6=P1^5; //定义 P15 口是 k6
  10. sbit k7=P1^6; //定义 P16 口是 k7
  11. sbit k8=P1^7; //定义 P17 口是 k8

  12. sbit LSA=P0^0;
  13. sbit LSB=P0^1;
  14. sbit LSC=P0^2;
  15. uchar code smgduan[17]={0x06,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显 示0~F 的值
  17. void delay(uint i)
  18. {
  19. while(i--);
  20. }

  21. void keypros1()
  22. {
  23. if(k1==0) //检测按键 K1 是否按下
  24. {
  25. delay(1000); //消除抖动 一般大约 10ms
  26. if(k1==0) //再次判断按键是否按下
  27. {
  28. LSA=0;LSB=0;LSC=0;//显示第 0 位;
  29. }
  30. while(!k1); //检测按键是否松开
  31. }
  32. }
  33. void keypros2()
  34. {
  35. if(k2==0) //检测按键 K2 是否按下
  36. {
  37. delay(1000); //消除抖动 一般大约 1ms
  38. if(k2==0) //再次判断按键是否按下
  39. {
  40. LSA=1;LSB=0;LSC=0;//显示第 1 位
  41. }
  42. while(!k2); //检测按键是否松开
  43. }
  44. }
  45. void keypros3()
  46. {
  47. if(k3==0) //检测按键 K3 是否按下
  48. {
  49. delay(1000); //消除抖动 一般大约 1ms
  50. if(k3==0) //再次判断按键是否按下
  51. {
  52. LSA=0;LSB=1;LSC=0;//显示第 2 位
  53. }
  54. while(!k3); //检测按键是否松开
  55. }
  56. }
  57. void keypros4()
  58. {
  59. if(k4==0) //检测按键 K4 是否按下
  60. {
  61. delay(1000); //消除抖动 一般大约 1ms
  62. if(k4==0) //再次判断按键是否按下
  63. {
  64. LSA=1;LSB=1;LSC=0; //显示第 3 位
  65. }
  66. while(!k4); //检测按键是否松开
  67. }
  68. }
  69. void keypros5()
  70. {
  71. if(k5==0) //检测按键 K5 是否按下
  72. {
  73. delay(1000); //消除抖动 一般大约 1ms
  74. if(k5==0) //再次判断按键是否按下
  75. {
  76. LSA=0;LSB=0;LSC=1;//显示第 4 位
  77. }
  78. while(!k5); //检测按键是否松开
  79. }
  80. }
  81. void keypros6()
  82. {
  83. if(k6==0) //检测按键 K6 是否按下
  84. {
  85. delay(1000); //消除抖动 一般大约 1ms
  86. if(k6==0) //再次判断按键是否按下
  87. {
  88. LSA=1;LSB=0;LSC=1;//显示第 5 位
  89. }
  90. while(!k6); //检测按键是否松开
  91. }
  92. }
  93. void keypros7()
  94. {
  95. if(k7==0) //检测按键 K7 是否按下
  96. {
  97. delay(1000); //消除抖动 一般大约 1ms
  98. if(k7==0) //再次判断按键是否按下
  99. {
  100. LSA=0;LSB=1;LSC=1;//显示第 6 位
  101. }
  102. while(!k7); //检测按键是否松开
  103. }
  104. }
  105. void keypros8()
  106. {
  107. if(k8==0) //检测按键 K8 是否按下
  108. {
  109. delay(1000); //消除抖动 一般大约 1ms
  110. if(k8==0) //再次判断按键是否按下
  111. {
  112. LSA=1;LSB=1;LSC=1;//显示第 7 位
  113. }
  114. while(!k8); //检测按键是否松开
  115. }
  116. }


  117. void DigDisplay()
  118. {
  119. uchar i;
  120. for(i=0;i<8;i++)
  121. {
  122. switch(i) //位选,选择点亮的数码管,
  123. {
  124. case(0):
  125. keypros1();
  126. break;//显示第 0 位
  127. case(1):
  128. keypros2();
  129. break;//显示第 1 位
  130. case(2):
  131. keypros3();
  132. break;//显示第 2 位
  133. case(3):
  134. keypros4();
  135. break;//显示第 3 位
  136. case(4):
  137. keypros5();
  138. break;//显示第 4 位
  139. case(5):
  140. keypros6();
  141. break;//显示第 5 位
  142. case(6):
  143. keypros7();
  144. break;//显示第 6 位
  145. case(7):
  146. keypros8();
  147. break;//显示第 7 位
  148. }
  149. P2=smgduan[i];//发送段码
  150. delay(10000); //间隔一段时间扫描
  151. P2=0x00;//消隐
  152. }
  153. }
  154. void main()
  155. {
  156. while(1)
  157. {
  158. DigDisplay(); //数码管显示函数
  159. }
  160. }


复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表