⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adcc.c

📁 模数ADC0832转换程序
💻 C
字号:
/**************************************************************************
A/D转换模块演示程序
作者:郑州万科 
0371-66987446  0371-66760315
实验本程序,需要把转换模块上的J2短路
阅读本程序,需要参照AD0832的使用说明及时序图进行
***************************************************************************/
#include <at89x51.h>
#include <Delay.h>
#define CS    P0_0    //ADC0832 的CS端
#define CLK   P0_1    //ADC0832 的CLK端
#define DO    P0_2    //ADC0832 的DO端
#define DI    P0_3    //ADC0832 的DI端
#define SDA    P2_7    //74LS164 SAD
#define SCK    P2_6    //74LS164 SCK
#define BIT5   P2_5    //数码管位1
#define BIT4   P2_4    //数码管位2
#define BIT3   P2_3    //数码管位3
#define BIT2   P2_2    //数码管位4
#define BIT1   P2_1    //数码管位5
#define BIT0   P2_0    //数码管位6
#define uchar unsigned char
#define uint  unsigned int
code uchar szdm[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff}; //共阳数码管的显示字模数据
data uchar displaybuff[6];   //定义显示缓冲区
uchar CH0=0X10;              //通道0转换数据
void display();
uchar adconvert(sign);


void main()  {
uchar temp;
DelayMs(2000);                     //延时使芯片复位完成
CS=1;
DI=1;
DO=1;
CLK=0;
while(1)  {
  
temp=adconvert(CH0);
displaybuff[2]=temp/100;
displaybuff[1]=(temp-displaybuff[2]*100)/10;
displaybuff[0]=temp-(displaybuff[2]*100+displaybuff[1]*10);
display();


           }
			   }



void adstart(void) {    //开始条件
CLK=0;
CS=0;
DI=1;
CLK=1; 
CLK=0;             }



void adsendsign(uchar signifi) {  //发送信号
uchar temp;
temp=signifi&0x03;
DI=(signifi>>1)&0x01;
CLK=1;
CLK=0;
DI=temp&0x01;
CLK=1;
CLK=0; 
                               }


uchar adoutdata(void)        {    //数据输出
uchar mfdata,i,j;
bit D;
while(DO);
CLK=1;
for(i=0;i<8;i++)
                { CLK=0;
				D=DO;
				mfdata=mfdata|D;
				CLK=1;
				mfdata=mfdata<<1;
				}
for(j=0;j<7;j++)
                {
                CLK=0;CLK=1;
				}
CS=1;
DO=1;
return(mfdata);
                            }



uchar adconvert(sign)         {      //开始转换
 uchar addata;
               adstart();
			   adsendsign(sign);
			   addata=adoutdata();
			   return(addata);
			                       
			                   }

                              
                      
void senddata(uchar dd) {          //74HC164移入显示数据
uchar j;
for (j=0;j<8;j++) {
                   SDA=(bit)(dd&0x01);
				   SCK=1;  SCK=0;
				   dd=dd>>1;
				   }
				         }


void display()           {           //在实验板的6位数码管上动态显示缓冲区中的数据
     senddata(szdm[displaybuff[0]]);
     BIT0=0;
     Delay_ms(10);
     BIT0=1;
     senddata(szdm[displaybuff[1]]);
	 BIT1=0;
     Delay_ms(10);
     BIT1=1;
     senddata(szdm[displaybuff[2]]);
	 BIT2=0;
     Delay_ms(10);
     BIT2=1;
     senddata(szdm[displaybuff[3]]);
	 BIT3=0;
     Delay_ms(10);
     BIT3=1;
     senddata(szdm[displaybuff[4]]);
	 BIT4=0;
     Delay_ms(10);
     BIT4=1;
     senddata(szdm[displaybuff[5]]);
	 BIT5=0;
     Delay_ms(10);
     BIT5=1;
                          }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -