標(biāo)題: 單片機(jī)控制舵機(jī) [打印本頁]
作者: 1060143961 時(shí)間: 2018-6-13 15:13
標(biāo)題: 單片機(jī)控制舵機(jī)
1. #include <reg52.h>
2. unsigned char count; //0.5ms次數(shù)標(biāo)識(shí)
3. sbit pwm=P1^0; //信號(hào)輸出
4. sbit jia=P1^1; //角度增加按鍵
5. sbit jan=P1^2; //角度減小按鍵
6. char jd; //角度標(biāo)識(shí)
7. void delay(unsigned int i)
8. {
9. unsigned int j,k;
10. for(j=i;j>0;j--)
11. for(k=125;k>0;k--);
12. }
13. void Time0_init() //定時(shí)器初始化
14. {
15. TMOD=0x01;
16. IE=0x82;
17. TH0=0xff;
18. TL0=0x19; //12晶振,0.25ms
19. TR0=1; //定時(shí)器開始
20. }
21. void Time0_int() interrupt 1 //中斷程序
22. {
23. TH0=0xff;
24. TL0=0x19;
25. if(count<jd) //輸出count個(gè)高電平
26. pwm=1;
27. else
28. pwm=0; //其余輸出低電平
29. count++;
30. count=count%40; //時(shí)鐘保持40個(gè)count 即20ms
31. }
32. void keyscan() //按鍵掃描
33. {
34. if(jia==0) //角度增加鍵是否按下
35. {
36. delay(50); //按下延時(shí),消抖
37. if(jia==0)
38. {
39. jd++; //角度標(biāo)識(shí)加1
40. count=0; //按鍵按下,則20ms周期重新開始
41. if(jd==50)
42. jd=9; //已經(jīng)是180°則保持
43. while(jia==0); //等待按鍵放開
44. }
45. }
46. if(jan==0) //角度減小鍵是否按下
47. {
48. delay(10);
49. if(jd==0);
50. {
51. jd--; //角度標(biāo)識(shí)減1
52. count=0;
53. if(jd==0)
54. jd=1;
55. while(jan==0);
56. }
57. }
58. }
59.
60. void main()
61. {
62. jd=1;
63. count=0;
64. Time0_init();
65. while(1)
66. {
67. keyscan();
68. // display();
69. }
70. }
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |