![]() |
發布時間: 2015-2-19 11:04
正文摘要:先給大家拜年了 這個是原理圖我ABC都接入的是地線數陽極碼管接入的是P2接口 求大神幫忙 最近要用 file:///c:/users/administrator/appdata/roaming/360se6/User Data/temp/0d338 ... |
想后看開 發表于 2022-10-13 10:34 牛蛙 |
我這里有一個 //adc0808應用 #include<reg51.h> #include<intrins.h> #include<absacc.h> #include<stdlib.h> #include<stdio.h> #define int8u unsigned char #define int16u unsigned int int8u code SEG_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit OE=P1^0; // 輸出使能 sbit EOC=P1^1; // 轉換結果 sbit ST=P1^2; // 啟動轉換 sbit CLK=P1^3; // 采樣時鐘 void delay_ms(int16u ms) {int8u i;while(ms--) for(i=0;i<120;i++); } void Display_Result(int8u AD) { int V; V=AD * 500.0 * 2/511.0;//根據4舍5人法計算電壓值(放大100倍以使分解) P2=1<<2;P0=SEG_CODE[V % 10]; delay_ms(5); P2=1<<1;P0=SEG_CODE[V % 100/10]; delay_ms(5); P2=1<<0;P0=SEG_CODE[V / 100]&0x7f; delay_ms(5); } void main() { TMOD=0x02;//定時器TIMER0工作方式 2 (8位自動重裝) TL0=-250;// 定時器初值 TH0=-250;// 在TL0溢出時,TH0的值自動重新裝入 IE=0x82;// 允許TIMER0溢出中斷 TR0=1; // 啟動ADC0808(0809)的通道3(0011) P1=0x3f;// 高4位設通道地址為0011(3),低4位為clk,st,eoc,oe/ce while(1) { ST=0;ST=1;ST=0;//啟動轉換 while(EOC==0); // 等待轉換結果 OE=1; // 允許輸出 Display_Result(P3);//顯示A/D轉換結果 OE=0; // 關閉輸出 } } void Timer0_INT()interrupt 1 {CLK=!CLK; //adc0808采樣時鐘 } |