模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

4145查看 | 20回复

[DIY交流] 致敬 我爱萝丽,做数显的舵机测试仪

[复制链接]
发表于 2021-1-9 15:51:33 | 显示全部楼层 |阅读模式

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

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

x
致敬 我爱萝丽,做数显的舵机测试仪
致敬 我爱萝丽,做数显的舵机测试仪 舵机,如果想要,很简单,led 作者:airwolf001 2278

致敬 我爱萝丽,做数显的舵机测试仪 舵机,如果想要,很简单,led 作者:airwolf001 6034

致敬 我爱萝丽,做数显的舵机测试仪 舵机,如果想要,很简单,led 作者:airwolf001 428

数码管其实就是很多个发光LED,排列成一个“8”字形,控制数码管跟我们之前学习的点亮LED完全一样,只是原来是点亮一个,现在要点亮4*8=32个!


知识点(46)数码管结构
致敬 我爱萝丽,做数显的舵机测试仪 舵机,如果想要,很简单,led 作者:airwolf001 3965
数码管的结构很简单,8个LED构成一个数字。如果想要显示“3”,只需要让A、B、C、D、G为高电平(引脚11、7、4、2、5),其余引脚为低电平即可。



单片机的引脚图:
致敬 我爱萝丽,做数显的舵机测试仪 舵机,如果想要,很简单,led 作者:airwolf001 6325


先写一个小程序,让数字从0到9自动变化起来吧:

  • #include<reg51.h>
  • sfr P2M0=0x96;     //声明 P2引脚模式寄存器
  • sfr P3M0=0xb2;     //声明 P3引脚模式寄存器
  • sbit DA=P2^4;                        //数码管每个引脚
  • sbit DB=P3^2;
  • sbit DC=P3^6;
  • sbit DD=P2^0;
  • sbit DE=P2^1;
  • sbit DF=P2^3;
  • sbit DG=P3^5;
  • sbit DP=P3^7;
  • sbit B1=P2^5;                        //四个数码管的引脚定义
  • sbit B2=P2^2;
  • sbit B3=P3^3;
  • sbit B4=P3^4;
  • void Delay1ms()                //@12.000MHz
  • {
  •         unsigned char i, j;
  •         i = 12;
  •         j = 169;
  •         do
  •         {
  •                 while (--j);
  •         } while (--i);
  • }
  • void delay_n_ms(unsigned int n) //延时n毫秒函数
  • {
  •         while(n)
  •         {
  •                 Delay1ms();
  •                 n=n-1;//每循环一次n减小1
  •         }
  • }
  • main()
  • {
  •         P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011
  •         P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值1110 0100
  •         B1=0;
  •         B2=0;
  •         B3=0;
  •         B4=0;//四个数码管都显示
  •         while(1)
  •         {
  •                 DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=0;//显示“0”
  •                 delay_n_ms(500);                //延时0.5秒
  •                 DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;//显示“1”
  •                 delay_n_ms(500);
  •                 DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=0;//显示“2”
  •                 delay_n_ms(500);
  •                 DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=0;//显示“3”
  •                 delay_n_ms(500);
  •                 //…………
  •                 //…………试着自己添加显示其他数字的程序
  •         }
  • }

[color=rgb(51, 102, 153) !important]复制代码

[color=rgb(51, 102, 153) !important]


评分

参与人数 1牛币 +3 收起 理由
板栗哥 + 3 很给力!

查看全部评分

 楼主| 发表于 2021-1-9 15:53:00 | 显示全部楼层
#include<reg51.h>

sfr P2M0=0x96;     //声明 P2引脚模式寄存器
sfr P3M0=0xb2;     //声明 P3引脚模式寄存器


sbit DA=P2^4;                        //数码管每个引脚
sbit DB=P3^2;
sbit DC=P3^6;
sbit DD=P2^0;
sbit DE=P2^1;
sbit DF=P2^3;
sbit DG=P3^5;
sbit DP=P3^7;

sbit B1=P2^5;                        //四个数码管的引脚定义
sbit B2=P2^2;
sbit B3=P3^3;
sbit B4=P3^4;

void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}

void delay_n_ms(unsigned int n) //延时n毫秒函数
{
        while(n)         
        {
                Delay1ms();
                n=n-1;//每循环一次n减小1
        }   
}


