#include "reg52.h"float shuju;unsigned char sj;unsigned int gata;unsigned char gw,sw,bw;unsigned char kk,tdao;//4联共阳数码管,最高位显示通道号,其他三位为电压值unsigned char code shuzi[]={ 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90};unsigned char code duanxuan[]={0x0f,0x8f,0x4f,0xcf,0x2f,0xaf,0x6f,0xff};sbit START=P3^1; //ALE也连接P3.1sbit OE=P3^3;sbit EOC=P3^2;sbit clock=P3^0;void delay(){ unsigned char i; for(i=200;i>0;i--);}//timer initvoid Timer(){ TMOD=0x21; TH0=0x3c;//20ms TL0=0xb0; TH1=0xff;//100khz TL1=0xfd; }void AD_zh(){ START=0; //ADC0809的启动信号 START=1; START=0; while(EOC==0); //等待转换结束 OE=1; //输出转换数据 sj=P1; //P1口接收数据 shuju=sj;//转换为浮点型 shuju=(shuju/51.0)*100.00;//转换成百位数据; gata=shuju;//转换为整型 bw=gata/100;//分离百位 sw=(gata/10)%10;//分离十位 gw=gata%10;//分离个位}//timer0/counter0 interruptvoid timer0(void) interrupt 1 //T0用于产生秒信号{ TH0=0x3c; TL0=0xb0; kk++; if(kk==20) { kk=0; tdao++; //用于转换通道,测量各个通道数据 if(tdao==8) { tdao=0; } }}void timer1(void) interrupt 3{ clock=~clock; //定时器产生ADC0809所需的时钟信号}void display(){ P0=shuzi[gw]; //个位 P2=0xf8&duanxuan[tdao]; delay(); P0=shuzi[sw]; //十位 P2=0xf4&duanxuan[tdao]; delay(); P0=shuzi[bw]&0x7f; //电压百位 P2=0xf2&duanxuan[tdao]; delay(); P0=shuzi[tdao+1]; //通道从1~8,每秒换一个通道 P2=0xf1&duanxuan[tdao]; delay();}//the main funvoid main(void){ uchar i; Timer(); TR0=1; ET0=1; TR1=1; ET1=1; EA=1;while(1){ AD_zh(); for(i=0;i<10;i++) //降低刷新速度,使显示稳定 { display();//显示程序 } }}
导读:目前正在解读《ADC0809做的51单片机8路电压采集》的相关信息,《ADC0809做的51单片机8路电压采集》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《ADC0809做的51单片机8路电压采集》的详细说明。
简介:本文给大家分享了ADC0809做的51单片机8路电压采集代码。
提醒:《ADC0809做的51单片机8路电压采集》最后刷新时间 2024-03-14 00:58:02,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《ADC0809做的51单片机8路电压采集》该内容的真实性请自行鉴别。