找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2462|回复: 0
打印 上一主题 下一主题
收起左侧

简单360度数字舵机驱动程序,就是出不来,球大神指教

[复制链接]
跳转到指定楼层
楼主
ID:229016 发表于 2017-11-12 18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit pwm=P3^0; //pwm信号输出
sbit jia=P3^7;//角度增加i/o口
sbit jian=P3^6;//角度减少i/o口
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char jd,count;//角度标识,0.5秒次数标识
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71};
void delay(unsigned char i)
{
   unsigned char k,j;
   for(j=i;j>0;j--)
     for(k=125;k>0;k--);
}
void timer0_init() //定时器初始化
{
   TMOD=0x01;
   IE=0x82;//开全局中断
   TH0=0xfe;
   TL0=0x33;//11.059赫兹,0.5ms
   TR0=1;//定时器开始工作
   }
void Time_int()interrupt 1//中断程序
{
   TH0=0xfe;
   TL0=0x33;//重新赋值
   if(count<jd)
      pwm=1;//确实小于,pwm输出高电平
   else
   pwm=0;
   count=(count+1);//0.5ms的次数加一
   count=count%40;//次数始终保持位40,即保持周期为20ms
}
void keyscan()
{
   if(jia==0)
   {
     delay(10);
  if(jia==0)
  {
    jd++;  //角度标识加一
    count=0;  //按键按下,则20ms周期重新开始
    if(jd==6)
   jd=5;  //已经是180°,则保持
   while(jia==0);
  }
}
   if(jian==0)
   {
     delay(10);
  if(jian==0)
  {
     jd--;
  count=0;
  if(jd==0)
    jd=1;
    while(jian==0);
    }
  }
}
void display()
{
  unsigned char bai,shi,ge;
  switch(jd)
  {
    case 1:
bai=0;
shi=0;
ge=0;
break;

    case 2:
bai=0;
shi=4;
ge=5;
break;
case 3:
bai=0;
shi=9;
ge=0;
break;
case 4:
bai=1;
shi=3;
ge=5;
break;
  
case 5:
bai=1;
shi=8;
ge=0;
break;
}
dula=0;
P0=table[bai];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[shi];
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=table[ge];
dula=1;
dula=0;
wela=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
}
void main()
{
   jd=1;
   count=0;
   timer0_init();
   while(1)
   {
     keyscan();
  display();
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表