|
1黑币
本人毕业设计是数字交流毫伏表,测量范围为0.2v-200v,自动换挡,但是液晶屏显示总是不停变换电压值,
单片机源程序:
- #include<reg52.h>
- #include<intrins.h>
- #include"LCD.h"
- sbit AD_EOC=P3^0;
- sbit AD_START=P3^3;
- sbit AD_OE=P3^4;
- sbit A=P2^4;
- sbit BB=P2^5;
- sbit s1=P2^0;
- sbit s2=P2^1;
- sbit s3=P2^2;
- sbit s=P2^3;
- #define _200v_on {s1=0;s2=0;s3=0;}
- #define _20v_on {s1=1;s2=0;s3=0;}
- #define _2v_on {s1=0;s2=1;s3=0;}
- #define _200mv_on {s1=0;s2=0;s3=1;}
- void main()
- {
- float DATA,temp2;
- // float temp;
- LcdInit(); //òo¾§3õê¼»ˉ
- LCD_word(0x80,"voltag:");
-
-
- while(1)
- _200v:
- {
- _200v_on;
- AD_START=0;
- AD_OE=0;
- AD_START=1;
- _nop_();
- AD_START=0;
-
- while(!AD_EOC);
- AD_OE=1;
- temp2=P1;
- AD_OE=0;
- if(temp2<3)
- {
- goto _20v;
- }
- DATA=(temp2*1.0/255*5)*40;
- LCD_DATA(0x87,DATA);
- LCD_word(0x80+15,"V");
-
- _20v:
- _20v_on;
- AD_START=0;
- AD_OE=0;
- AD_START=1;
- _nop_();
- AD_START=0;
-
- while(!AD_EOC);
- AD_OE=1;
- temp2=P1;
- AD_OE=0;
- if(temp2<3)
- {
- goto _2v;
- }
- DATA=(temp2*1.0/255*5)*4;
- LCD_DATA(0x87,DATA);
- LCD_word(0x80+15,"V");
-
- _2v:
- _2v_on;
- AD_START=0;
- AD_OE=0;
- AD_START=1;
- _nop_();
- AD_START=0;
-
- while(!AD_EOC);
- AD_OE=1;
- temp2=P1;
- AD_OE=0;
- if(temp2<2)
- {
- goto _200mv;
- }else if(temp2>200)
- {
- goto _200v;
- }
- DATA=(temp2*1.0/255*5)*0.4;
- LCD_DATA(0x87,DATA);
- LCD_word(0x80+15,"V");
-
- _200mv:
- _200mv_on;
- s=1;
- AD_START=0;
- AD_OE=0;
- AD_START=1;
- _nop_();
- AD_START=0;
-
- while(!AD_EOC);
- AD_OE=1;
- temp2=P1;
- AD_OE=0;
- if(temp2>200)
- {
- goto _2v;
- }
- DATA=temp2*1.0/255*5;
- LCD_DATA(0x87,DATA);
- LCD_word(0x80+15,"V");
- }
复制代码
下面是电路图和程序,求大神帮我看看,指点指点
|
|