盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控
前阵子刷手游,一直要点击屏幕,刚好手上有个sg90舵机,就简单做一个触控手机屏幕的小制作。
效果如图:
因为之前没用过舵机,上网搜索了一下,发现文章比较少,参考了这博客,写了个最简单的来回摆角程序。
http://blog.csdn.net/zxnsirius/article/details/51002580
一、先看舵机和接线
二、关于PWM的知识这里不多说
占空比 = t / T 相关参数如下:
t = 0.5ms——————-舵机会转动 0 °
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180
单片机程序要做的就是,使用定时器0定时周期T = 20ms;I/O管脚输出高电平,时间t在0.5ms-2.5ms之间的一个方波。
#include <reg52.h>sbit SEV_PWM = P1^4; //设定PWM输出的I/O端口
unsigned char count = 0;
unsigned char SEV_conut =8;
sbit K6=P1^5;//设置两个按键,代表抬起和按下。根据实际硬件资源编写。
sbit K7=P1^6;sbit LED=P0^7;/*延时程序*/
void Delay(unsigned int s)
{unsigned int i;for(i=0; i<s; i++);for(i=0; i<s; i++);
}/*定时器T0初始化*/
void Com_Init()
{TMOD &= 0x00;TMOD |= 0x01; //定时器T0设置成方式1TH0 = 0xff; //定时常数 0.1ms 晶振为11.0592MHzTL0 = 0xa4;ET0 = 1; TR0 = 1; EA=1; }/*T0中断初始化*/
void Time0_Init() interrupt 1
{TR0 = 0; TH0 = 0xff; //重装时间常数 0.1msTL0 = 0xa4;if(count <= SEV_conut) //5==0° 10==90°{ SEV_PWM = 1; }else { SEV_PWM = 0; }count++;if (count >= 200) //T = 20ms清零{ count = 0; }TR0 = 1; //开启T0
}
void main()
{Com_Init();while(1){if(K6==0){SEV_conut =5;//5代表0.5mscount=0;}if(K7==0){SEV_conut =8;count=0;}SEV_conut =5;//舵机恢复到0°的位置count=0;//让定时器重新计数Delay(100000);//约延时2sSEV_conut =8;//8这个值是作者调试的角度,得到现象是触控笔向下按压屏幕count=0;Delay(100000);//延时函数写得不好,读者可改写。}
}
实际测试发现,有时定时器计数不够准确,要精确调节特定角度,需要结合自身的单片机和舵机,调试上述程序中SEV_count的参数,确定舵机实际转了多少度。
gif中演示只是触控效果,要达到精确跳一跳,要加入算法,可以是图像识别,或是图案距离检测。
日后有时间再搞搞,有问题可交流。吐槽CSDN的编写博客页面好麻烦,写作体验极差(┬_┬)
盛辉SG90舵机 51单片机PWM控制程序 手机屏幕触控相关推荐
- 51单片机PWM调速风扇转速显示转速设置
实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...
- 基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298M芯片控制直流电机正反运转的项目
基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298芯片控制直流电机正反运转的项目 一.前言 1.基于51单片机PWM(即脉冲宽度调制)调速数码管显示测速L298芯片控制直流电机正反运转的 ...
- 51单片机PWM温控风扇定时关闭手动自动DS18B20测温LCD1602显示
实践制作DIY- GC0018-PWM温控风扇 一.功能说明: 基于51单片机设计-PWM温控风扇 功能介绍: 1. STC89C52单片机 +LCD1602 +多个按键+风扇+风扇驱动电路+DS18 ...
- 51单片机 PWM 直流电机调速+Proteus仿真
51单片机 PWM 电机调速+Proteus仿真 Proteus仿真 实例代码 /*用PWM控制电机脉冲频率应控制在25HZ-35HZ之间*//*定时1ms,1个周期30ms,脉冲频率为33HZ */ ...
- 51单片机 PWM LED灯亮度调节+Proteus仿真
51单片机 PWM LED灯亮度调节+Proteus仿真 Proteus仿真 实例代码 #include "reg51.h" unsigned int cd,dd; unsigne ...
- 51单片机IIC 12864 OLED屏幕滚动显示仿真
51单片机IIC 12864 OLED屏幕滚动显示仿真 程序代码接着前面文章<STC15W408AS单片机IIC驱动0.96寸OLED显示> 这里不再贴出代码了,前面有一篇有实物效果演示, ...
- 51单片机—— PWM、呼吸灯
51单片机通过定时器0产生 20ms/50HZ 的可调节 PWM 小灯的有效显示应该是50hz,所以周期是20ms 频率过小显示比较暗,频率过大不好调节 定时器0,16位自动重装载值,定时长度200u ...
- 1.基于51单片机的蓝牙手机遥控小车
第一节 基于51单片机控制的蓝牙遥控小车 51控制的蓝牙遥控小车是楼主大一刚开始接触单片机时DIY的项目,时间大概是2016年的6月,现在已经是19年的5月底,借毕业前有闲时间写一下之前自己做过得种 ...
- 51单片机+ESP8266实现手机控制单片机(点亮LED灯)
固件的烧写 既然要使用WiFi模块,那首先要进行固件的烧写 已经烧写好固件的可以直接跳过看模块的初始化 WiFi模块使用的是自带CH340驱动的NodeMCU开发板 固件烧录工具采用固件烧写\flas ...
最新文章
- python并发入门(part5 event对象)
- OpenGL之仿“天体”运动渲染球体之间的旋转效果
- Flink 时间语义与水位线(Watermarks)
- C#中DateTime的缺陷与代替品DateTimeOffset
- LeetCode 212. 单词搜索 II(Trie树+DFS)
- jconsole 里的线程编号一直在增加_第三章_运行时数据区概述及线程
- 麦步手表编程纪实(1)
- 软件测试基础:自动化测试、安全测试、性能测试
- c# 打印 html,c# – 使用模板打印
- 自动化 c语言学不会,为什么那么多人学不会PLC自动化编程?
- Frsky X9D Plus遥控器和 Frisky R8 Pro接收机对频
- UVM基本介绍(UVM class hierarchy、验证平台、树状图)
- 恶意.NET安全攻防(一):使用ETW隐藏你的.NET
- 将word文档中所有文本框中的内容转换成普通段落
- cortex-M3/cortex-M4架构
- Spring AOP源码分析十
- C#课程设计:《猜猜看》游戏开发总结
- php predis password,‘Predis.php’-WordPress怎么用第三方带密码Redis数据库加速?
- jsp成绩分析管理系统myeclipse编程java语言sqlserver数据库
- cocos2dx基础篇(19)——音乐音效SimpleAudioEngine