【Proteus仿真】自动量程(范围<10V)切换数字电压表
【Proteus仿真】自动量程(范围<10V)切换数字电压表
- Proteus仿真

示例程序代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| #include<reg52.h> unsigned char code dispbitcode[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管断码 unsigned char dispbuf[4]; unsigned int i; unsigned int j; unsigned int getdata; unsigned int temp; unsigned int temp1; unsigned char count; unsigned char d; sbit ST=P2^4; sbit OE=P2^5; sbit EOC=P2^6; sbit CLK=P2^7; sbit ADD_A=P3^4; //选择AD的输入端 sbit ADD_B=P3^5; sbit ADD_C=P3^6; sbit D0=P2^0; //数码管的位控制端 sbit D1=P2^1; sbit D2=P2^2; sbit D3=P2^3; sbit P17=P1^7; //确定小数点的位置 sbit s1=P3^2; sbit s2=P3^3; #define \_v0\_5 {s1=1;s2=0;} #define \_v10 {s1=0;s2=1;}
unsigned char m;
void TimeInitial(); void Delay(unsigned int i);
/\*定时器1初始化函数\*/ void TimeInitial() { TMOD=0x10; TH1=(65536-200)/256; TL1=(65536-200)%256; EA=1; ET1=1; TR1=1; } /\*延时函数\*/ void Delay(unsigned int i) { unsigned int j; for(; i>0; i--) { for(j=0; j<125; j++) {;} } } /\*数码管显示函数\*/ void Display() { P1=dispbitcode[dispbuf[3]];
D0=0; D1=1; D2=1; D3=1; Delay(10); P1=0x00;
P1=dispbitcode[dispbuf[2]]; if(m==2) { P17=1; } D0=1; D1=0; D2=1; D3=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[1]]; if(m==10) { P17=1; } D0=1; D1=1; D2=0; D3=1; Delay(10); P1=0x00; P1=dispbitcode[dispbuf[0]]; D0=1; D1=1; D2=1; D3=0; Delay(10); P1=0x00; } void main() { TimeInitial(); ADD_A=0; ADD_B=0; ADD_C=0; _v10; m=2; while(1) {
ST=0; OE=0; ST=1; ST=0; while(EOC==0); OE=1; getdata=P0; OE=0; if ((s1==0) && (s2==1) && (getdata<6)) { ADD_A=1; _v0_5;
m=10; } else if ((s1==1)&&(s2==0) && (getdata>254)) { ADD_A=0; _v10;
m=2; }
temp=(getdata\*1.0/255)\*500\*m; dispbuf[0]=temp%10; dispbuf[1]=temp/10%10; dispbuf[2]=temp/100%10; dispbuf[3]=temp/1000; Display();
} }
void t1(void) interrupt 3 using 0 { TH1=(65536-200)/256; TL1=(65536-200)%256; CLK=~CLK; }
|
仿真资源和程序源码
1 2 3
| 链接:https://pan.baidu.com/s/12-rNBvoMRujGYpEN550fEQ 提取码:986e
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!