模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

7540查看 | 27回复

[DIY交流] 萝莉电压表显示电压

[复制链接]
发表于 2016-12-4 19:38:05 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 我是天才 于 2016-12-15 22:20 编辑

萝莉电压表程序改版,将adc转换数据变为电压!   

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
接线:由于使用了数组,所以需要一个完整的P口(即Px.0到Px.7全都有)先百度到四位数码管的原理图,数码管的a段接P0.0,b段接P0.1......以此类推,位选可以按照程序的定义来修改,在此就不做过多讲解了。如果是使用的stc15w408的话,可以选一个完整的p口,将段选接上,在显示时将P0改为对应的P口就好了
   萝莉大神的程序讲的既简单有明了,在电压表制作课程中留下了一个作业,将adc转化为电压,楼主尽自己的微薄之力,将程序改了一下,变成了可以显示电压表,转化过程全是自己的理解,如有不正确的地方欢迎指出,共同进步。在程序中还注明了改变量程的方法,大家可以自行改变量程



引入新知识:u8 code led1[]={};新定义了一个数组,里面存上数字0到9的字模,将0到9字模编码,通过改变中括号里的值来改变显示哪一位,例如P0=led1[a];如果a的值为2,则Po=0xA4,即10100100,由于实用的是共阳数码管,所以遇到0的数码管的段位亮,于是就显示出2,下面的b和c同理,只不过b位是带小数点的,这样可以精确到小数点后一位
萝莉电压表显示电压 电压表,萝莉 作者:我是天才 5912   没有电压时显示00.0v
萝莉电压表显示电压 电压表,萝莉 作者:我是天才 687 手机电池03.7v






像往常一样,下面奉上程序:


  • #include<reg51.h>
  • #define u8 unsigned char
  • #define u16 unsigned int
  • sbit L1=P2^7;                   //数码管引脚可自行更改
  • sbit L2=P2^6;
  • sbit L3=P2^5;
  • sbit L4=P2^4;
  • sfr P2M0=0x96;            //P2引脚模式寄存器
  • sfr P1ASF=0x9D;           //P1模拟功能寄存器
  • sfr ADC_RES=0xBD;         //ADC转换结果寄存器
  • sfr ADC_CONTR=0xBC;        //ADC控制寄存器
  • u8 a,b,c,d;
  • u16 adc;
  • u8 show;
  • u16 dc;
  • void Delay4ms()                //@12.000MHz
  • {
  •         unsigned char i, j;
  •         i = 47;
  •         j = 174;
  •         do
  •         {
  •                 while (--j);
  •         } while (--i);
  • }
  • void Delay50us()                //@12.000MHz
  • {
  •         unsigned char i, j;
  •         i = 1;
  •         j = 146;
  •         do
  •         {
  •                 while (--j);
  •         } while (--i);
  • }
  • u8 code led1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
  •                       //不带小数点
  • u8 code led2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};
  •                                           //带小数点
  •                    //这个程序适用于共阳数码管,如果是按照萝莉大神的教程做的共阴数码管
  •                    // 只需将led1[],led2[],code里的数模改成共阴的即可
  • main()
  • {
  • P2M0=0xf0;                //强推挽  11110000, 2.7, 2.6, 2.5, 2.4脚为强推挽模式
  • a=b=c=d=0;
  • show=0;
  • L1=L2=L3=L4=0;
  •    while(1)
  •    {
  •            Delay4ms();
  •           show++;
  •           if(show>4)
  •           {show=0;}
  •       P1ASF=0x80;
  •           ADC_CONTR=0x8f;                                //         adc           实际电压
  •           Delay50us();                                        //         256                5v
  •           adc=ADC_RES;                                    //         158                3.1v
  •                                                                     //          adc                dc

  •                   adc=adc*1;          //将1改成2、3等等,即可获得量程为5v的2、3的倍数,此时测量电路则需使用电阻分压,即测量外接电压的1/2,1/3等等


  •           adc=adc*5; //        按照上面的数据,以单片机供电电压作为基准电压,将adc乘以基准电压5再对adc做如下运算即可得出实际电压

  •           dc=adc*10/256+adc*10%256/256;            //将adc乘以10,如果外接3.1v,那么转化结果是31v,在第二个数码管加一个小数点显示的就是3.1v
  •                                                               
  •           a=dc/100;                    //十位
  •           b=dc%100/10;           //个位
  •           c=dc%10;                //小数位
  •           if(show==0)                                  //显示: X X . X v
  •           {
  •             L1=1,L2=0,L3=0,L4=0;
  •                 P0=led1[a];
  •           }
  •           if(show==1)
  •           {
  •             L1=0,L2=1,L3=0,L4=0;
  •                 P0=led2;
  •           }
  •           if(show==2)
  •           {
  •             L1=0,L2=0,L3=1,L4=0;
  •                 P0=led1[c];
  •           }
  • i
  •           if(show==3)                                      //第四位显示“V”
  •           {
  •             L1=0,L2=0,L3=0,L4=1;
  •                 P0=0xc1;         
  •         }                          
  • }
  • }

发表于 2016-12-4 20:53:38 | 显示全部楼层
顶一顶
发表于 2016-12-4 21:08:45 | 显示全部楼层
感谢楼主分享                                      
发表于 2016-12-4 21:20:23 | 显示全部楼层
厉害了
发表于 2016-12-4 21:27:25 | 显示全部楼层
顶一个
发表于 2016-12-4 21:27:26 | 显示全部楼层
程序目前还看不懂呀
发表于 2016-12-4 21:32:09 | 显示全部楼层
牛人无处不在,.
发表于 2016-12-4 21:44:34 | 显示全部楼层
路过,6666666
发表于 2016-12-4 21:45:31 | 显示全部楼层
顶!!!
发表于 2016-12-4 22:08:46 | 显示全部楼层
拿分走人,感谢楼主的奉献~
 楼主| 发表于 2016-12-4 22:56:43 | 显示全部楼层
panlongdian 发表于 2016-12-4 21:27
程序目前还看不懂呀

可以直接在萝莉的程序上修改,具体方法是新定义一个dc,然后把71到78行复制过去,把a,b,c,改成date1,date2,date3
发表于 2016-12-4 23:00:52 | 显示全部楼层
帮顶一下
发表于 2016-12-4 23:45:44 | 显示全部楼层
谢谢楼主分享!!!
发表于 2016-12-5 00:12:37 | 显示全部楼层
厉害了
发表于 2016-12-5 07:41:19 | 显示全部楼层
狼哥来顶一个
发表于 2016-12-5 08:39:26 | 显示全部楼层
楼主你真是天才。
发表于 2016-12-5 09:12:01 | 显示全部楼层
感谢,让我学会了数组。
 楼主| 发表于 2016-12-5 12:41:01 | 显示全部楼层

谢狼哥
 楼主| 发表于 2016-12-5 12:42:33 | 显示全部楼层
田不辣 发表于 2016-12-5 09:12
感谢,让我学会了数组。

哈哈,能帮到大家就行
发表于 2016-12-5 19:23:28 | 显示全部楼层
楼主好人,辛苦了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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