模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

2249查看 | 19回复

[DIY交流] 舵机测试仪交作业了

[复制链接]
发表于 2016-12-27 21:47:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

舵机测试仪交作业了 舵机 作者:ldy7474 1211
舵机测试仪交作业了 舵机 作者:ldy7474 8946
舵机测试仪交作业了 舵机 作者:ldy7474 7726
舵机测试仪交作业了 舵机 作者:ldy7474 4118
 楼主| 发表于 2016-12-27 21:48:20 | 显示全部楼层
//数码管舵机测试仪
#include<reg51.h>

//sfr P5=0xC8;
//sfr P2M0=0x96;     
//sfr P3M0=0xb2;     
sfr P1ASF=0x9D;    //声明 P1口模拟功能寄存器
sfr ADC_RES=0xBD;  //声明 ADC转换结果寄存器
sfr ADC_CONTR=0xBC;//声明 ADC控制寄存器

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;//声明 P2引脚模式寄存器
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;//声明 P3引脚模式寄存器
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P4   = 0xC0;
sfr P5   = 0xC8;//声明P5引脚寄存器

sbit DA=P5^4;   //a=5.4数码管每个引脚
sbit DB=P1^5;  // b=1.5  P1.2--1 |      B4| 16--P1.1
sbit DC=P3^7;  // c=3.7  P1.3--2 |B2    d | 15--P1.0
sbit DD=P1^0;  // d=1.0  P1.4--3 |g     c | 14--P3.7--txd
sbit DE=P3^2;  // e=3.2  P1.5--4 |b     B3| 13--P3.6--rxd
sbit DF=P5^5;  // f=5.5  P5.4--5 |a     g | 12--P3.3
sbit DG=P3^0;  // g=1.4  VCC --6 |      e | 11--P3.2
sbit DP=P1^6;//          P5.5--7 |f     B4| 10--P3.1--txd
               //        GND --8 |______ _| 9 --P3.0--rxd

sbit B1=P3^1;    //
sbit B2=P3^3;    //
sbit B3=P3^6;
sbit B4=P1^1;   //四个数码管的引脚定义

sbit OUT=P1^3;//定义一个输出引脚
sbit KEIL=P1^4;//定义一个按键


unsigned char display_time;        //定义变量用于显示次数

unsigned char Data1;        //第一个数码管要显示的数据
unsigned char Data2;        //第二个数码管要显示的数据
unsigned char Data3;        //第三个数码管要显示的数据
unsigned char Data4;        //第四个数码管要显示的数据

unsigned char count;        //计时
unsigned int adc;          //AD转换计算
unsigned int L; //高电平时间

void Delay10us()                //@12.000MHz
{
        unsigned char i;

        i = 27;
        while (--i);
}

void delay_n_10us(unsigned int n)//延时n个10us的函数
{
        while(n)         
        {
                Delay10us();
                n=n-1;//每循环一次n减小1
        }
}

