我用的是proteus8.1 这个软件有的时候很恶心 例如ADC0809仿真的时候会显示没有模型不能仿真 换成ADC0808还显示没有模型 迷醉
0808的元件点击TEXT打开编辑一下就行 我把图放在下面(因为0809我没找到,如果哪位老兄知道请指点我一下谢啦)
实验:用单片机控制ADC0809进行数模转换,调节电位器,使数码管以十进制的方式动态显示经过A/D转换后的数字量。
程序:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit st=P3^0;
- sbit eoc=P3^2;
- sbit oe=P3^1;
- sbit clk=P3^3;
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管 共阳(选CA)
- uchar date,qian,bai,shi,ge,AD0809;
- uint i,j;
- void delayms(uint x)//延时
- {
- for(i=x;i>0;i--)
- for(j=110;j>0;j--);
- }
- void display(uchar qian,uchar bai,uchar shi,uchar ge)//显示程序
- {
- qian=date/1000;
- bai=date%1000/100;
- shi=date%100/10;
- ge=date%10;
- P2=0xff;
- P0=table[qian];
- P2=0xef;
- delayms(50);
- P2=0xff;
- P0=table[bai];
- P2=0xdf;
- delayms(50);
- P2=0xff;
- P0=table[shi];
- P2=0xbf;
- delayms(50);
- P2=0xff;
- P0=table[ge];
- P2=0x7f;
- delayms(50);
- P2=0xff;
- }
- void timer0() interrupt 1//中断 0
- {
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- clk=!clk;
- }
- void init()//初始化
- {
- TMOD=0X01;
- TH0=(65536-2)/256;
- TL0=(65536-2)%256;
- EA=1;
- ET0=1;
- TR0=1;//中断初始化
- clk=0;//时钟
- P1=0xff;
- P2=0xff;
- P0=0xff;
- }
- void main()
- {
- init();
- while(1)
- {
- st=0;
- st=1;//开启AD转换器
- st=0;//停
- while(!eoc);//等数据转完
- oe=1;//允许数据输出
- AD0809=P1;//AD转换器=P1;(读数)
- oe=0;
- date=AD0809;//date=AD转换后的值在数码管上显示
- display(qian,bai,shi,ge);
- }
- }
复制代码
|