标题: 单片机控制舵机 [打印本页]
作者: 1060143961 时间: 2018-6-13 15:13
标题: 单片机控制舵机
1. #include <reg52.h>
2. unsigned char count; //0.5ms次数标识
3. sbit pwm=P1^0; //信号输出
4. sbit jia=P1^1; //角度增加按键
5. sbit jan=P1^2; //角度减小按键
6. char jd; //角度标识
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() //定时器初始化
14. {
15. TMOD=0x01;
16. IE=0x82;
17. TH0=0xff;
18. TL0=0x19; //12晶振,0.25ms
19. TR0=1; //定时器开始
20. }
21. void Time0_int() interrupt 1 //中断程序
22. {
23. TH0=0xff;
24. TL0=0x19;
25. if(count<jd) //输出count个高电平
26. pwm=1;
27. else
28. pwm=0; //其余输出低电平
29. count++;
30. count=count%40; //时钟保持40个count 即20ms
31. }
32. void keyscan() //按键扫描
33. {
34. if(jia==0) //角度增加键是否按下
35. {
36. delay(50); //按下延时,消抖
37. if(jia==0)
38. {
39. jd++; //角度标识加1
40. count=0; //按键按下,则20ms周期重新开始
41. if(jd==50)
42. jd=9; //已经是180°则保持
43. while(jia==0); //等待按键放开
44. }
45. }
46. if(jan==0) //角度减小键是否按下
47. {
48. delay(10);
49. if(jd==0);
50. {
51. jd--; //角度标识减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.51hei.com/bbs/) |
Powered by Discuz! X3.1 |