【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调
【Proteus仿真】51单片机+DAC0832+数码管制作0-25V电压可调
- 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 148 149 150 151 152 153 154
| //单片机+ADC0832实现量程0~25V数字电压表的仿真程序 #include<reg51.h> #include<intrins.h>
sbit CS=P3^5; sbit CLK=P3^3; sbit DI=P3^4; sbit DO=P3^4; sbit dot=P0^5; //小数点
unsigned char dat=0x00; unsigned char nums[]={0x00,0x00,0x00,0x00}; unsigned char channel; //转换通道 unsigned char LEDS[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xB8,0x20,0x28}; //共阳4位数码管段码,字符显示从'0'到'9'
unsigned char ADC0832(unsigned char channel) //模数转换 { unsigned char i; unsigned char x=0x00; unsigned char y=0x00;
CLK=0; //初始化 DI=1; \_nop\_(); CS=0; \_nop\_(); CLK=1; \_nop\_();
if(channel==0x00) //通道选择 { //通道0 CLK=0; DI=1; \_nop\_(); CLK=1; \_nop\_(); CLK=0; DI=0; \_nop\_(); CLK=1; \_nop\_(); } else //通道1 { CLK=0; DI=1; \_nop\_(); CLK=1; \_nop\_(); CLK=0; DI=1; \_nop\_(); CLK=1; \_nop\_(); }
CLK=0; DI=1; for(i=0;i<8;i++) //读取ADC0832输出的前8位数据 { x<<=1; \_nop\_(); CLK=1; \_nop\_(); CLK=0; if(DO==1) { x|=0x01; } else { x|=0x00; } } for(i=0;i<8;i++) //读取ADC0832输出的后8位数据 { y>>=1; if(DO==1) { y|=0x80; } else { y|=0x00; } \_nop\_(); CLK=1; \_nop\_(); CLK=0; } if(x==y) //校验,比较前8位与后8位的值 { dat=x; } \_nop\_(); CS=1; //释放ADC0832 DO=1; CLK=1; return dat; }
void Convert(unsigned char dat0) //数据处理 { unsigned int x; x=dat0\*0.0196\*100\*5; nums[0]=x/1000; nums[1]=x%1000/100; nums[2]=x%1000%100/10; nums[3]=x%1000%100%10; }
void Delay() //数码管显示 { unsigned char i,j; for(i=0;i<1;i++) { for(j=0;j<20;j++); } }
void Display() { P0=LEDS[nums[0]]; P2 =~0xFE; Delay(); P2 &=0xF0;//消隐
P0=LEDS[nums[1]]; dot=0; P2 =~0xFD; Delay(); P2 &=0xF0;
P0=LEDS[nums[2]]; P2 =~0xFB; Delay(); P2 &=0xF0;
P0=LEDS[nums[3]]; P2 =~0xF7; Delay(); P2 &=0xF0; }
void main() { while(1) { dat=ADC0832(channel); Convert(dat); Display(); } }
|
程序源码和仿真资源
本实验基于Proteus8.9平台。
1 2 3
| 链接:https://pan.baidu.com/s/1EF00QBDQLxYRE2aznrXX1A 提取码:qpbp
|
| 人生像攀登一座山, 而找寻出路, 却是一种学习的过程, 我们应当 在这过程中, 学习稳定、 冷静, 学习如何从慌乱中找到生机。 —— 席慕蓉 |
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!