《简易数字电压表制作——adc0832模数转换应用程序》由会员分享,可在线阅读,更多相关《简易数字电压表制作——adc0832模数转换应用程序(10页珍藏版)》请在金锄头文库上搜索。
1、简易数字电压表制作简易数字电压表制作ADC0832ADC0832 模数转换应用程序模数转换应用程序/*/*简易数字电压表制作ADC0832 模数转换应用程序(C 语言版)*/*目标器件:AT89S51 */*晶振:12.000MHZ */*编译环境:Keil uVision2 V2.12 */*/*包含头文件*/#include #include /*端口定义*/sbit CS = P35;sbit Clk = P34;sbit DATI = P33;sbit DATO = P33;/*定义全局变量*/unsigned char dat = 0x00; /AD 值unsigned char c
2、ount = 0x00; /定时器计数unsigned char CH; /通道变量unsigned char dis = 0x00, 0x00, 0x00; /显示数值/*共阳 LED 段码表*/unsigned char code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*函数功能:AD 转换子程序入口参数:CH出口参数:dat*/unsigned char adc0832(unsigned char CH)unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk =
3、 0; /初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH = 0x00 ) /通道选择Clk = 0;DATI = 1; /通道 0 的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; /通道 0 的第二位_nop_();Clk = 1;_nop_(); elseClk = 0;DATI = 1; /通道 1 的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; /通道 1 的第二位_nop_();Clk = 1;_nop_();Clk = 0;D
4、ATI = 1;for( i = 0;i = 1;if (DATO)test |= 0x80;else test |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;if (adval = test) /比较前 8 位与后 8 位的值,如果不相同舍去。若一直出现显示为零,请将该行去掉dat = test;_nop_();CS = 1; /释放 ADC0832DATO = 1;Clk = 1;return dat;/*函数功能:延时子程序入口参数:出口参数:*/void delay(void)int k;for(k=0;k500;k+);/*函数功能:将 0-255
5、级换算成 0.00-5.00 的电压数值入口参数:i出口参数:*/void convdata(unsigned char i)dis0 = i/51; /个位dis1 = (i%51)*10/51; /小数点后第一位dis2 = (i%51)*10%51)*10/51; /小数点后第二位/*函数功能:数码管显示子程序入口参数:出口参数:*/void display(void) P2=0xff;P0=tabdis0 /显示个位和小数点P2=0xfe;delay();P2=0xff;P0=tabdis1; /显示小数点后第一位P2=0xfd;delay();P2=0xff;P0=tabdis2;
6、/显示小数点后第二位P2=0xfb; delay();/*函数功能:定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位会不稳定入口参数:出口参数:*/void timer0(void) interrupt 1 TMOD = 0x01;TH0 = 0x00;TL0 = 0x00;IE = 0x82;TR0 = 01;count+;if (count = 0x0A)count = 0x00;dat = adc0832(CH);/*函数功能:主程序入口参数:出口参数:*/void main(void)P2=0xff; /端口初始化P0=0xff; CH = 0x00; /在这里选择通道 0x00 或 0x01TMOD = 0x01; /设置中断 TH0 = 0x00;TL0 = 0x00;IE = 0x82;TR0 = 01;while(1) /主循环 convdata(dat); /数据转换display(); /显示数值