void display(unsigned char x)//控制数码管显示内容的函数
{
        //判断x的值来决定显示什么
        if(x==0){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=0;} //显示“0”        
        if(x==1){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} //显示“1”        
        if(x==2){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=0;} //显示“2”        
        if(x==3){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=0;} //显示“3”
        if(x==4){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=0;} //显示“4”        
        if(x==5){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} //显示“5”        
        if(x==6){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} //显示“6”        
        if(x==7){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} //显示“7”        
        if(x==8){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} //显示“8”        
        if(x==9){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} //显示“9”
                                                        
        if(x==10){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=1;} //显示“0”带小数点        
        if(x==11){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //显示“1”带小数点        
        if(x==12){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=1;} //显示“2”带小数点        
        if(x==13){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=1;} //显示“3”带小数点
        if(x==14){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=1;} //显示“4”带小数点        
        if(x==15){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //显示“5”带小数点        
        if(x==16){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //显示“6”带小数点
        if(x==17){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //显示“7”带小数点        
        if(x==18){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //显示“8”带小数点
        if(x==19){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //显示“9”带小数点
}

void main()
{

                P1M0=0X31;    //1.5 1.4  1.0  0011 0001
        P3M0=0x85;    //c3.7 e3.2 3.0 1000 0101需要高电平大电流的引脚3.7 3.3、3.2填入数值
        P5M0=0X30;    //f5.5 a5.4          0011 0000               
      //P1ASF=0x80;  //0000 0100设置P1.7引脚为模拟功能
        P1ASF = 0x04;  //0000 0100设置P1.2 引脚为模拟功能
        while(1)
        {
                delay_n_10us(400);//系统周期4ms
               
                count=count+1;
                if(count>4)  //每20ms秒插入一次高电平
                {
                        count=0;
                        B1=1;B2=1;B3=1;B4=1;//暂时关闭数码管,避免闪烁
                        
                        ADC_CONTR=0x88+2;  //开始P1.2引脚转换
                        delay_n_10us(5);   //等待50us,AD转换完成
                        adc=ADC_RES;  //读取转换结果
                        
                        L=adc; //转动旋钮,adc的值0~255变化
                        //L的变化范围是100~200,所以进行一下限制
                        if(L>200)L=200; //高电平时间不能超过2ms
                        if(L<100)L=100; //高电平时间不能低于1ms
                        
                        OUT=1;
                        delay_n_10us(L);//输出1~2ms高电平
                        OUT=0;  //其他时间为低电平
                        
                        //显示L的大小
                        Data1=0;
                        Data2=L/100;          //百位数据
                        //Data2=Data2+10;   //加10,display函数显示的数字会带小数点
                        
                        Data3=L0/10; //十位数据                        
                        Data4=L;     //个位数据        
                }
               
               
               
                ///////////////////////////////////////////////////////
                //显示程序模块化,只需要改变Data1/2/3/4的值就可以控制显示内容
               
                display_time=display_time+1;
                if(display_time>3)
                {
                        display_time=0;  //0、1、2、3 四个循环
                }
               
                if(display_time==0)//第0次显示第一个数码管
                {
                        B1=0;B2=1;B3=1;B4=1;        
                        display(Data1);                //显示第1位数据
                }
               
                if(display_time==1)//第1次显示第二个数码管
                {
                        B1=1;B2=0;B3=1;B4=1;        
                        display(Data2);                //显示第2位数据
                }
               
                if(display_time==2)//第2次显示第三个数码管
                {
                        B1=1;B2=1;B3=0;B4=1;        
                        display(Data3);                //显示第3位数据
                }
               
                if(display_time==3)//第3次显示第四个数码管
                {
                        B1=1;B2=1;B3=1;B4=0;        
                        display(Data4);                //显示第4位数据
                }
        }
}
 楼主| 发表于 2016-12-27 21:50:25 | 显示全部楼层
兜兜转转玩了一天还是蛮有意思的  
 楼主| 发表于 2016-12-27 21:52:42 | 显示全部楼层
飞线的效果不太理想  刚开始不停的抖舵  清理一下飞线终于正常了
发表于 2016-12-27 21:57:11 | 显示全部楼层
留下脚印,慢慢看
发表于 2016-12-27 22:03:20 | 显示全部楼层
c比英语难学
发表于 2016-12-27 22:07:09 | 显示全部楼层
路过,帮顶( ̄▽ ̄)
发表于 2016-12-28 00:05:15 | 显示全部楼层
顶贴一种美德!
发表于 2016-12-28 00:29:58 | 显示全部楼层
又一个被学习耽误的孩子
发表于 2016-12-28 00:31:45 | 显示全部楼层
厉害
发表于 2016-12-28 03:03:16 | 显示全部楼层
嗷大喵 发表于 2016-12-28 00:29 舵机测试仪交作业了 舵机 作者:theetboy 8835
又一个被学习耽误的孩子

是能测试舵机速度的?
发表于 2016-12-28 07:33:15 | 显示全部楼层
这个牛啊
发表于 2016-12-28 07:48:07 | 显示全部楼层
上个教程吧,
发表于 2016-12-28 08:02:53 | 显示全部楼层
漂亮!!!
发表于 2016-12-28 08:38:32 | 显示全部楼层
路过,帮顶( ̄▽ ̄)
发表于 2016-12-28 09:44:59 | 显示全部楼层
顶帖,加油!
 楼主| 发表于 2016-12-28 09:45:15 | 显示全部楼层
theetboy 发表于 2016-12-28 03:03 舵机测试仪交作业了 舵机 作者:ldy7474 9417
是能测试舵机速度的?

测不了简单显示一下脉宽而已100/200
发表于 2016-12-31 00:10:58 | 显示全部楼层
不错不错,交作业了。
发表于 2016-12-31 21:24:28 | 显示全部楼层
感谢楼主分享                           
发表于 2017-8-18 07:31:48 | 显示全部楼层
学习学习,值得学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|关于模吧|APP下载|广告报价|手机版|企业会员|商城入驻|联系我们|模吧 ( 黔ICP备2022002348号-1 )

© 2013-2020 Moz8.com 模吧,玩出精彩!