×
嵌入式 > 嵌入式开发 > 详情

51单片机舵机控制程序

发布时间:2020-07-31 发布时间:
|
不记得多久没接触过程序这东东了,C++是完全忘了,因为第一个VC的hello world是编译不出来的,虽然后来确认了是设置路径的问题。也在怀疑自己是否曾经读过大学,因为虽然知道那玩意叫微积分,但已经不知道哪个叫微分,哪个是积分了。好吧,虽然有点夸张,但绝对是不过份的!^o^ 买了个单片机开发板确实是明智的,因为那玩意确实好玩,也依然兴趣不减,因为编程的心依然不死,觉得那东西是必须要学会并熟练的,否则太对不起我那夭折的第二学历了。虽然那就只差三科就过了。好吧,我得承认那是最难的也是最主要的三科:数据结构、数据库原理、信息系统开发与管理。出来也曾经想过要去考的,但后来东奔西跑的还是没去成。现在已是完全放弃了,也觉得没那个必要了,也不会觉得多了个本本又什么重要的了,你学会了才是重要的!所以现在观念也改变了:我学是因为我喜欢!所以这个项目也是会一直延续下去的,不管中间是否会停顿,但总会春风吹又生的!
男人之于机械就好比女人之于衣服!还记得小时候自己干的坏事吧,多好的玩具总被好奇地拆坏!好吧,虽然你已经长大了,但看到汽车还是会忍不住的喜欢,对吧,也总是会有想把它改造的冲动,对吧!看到飞机模型还是会想玩,对吧!所以想玩就玩呗,有兴趣是一件幸福的事情!更何况是个多么科幻和挑战的兴趣呢~所以,开始吧,确定你一生的目标和兴趣!
好吧,这是一条漫长的路。路漫漫其修远兮,吾将上下而求索!俺在大学里最受用的是确立了一个信仰:活到老,学到老!所以路不怕漫长!蒹葭苍苍,白露为霜。所谓伊人,在水一方!溯洄从之,道阻且长。溯游从之,宛在水中央。我将像追求美女一样地坚韧与不拔~
但海市蜃楼虽然美丽,却是建不起的,万丈高楼平地起,所以先来基础研究,哈哈~如果你有兴趣,那就一起吧,那个什么子的曰:与其独乐乐,不如与人乐乐,孰乐?这个世界需要Team,创业需要Team,研究需要Team,连大盗也需要Team,如果你不需要Team,YOU OUT了!
单片机也买一段时间了,挺好玩的,很基础很踏实的东西,发现是大学时期最最应该拥有的玩意!但那时却并没拥有过,那个恨呀!那个泪流啊~如果冬天里落在黄河上,它也就不用再干枯了~!
好了,口水多过长江水,太多了污染环境,不知长江里的白海豚是不是我害的,听说再也找不到了~
先记录几个相关试验先~
单片机一来就迫不及待地试验了,程序虽然不是自己写的,但C程序还是能看得懂的,C51也就多了些关键字,研究研究修改修改引脚就能用上了。但单片机与硬件是密切相关的,要驱动外围硬件要放大信号,要了解下上拉电阻的概念。舵机买的是辉盛的9克舵机,便宜货,干扰就会动,供电得单独供电,不能和单片机共用。另供电的和单片机还得共地线,否则也是不动的。
单片机AI练习之舵机控制程序:通电舵机到中位,P1.1角度减少,P1.2增加。原程序是一接通到180度位置的,舵机的中位不太准的,没到180度就被限位了,害得我第一天就弄坏了个舵机。源程序如下,备档

#include
unsigned char count; //0.5ms次数标识
sbitpwm=P0^1 ; //PWM信号输出
sbit jia =P1^2; //角度增加按键检测IO口
sbit jan =P1^1; //角度减少按键检测IO口
unsigned char jd; //角度标识
void delay(unsigned char i)//延时
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time0_Init() //定时器初始化
{
TMOD = 0x01; //定时器0工作在方式1
IE = 0x82;
TH0 = 0xfe;
TL0 = 0x33; //11.0592MZ晶振,0.5ms
TR0=1; //定时器开始
}
void Time0_Int() interrupt 1 //中断程序
{
TH0 = 0xfe; //重新赋值
TL0 = 0x33;
if(count< jd) //判断0.5ms次数是否小于角度标识
pwm=1; //确实小于,PWM输出高电平
else
pwm=0; //大于则输出低电平
count=(count+1); //0.5ms次数加1
count=count%40; //次数始终保持为40 即保持周期为20ms
}
void keyscan() //按键扫描
{
if(jia==0) //角度增加按键是否按下
{
delay(10); //按下延时,消抖
if(jia==0) //确实按下
{
jd++; //角度标识加1
count=0; //按键按下 则20ms周期从新开始
if(jd==6)
jd=5; //已经是180度,则保持
while(jia==0); //等待按键放开
}
}
if(jan==0) //角度减小按键是否按下
{
delay(10);
if(jan==0)
{
jd--; //角度标识减1
count=0;
if(jd==0)
jd=1; //已经是0度,则保持
while(jan==0);
}
}
}
void main()
{
jd=3;
count=0;
Time0_Init();
while(1)
{
keyscan(); //按键扫描

}
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
关于Erlang语言的功能及特性