这个项目主要是应用51单片机实现,ad转换+数码管输出、
注意:ad0809这个型号在Proteus中没有所以用ad0808代替仿真。
单片机源程序如下:
- #include "reg51.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- sbit sla=P3^0;//选择输入口定义
- sbit slb=P3^1;
- sbit slc=P3^3;//装置为3.仿真为6
- sbit dia=P0^7;
- sbit ALE=P3^4 ;//AD锁存器允许信号(4)仿真为3
- sbit CLOCK=P3^5;//时钟信号(5)仿真为4
- sbit ST=P3^7;//装置为(7)仿真为5
- sbit EOC=P3^2;//转换完成信号
- sbit OE=P3^6;//允许输出信号装置为(6)仿真为7
- sbit dula=P2^6;//数码管锁存信号,装置为6/7,仿真为0/1
- sbit wula=P2^7;
- u8 code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
-
- u16 t0, votage;
- void delay(u16 i)
- {
- u16 m,n;
- for(m=i;m>0;m--)
- for(n=110;n>0;n--);
- }
- u16 trans(u16 x)//将二进制转化为十进制
- {
-
- u16 d;
- d=(19.6078431372549)*x;
-
- return d;
-
- }
- void display(u16 v)
- {
- P0=0x00;
- dula=1;
- P0=table[v/1000];
- dia=1;
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfe;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[(v%1000)/100];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfd;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[((v%1000)%100)/10];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xfb;
- wula=0;
- delay(2);
-
- P0=0x00;
- dula=1;
- P0=table[v%10];
- dula=0;
- P0=0x00;
- wula=1;
- P0=0xf7;
- wula=0;
- delay(2);
-
-
- }
- void main()
- {
-
- sla=0;//0号作为口输入模拟信号
- slb=0;
- slc=0;
-
- OE=0;
- ST=0;
-
- TMOD=0x01;
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- EA=1;
- ET0=1;
- TR0=1;
-
-
-
- while(1)
- {
- ST=0;ST=1;ST=0;//启动转换
- while(EOC==0)
- {
- OE=1;
- display(trans(P1));
- OE=0;
- }
- trans(P1);
- }
- }
- void T0_time() interrupt 1//TO计时器给ADC提供时钟信号
- {
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- CLOCK=~CLOCK;
- }
复制代码
Keil5工程文件,仿真图在下面jpg图片格式,大家自己打开Proteus画一下吧,下面的附件里面只有代码的Keil文件:
AD_51.rar
(12.8 KB, 下载次数: 45)
|