《ADC0832简单应用c程序.doc》由会员分享,可在线阅读,更多相关《ADC0832简单应用c程序.doc(11页珍藏版)》请在三一办公上搜索。
1、#include #include #include #define uchar unsigned char#define uint unsigned int#define led_wei 0xefff#define led_duan 0xf7ff sbit ADCLK =P16; /时钟接口sbit ADDO =P35; /数据输出接口sbit ADDI =P17; /数据输入接口sbit ADCS =P15; /使能接口uchar buff = 0;uint data i;uchar code seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80
2、,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void disp(uchar n)uchar dis0,dis1; dis0=n&0x0f; dis1=(n&0xf0)4; XBYTEled_duan=segdis0; XBYTEled_wei=0xfe; /for(i=0;i60000;i+)_nop_(); XBYTEled_wei=0xfc; XBYTEled_duan=segdis1; XBYTEled_wei=0xfd; /for(i=0;i60000;i+)_nop_(); XBYTEled_wei=0xfc;/*程序名称:ADC0832子程序作 者:li
3、uanggh 时 间:2006.12.30 */*函数名称:void AD_init(uchar i)函数作用:初始化ADC0832参数说明:i=2,表示通道0,i=3,表示通道1*/void AD_init(uchar i) ADDI = 1; /*在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号*/ _nop_(); _nop_(); ADCS = 0; /使能ADC0832 _nop_(); _nop_(); ADCLK = 0; _nop_(); _nop_(); _nop_(); ADCLK = 1; /形成上升降沿1 _nop_(); _nop_(); /*在第2、3个
4、脉冲下沉之前DI端应输入2位数据用于选择通道功能*/ _nop_(); ADCLK = 0; _nop_(); _nop_(); ADDI = 1; _nop_(); _nop_(); ADCLK = 1;/lock sgl _nop_(); _nop_();ADCLK = 0; _nop_(); _nop_(); if(i=0x02) ADDI = 0; if(i=0x03) ADDI = 1; _nop_(); _nop_(); ADCLK = 1; _nop_(); _nop_();ADCLK = 0; _nop_(); _nop_(); _nop_(); _nop_();/*函数名称:
5、uchar AD_read()函数作用:读取ADC0832转换的数据参数说明:无函数返回:返回8位的数据*/uchar AD_read() uchar temp = 0; uchar temp1 = 0; uchar temp2 = 0; uchar i = 0; uchar flag = 0; for(i = 0; i 8; i+) ADDO=1; ADCLK = 1; _nop_(); _nop_(); ADCLK = 0; /形成下降沿 _nop_(); _nop_(); if(ADDO)temp1|=0x01; temp1 = temp1 1; if(ADDO)temp2 |= 0x8
6、0; for(i = 0; i 1; ADCLK = 1; _nop_(); _nop_(); if(ADDO)temp2|=0x80; ADCLK = 0; /形成下降沿 _nop_(); _nop_(); /if(temp1 = temp2) return temp1;unsigned int Adc0832(unsigned char channel) uchar i=0;uchar j;uint dat=0;uchar ndat=0;if(channel=0)channel=2;if(channel=1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;/
7、拉低CS端_nop_();_nop_();ADCLK=1;/拉高CLK端_nop_();_nop_();ADCLK=0;/拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;/拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;/拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;/拉高CLK端ADDI=(channel1)&0x1;_nop_();_nop_();ADCLK=0;/拉低CLK端,形成下降沿3ADDI=1;/控制命令结束 _nop_();_nop_();dat=0;for(i=0;i8;i+)
8、 dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1;ADCS=1;/拉低CS端ADCLK=0;/拉低CLK端ADDO=1;/拉高数据端,回到初始状态dat=8;dat|=ndat; return(dat); /return ad datamain()uchar n;uint i,m;while(1) m=Adc0832(1); disp(m);