admin管理员组文章数量:1530844
2024年7月23日发(作者:)
[cpp] view plaincopyprint?
1. #include
2. #define uchar unsigned char
3. #define uint unsigned int
4. sbit dula=P3^0;
5. sbit wela=P3^1;
6. #define keyport (P1)
7. #define keystate0 0 //按键确认状态
8. #define keystate1 1 //按键无动作状态
9. char keystate=1; //按键状态初始化为按键无动作状态
10. uchar keynum=0;
11. void delayms(uint x) //1ms
12. {
13. uint y,z;
14. for(y=x;y>0;y--)
15. for(z=111;z>0;z--);
16. }
17. uchar code table[]={ //共阳数码管
18. 0xc0,0xf9,0xa4,0xb0,
19. 0x99,0x92,0x82,0xf8,
20. 0x80,0x90,0x88,0x83,
21. 0xc6,0xa1,0x86,0x8e};
22. void smg()
23. {
24. dula=0;
25. wela=0;
26. P2=0x01;
27. wela=1;
28. wela=0;
29. P2=table[keynum];
30. dula=1;
31. dula=0;
32. delayms(1);
33. P2=0x02;
34. wela=1;
35. wela=0;
36. P2=table[keynum];
37. dula=1;
38. dula=0;
39. delayms(1);
40. P2=0x04;
41. wela=1;
42. wela=0;
43. P2=table[keynum];
44. dula=1;
45. dula=0;
46. delayms(1);
47. P2=0x08;
48. wela=1;
49. wela=0;
50. P2=table[keynum];
51. dula=1;
52. dula=0;
53. delayms(1);
54. P2=0x10;
55. wela=1;
56. wela=0;
57. P2=table[keynum];
58. dula=1;
59. dula=0;
60. delayms(1);
61. P2=0x20;
62. wela=1;
63. wela=0;
64. P2=table[keynum];
65. dula=1;
66. dula=0;
67. delayms(1);
68. P2=0x40;
69. wela=1;
70. wela=0;
71. P2=table[keynum];
72. dula=1;
73. dula=0;
74. delayms(1);
75. P2=0x80;
76. wela=1;
77. wela=0;
78. P2=table[keynum];
79. dula=1;
80. dula=0;
81. delayms(1);
82. }
83. void keyscan()
84. {
85. uchar temp1,temp2,column,row;
86. switch(keystate)
87. {
88. case keystate0: //keystate0,按键按下确认状态,下一状态为keystate1(按
键无动作状态)
89. keyport=0x0f;
90. temp1=keyport;
91. keyport=0xf0;
92. temp2=keyport;
93. if((temp1|temp2)!=0xff)
94. {
95. temp1|=temp2;
96. if(!(temp1&0x80))
97. row=3;
98. else
99. if(!(temp1&0x40))
100. row=2;
101. else
102. if(!(temp1&0x20))
103. row=1;
104. else
105. if(!(temp1&0x10))
106. row=0;
107. if(!(temp1&0x08))
108. column=3;
109. else
110. if(!(temp1&0x04))
111. column=2;
112. else
113. if(!(temp1&0x02))
114. column=1;
115. else
116. if(!(temp1&0x01))
117. column=0;
118. keynum=column*4+row;
119. while(!(keyport==0x0f|keyport==0xf0));
120. keystate=keystate1;
121. break;
122.
123. }
124. else
125. keystate=keystate1;
126. break;
127. case keystate1: //keystate1,按键无动作状态,下一状态为keystate0(按
键无动作状态)
128. keyport=0x0f;
129. temp1=keyport;
130. keyport=0xf0;
131. temp2=keyport;
132. if((temp1|temp2)!=0xff)
133. {
134. keystate=keystate0;
135. }
136. else
137. keystate=keystate1;
138. break;
139. }
140. }
141. void main()
142. {
143. while(1)
144. {
145. keyscan();
146. smg();
147. }
148. }
版权声明:本文标题:键盘测试程序 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1721670440a891653.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论