单片机/MCU论坛
直播中

杨益

11年用户 21经验值
擅长:可编程逻辑
私信 关注
[问答]

那位大神帮我看看三位半的数字电压表

请各位大神帮我看看!程序调试不成功!小弟初学者!调试了好久!找了许多资料还是没发现问题!麻烦那位大神帮我看看!
  #include
  #include
  ***it ST=P3^0; //ADC0809启动转换
  ***it OE=P3^1; //允许ADC0809输出数据
  ***it EOC=P3^2; //ADC0809转换结束信号   
  ***it BEEP=P3^3;   
  ***it V1=P3^4;    //200V档位测试标志位
  ***it V2=P3^5;     //20V档位测试标志位
  ***it V3=P3^6;    //2V档位测试标志位
  ***it V4=P3^7;    //200mV档位测试标志位
  ***it led=P0^7;
  unsigned int h;  
  unsigned char digit[4];
  unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  void delay(unsigned int tc)//带小数点编码 /*延时*/
  {
          while(tc!=0)
          {
                unsigned int i;
                for(i=0;i<100;i++)
                {
                        tc--;
                }
        }
  }  /*ADC0809转换子程序*/  
  unsigned char adc0809() //读AD0809子程序
  {  
          unsigned char adda;
        ST=0;   
        OE=0; //读AD0809准备   
        P1=0xff; //先把ADC0809的输出清0
        ST=1;
        ST=0; //启动转换
        while(EOC==1);// 如果有输出中断,使能读功能,并读数据
        {
                OE=1;  
                adda=P1;  
                OE=0;
        }
        return(adda);//返回最后读出数据
  }
  /*ADC0809转换数据处理*/
   unsigned int dacl() //AD0809读出数据处理
   {
            unsigned char x;
         unsigned int dady=0;
         for(x=0;x<10;x++)  
         {dady=adc0809()+dady;}  
         dady=dady/10; //求平均值,提高精度
         return(dady);//返回处理结果
   }
   void loop(void)
   {
     while(h==1)
        {
                 BEEP=!BEEP;
                delay(100);
                BEEP=!BEEP;
                break;
         }
   }
   void led_display(float val)//显示函数
   {
         if(V1==0) //200V档
         {
                 val=val*5000/255;
                if(val>2000||val<200)
                {
                  led=0;
                  h=1;
                  loop();
                 }
                 else  if(val>200)
                {
                        digit[3]=val/1000;
                        val=val-1000*digit[3];
                        digit[2]= val/100;
                        val=val-100*digit[2];
                        digit[1]=val/10;
                        val=val-10*digit[1]; //此后选择带小数点编码
                         digit[0]=val*10/10;  
                        /*将十进制数转换成字符*/
                        digit[3]=table[digit[3]];
                        digit[2]=table[digit[2]];
                        digit[1]=table[digit[1]+10];
                        digit[0]=table[digit[0]];
                 }
          }
         else if(V2==0) //20V档
         {
                   val= 5000*val/255;
                if(val>2000||val<200)
            {
                        h=1;
                        loop();         
                }
                else
            {
                         digit[3]=val/1000;
                        val=val-1000*digit[3];
                        digit[2]=val/100;
                        val=val-100*digit[2]; //此后选择带小数点编码
                        digit[1]=val/10;
                        val=val-10*digit[1];
                        digit[0]=val*10/10;
                        /*将十进制数转换成字符*/
                        digit[3]=table[digit[3]];
                        digit[2]=table[digit[2]+10];
                        digit[1]=table[digit[1]];
                        digit[0]=table[digit[0]];
                }
          }
         else if(V3==0) //2V档
          {
                   val=5000*val/255;
                 if(val>2000||val<200)
                {
                          h=1;
                        loop();
                 }
                 else
                {
                        digit[3]=val/1000;
                        val=val-1000*digit[3]; //此后选择带小数点编码
                        digit[2]=val/100;
                        val=val-100*digit[2];
                        digit[1]=val/10;
                        val=val-10*digit[1];
                        digit[0]=val*10/10;
                        /*将十进制数转换成字符*/
                        digit[3]=table[digit[3]];
                        digit[2]=table[digit[2]+10];
                        digit[1]=table[digit[1]];
                        digit[0]=table[digit[0]];
                 }
          }
         else if(V4==0) //200mV档
          {
                 val= 5000* val/255;//将伏转化为毫伏
                 if(val>2000)
                {
                        h=1;
                        loop();
                 }
                 else
                {
                        digit[3]=val/1000;
                        val=val-1000*digit[3];
                        digit[2]=val/100;
                        val=val-100*digit[2];
                        digit[1]=val/10;
                        val=val-10*digit[1];//此后选择带小数点编码
                        digit[0]=val*10/10;
                        /*将十进制数转换成字符*/
                        digit[3]=table[digit[3]];
                        digit[2]=table[digit[2]];
                        digit[1]=table[digit[1]];
                        digit[0]=table[digit[0]];
                 }
          }
        }
        void main()
   {
                 int i;
                int j=3;
                int k;
                unsigned char fuhao[4];
                BEEP=0;// 蜂鸣器初始化'
                led_display(dacl());//读值显示
                for(i=3;i>=0;i--)
           {
                         if(digit[i]!=0xc0)
                   {
                                   fuhao[j]=digit[i];
                                j=j--;
                        }
                        for(k=0;k<4;k++)
                   {
                          
                                   P0=0X01<                                 P2=fuhao[k];
                                delay(10);
                        }
                }
        }         


回帖(11)

刘方南

2015-5-22 23:34:13
我给你个东西,研究一下应该就知道了!!
举报

杨益

2015-5-22 23:46:56
引用: 刘方南 发表于 2015-5-22 23:34
我给你个东西,研究一下应该就知道了!!

前辈!我是想问问  我的那个电压表使用手动切换量程的  !切换了怎么不行!  逻辑上感觉没问题!但运行的时候就不行了!
举报

赵俊

2015-5-23 20:17:49

好东西啊 谢谢楼主分享
举报

杨益

2015-5-23 20:44:44
引用: swordinhand 发表于 2015-5-23 20:17
好东西啊 谢谢楼主分享

这个还没调试成功的!程序有问题的!!!!!!!
举报

杨益

2015-5-23 20:45:20
引用: swordinhand 发表于 2015-5-23 20:17
好东西啊 谢谢楼主分享

这个还没调试成功的!程序有问题的!程序放入硬件仿真不成功的!
举报

welove

2015-8-4 11:16:16
好东西啊 谢谢楼主分享
举报

罗先生

2016-3-5 23:07:20
好东西谢谢分享
举报

阿喀琉斯初代

2016-6-27 13:23:51
可以啊
              victory
举报

tttt

2016-12-18 19:30:49
谢谢分享!
举报

zhang168shen

2016-12-19 08:10:14
学习一下,谢谢分享
举报

laishenahui

2016-12-28 21:33:48

学习学习~~~~~~~~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分