main()
{
        P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011
        P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值1110 0100
        
        B1=0;
        B2=0;
        B3=0;
        B4=0;//四个数码管都显示
        
        
        while(1)
        {
                DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=0;//显示“0”
                delay_n_ms(500);                //延时0.5秒
               
                DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;//显示“1”
                delay_n_ms(500);
               
                DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=0;//显示“2”
                delay_n_ms(500);
               
                DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=0;//显示“3”
                delay_n_ms(500);               
               
                                        DA=0;DB=0;DC=1;DD=0;DE=0;DF=1;DG=1;DP=0;//显示“4”
                delay_n_ms(500);   
                                       
                                        DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;//显示“5”
                delay_n_ms(500);
                                       
                                        DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;//显示“6”
                delay_n_ms(500);   
                                       
                                        DA=1;DB=1;DC=1;DD=0;DE=0;DF=1;DG=0;DP=0;//显示“7”
                delay_n_ms(500);   
                                       
                                        DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;//显示“8”
                delay_n_ms(500);   
                                       
                                        DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;//显示“9”
                delay_n_ms(500);   
                                       
                //…………
                //…………
        
        
        
               
        }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-9 16:07:21 | 显示全部楼层
#include<reg51.h>

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


sbit DA=P2^4;                        //数码管每个引脚
sbit DB=P3^2;
sbit DC=P3^6;
sbit DD=P2^0;
sbit DE=P2^1;
sbit DF=P2^3;
sbit DG=P3^5;
sbit DP=P3^7;

sbit B1=P2^5;                        //四个数码管的引脚定义
sbit B2=P2^2;
sbit B3=P3^3;
sbit B4=P3^4;


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

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

unsigned char adc;          //保存AD转换结果

void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}

void delay_n_ms(unsigned int n) //延时n毫秒函数
{
        while(n)         
        {
                Delay1ms();
                n=n-1;//每循环一次n减小1
        }   
}

void Delay50us()                //@12.000MHz
{
        unsigned char i, j;

        i = 1;
        j = 146;
        do
        {
                while (--j);
        } while (--i);
}

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”
        
}


main()
{
        P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011
        P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值1110 0100
        
        
        while(1)
        {
                delay_n_ms(4);//系统周期4ms
               
                P1ASF=0x80;  //设置P1.7引脚
                ADC_CONTR=0x88+7;  //开始P1.7引脚转换
                Delay50us();   //等待AD转换完成
                adc=ADC_RES;  //读取转换结果
               
                Data1=0;
                Data2=adc/100;          //百位数据
                Data3=adc%100/10; //十位数据
                Data4=adc%10;     //个位数据
               
                ///////////////////////////////////////////////////////
                //显示程序模块化,只需要改变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位数据
                }
                        
               
        }
}

以上是AD转换的程度
回复 支持 反对

使用道具 举报

发表于 2021-1-10 16:20:05 | 显示全部楼层
看帖回帖是美德!:lol
回复 支持 反对

使用道具 举报

发表于 2021-1-11 06:18:19 来自手机 | 显示全部楼层
很简单嘛,不过我不会
回复 支持 反对

使用道具 举报

发表于 2021-1-11 15:54:52 | 显示全部楼层
谢谢分享     代码不会
回复 支持 反对

使用道具 举报

发表于 2021-1-20 15:17:54 | 显示全部楼层
谢谢!学习一下,学习一下
回复 支持 反对

使用道具 举报

发表于 2021-1-22 17:47:27 | 显示全部楼层
谢谢!学习一下,学习一下
回复 支持 反对

使用道具 举报

发表于 2021-1-24 21:51:19 来自手机 | 显示全部楼层
特别想做一个,要是直接有固件就好了
回复 支持 反对

使用道具 举报

发表于 2021-1-24 21:52:51 来自手机 | 显示全部楼层
咱新手,弄不了代码,铬铁还是可以的
回复 支持 反对

使用道具 举报

发表于 2021-3-1 10:20:00 | 显示全部楼层
谢谢!学习一下!
回复 支持 反对

使用道具 举报

发表于 2021-3-4 09:20:20 | 显示全部楼层
各位是要程序吗?看看我这个能用不

萝丽舵机测试仪A版HEX.rar

2.45 KB, 下载次数: 9, 下载积分: 牛币 -10

回复 支持 反对

使用道具 举报

发表于 2021-4-18 15:32:09 | 显示全部楼层
博主的图纸可以发份不,HEX文件是否可以分享一份。
回复 支持 反对

使用道具 举报

发表于 2021-12-13 17:33:07 | 显示全部楼层
新人报道 发表于 2021-3-4 09:20
各位是要程序吗?看看我这个能用不

这个对应的电路图是那个,也一并发上来可以吗?
回复 支持 反对

使用道具 举报

发表于 2021-12-14 00:57:18 | 显示全部楼层
谢谢楼主论坛有你更精彩!
回复 支持 反对

使用道具 举报

发表于 2022-1-8 09:05:57 来自手机 | 显示全部楼层
着手搞起来,也发个贴
回复 支持 反对

使用道具 举报

发表于 2022-1-23 16:24:40 | 显示全部楼层
为了存币,看帖必回
回复 支持 反对

使用道具 举报

发表于 2022-4-3 11:59:47 | 显示全部楼层
为了存币,看帖必回
回复 支持 反对

使用道具 举报

发表于 2022-5-15 21:26:36 | 显示全部楼层
airwolf001 发表于 2021-1-9 16:07
#include

sfr P2M0=0x96;     //声明 P2引脚模式寄存器

学习啦!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

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