本帖最后由 yypl907805478 于 2021-11-28 19:43 編輯
數模轉換和模數轉換以及模數數模轉換
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (24.2 KB, 下載次數: 36)
下載附件
2021-11-28 04:04 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <absacc.h>
- #define adc XBYTE[0xb000]
- #define led_wei XBYTE[0x8000]
- #define led_duan XBYTE[0x9000]
- unsigned char idata adc_val[31];
- unsigned char code ledseg[]={
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0-7
- 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E, //8-15
- 0xFF };
- unsigned char code ledsel[]={0x01,0x02,0x04,0x08};
- unsigned char adc_dat[4];
- void delayms(unsigned int t)
- {
- unsigned char i;
- while(--t)
- for(i=0;i<125;i++)
- { ; }
- }
- void adc_start(void)
- {
- adc=0xff;
- }
- unsigned char adc_change(void)
- {
- unsigned char V;
- adc_start();
- while(INT0==1);
- V=adc;
- return(V);
- }
- void adc_bcd(void)
- {
- float x;
- unsigned char i, aver;
- unsigned int sum=0;
- for(i=0;i<31;i++)
- adc_val[i]=adc_change();
- for(i=0;i<31;i++)
- sum+=adc_val[i];
- aver=sum/30;
- //x=adc_change()*1000./51.;
- x=aver/51.0;
- x=x*1000.0;
- adc_dat[0]=(int)x/1000;
- adc_dat[1]=(int)x/100%10;
- adc_dat[2]=(int)x/10%10;
- adc_dat[3]=(int)x%10;
- }
- void Display(void)
- {
- unsigned char i;
- adc_bcd();
- for(i=0;i<4;i++)
- {
- if(i==0)
- led_duan=ledseg[adc_dat[i]]&0x7f;
- else
- led_duan=ledseg[adc_dat[i]];
- led_wei =ledsel[i];
- delayms(5);
- led_wei&=0xf0;
- }
- }
- void main(void)
- {
- while(1)
- {
- Display();
- }
- }
復制代碼
51hei圖片20211128194039.png (61.94 KB, 下載次數: 28)
下載附件
2021-11-28 19:40 上傳
用ADC0832.dll代替ADC083x.DLL
ADC0832.dll下載鏈接
鏈接:https://pan.baidu.com/s/1Dh2GoRHKpEFIPSylaTpBEw
提取碼:nfjz
Proteus7.5版本的仿真dsn文件:
adtoda.rar
(95.1 KB, 下載次數: 22)
2021-11-27 23:05 上傳
點擊文件名下載附件
|