|
希望能对各位有所帮助!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg52.h>
- sbit adclk=P2^5;
- sbit addi=P2^0;
- sbit addo=P2^1;
- sbit adcs=P2^2;
- sbit dian=P0^7;
- sbit beep=P2^4;
- sbit wela1=P1^0;
- sbit wela2=P1^1;
- sbit wela3=P1^2;
- sbit wela4=P1^3;
- char code table[]=
- { 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- void Delay(unsigned char x)
- {
- unsigned char i;
- for(i=0;i<x;i++);
-
- }
- void Delay1(unsigned char y)
- {
- unsigned char i,j;
- for(i=0;i<y;i++)
- for(j=110;j>0;j--);
-
- }
- unsigned char ADC0832(void)
- {
- unsigned char i,data_c;
- data_c=0;
- adcs=0;
- addo=0;
- Delay(2);
- adclk=0;
- Delay(2);
- addi=1; //第一个脉冲 启动AD转换器
- adclk=1;
- Delay(2);
- adclk=0;
- Delay(2);
- adclk=1; // 第二的脉冲 送出1
- Delay(2);
- adclk=0;
- Delay(2);
- addi=0;
- adclk=1; //第三个脉冲 送出0
- Delay(2);
- adclk=0;
- addi=0; //D1口转为高阻态
- addo=1; //D0口脱离高阻态 为输出做准备
- for (i=0;i<8;i++)//读出数据
- {
- adclk=1;
- Delay(2);
- adclk=0;
- Delay(2);
- data_c=(data_c<<1)|addo;
- }
- adcs=1;
- return(data_c);
- }
- void display(char bai,char shi,char ge)//数码管显示
- {
- wela1=0;
- dian=1;
- Delay1(5);
- wela2=1;
- P0=0x00;
- Delay1(1);
-
- wela1=0;
- P0=table[bai];
- Delay1(5);
- wela1=1;
- P0=0x00;
- Delay1(1);
-
- wela2=0;
- P0=table[shi];
- Delay1(5);
- wela2=1;
- P0=0x00;
- Delay1(1);
-
- wela3=0;
- P0=table[ge];
- Delay1(5);
- wela3=1;
- P0=0x00;
- Delay1(1);
-
- }
- void main()
- {
- unsigned int adval,shi,bai,ge;
- while(1)
- {
- adval=ADC0832();
- adval=2*adval;
- bai=adval/100;
- shi=adval%100/10;
- ge=adval%10;
- display(bai,shi,ge);
- if(bai>=3)
- {
- beep=0;
- }
- else if(bai<=3)
- {
- beep=1;
- }
- }
- }
复制代码
所有资料51hei提供下载:
adc.zip
(72.14 KB, 下载次数: 108)
|
|