51单片机做的数字电压表仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
数字电压表电路原理图如下:
数字电压表程序流程图和框图:
元件清单:
元件名 | | | | 电容104 | | | | 电容27 | | | | 电阻100 | | | | 电阻510 | | | | 电阻1K | | | | 电阻10K | | | | 晶振12M | | | | 滑动开关 | | | | 触动开关 | | | | 排针 | | | | 芯片0831 | | | | 芯片AT89C52 | | | | 二极管1N418 | | | | 发光二极管 | | | | 极性电容 | | | | 三极管9012 | | | | 4位数码管 | | | | 芯片底座 | | | | PCB板 | | | | USB下载器 | | | | 杜邦线 | | | | 合计 | | | |
单片机源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[]={
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf9,0x80,0x90,
- 0x40,0x79,0x24,0x30,0x19,0x12,
- 0xc1};
- uchar code aa[]={0x01,0x02,0x04,0x08};
- sbit cs1=P1^0;
- sbit scl1=P1^1;
- sbit sda1=P1^2;
- uchar tmpdata[]={0,0,0,0};
- uchar readad0831();
- void delay(uint g)
- {
- uint u;
- for(u=0;u<g;u++);
- }
- void display()
- {
- uchar i;
- for(i=0;i<4;i++)
- {
- P0=aa[i];
- P2=table[tmpdata[i]];
- delay(100);
- P2=0xff;
- }
- }
- void main()
- {
- uint i=0,tmp;
- while(1)
- {
- i++;
- if(i==255)
- {
- i=0;
- tmp=readad0831()*100;
- tmp=tmp/51;
- tmpdata[0]=tmp/100;
- tmpdata[0]+=10;
- tmp=tmp%100;
- tmpdata[1]=tmp/10;
- tmpdata[2]=tmp%10;
- tmpdata[3]=16;
- }
- display();
- }
- }
- uchar readad0831()
- {
- uchar i=0,tmp=0;
- sda1=1;
- cs1=0;
- _nop_();
- _nop_();
- scl1=0;
- _nop_();
- _nop_();
- scl1=1;
- _nop_();
- _nop_();
- scl1=0;
- _nop_();
- _nop_();
- scl1=1;
- _nop_();
- _nop_();
- scl1=0;
- _nop_();
- _nop_();
- for(i=0;i<8;i++)
- {
- tmp=_crol_(tmp,1);
- if(sda1)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数字电压表.zip
(237.15 KB, 下载次数: 418)
|