天天看點

adc0832子程式c語言,ADC0832源碼 C語言

#include "reg52.h"

#define SD 0

//==========================

sbit CS=P0^0;

sbit CLK=P0^1;

sbit DI =P0^2;

sbit DO =P0^3;

//============================

unsigned  char bdata ADC_BIT;

sbit ADC0=ADC_BIT^0;

sbit ADC1=ADC_BIT^1;

sbit ADC2=ADC_BIT^2;

sbit ADC3=ADC_BIT^3;

sbit ADC4=ADC_BIT^4;

sbit ADC5=ADC_BIT^5;

sbit ADC6=ADC_BIT^6;

sbit ADC7=ADC_BIT^7;

//==============================

char numf[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6};

char numz[]={0xff,0x01,0x02,0x04,0x08};//數位管位選

//           關閉 個位 十位 百位 千位

void yc(int n);   //延時n毫秒

void smg_xs (int num)

{

char ws[]={0,0,0,0,0};

//位數,個十百千

//個 十 百 千

if(num>999&&num<9999)

{

ws[1]=num%10000%100%100%10%10;

ws[2]=num%10000%1000%100/10;

ws[3]=num%10000%1000/100;

ws[4]=num%10000/1000;

}

if(num>99&&num<999)

{

ws[1]=num%1000%10%10;

ws[2]=num%1000%100/10;

ws[3]=num%1000/100;

}

if(num>9&&num<99)

{        ws[1]=num%10;

ws[2]=num/10;

}

if(num>-1&&num<9)

{ws[1]=num;}

//================================

{//局部範圍

int sm;

int i;

for(sm=0;sm<15;sm++)

{

for(i=1;i<=4;i++)

{

P3=numz[i];

P2=~numf[ws[i]];

yc(1);

P3=~numz[0];

}//for i end

}// for sm end

}//局部範圍 end

}//smg_xs() end

//=========================================

void BEGIN_ADC0832()

{

//初始化 ADC

//CLK=0;

//CS=0;

//1脈沖  DI=1 開始

//2脈沖  DI=1

//3脈沖  DI=0

//=================

CLK=0;yc(SD);

CS=0;yc(SD);

//========================準備

DI=1;

yc(SD);

CLK=1;

//1脈沖

yc(SD);

CLK=0;

DI=1;

yc(SD);

CLK=1;

//2脈沖

yc(SD);

CLK=0;

DI=0;

yc(SD);

CLK=1;

//3脈沖

}

void READ_ADC0832()

{

CLK=0;//3脈沖 下降沿

yc(SD);

//------------------------

CLK=1;

yc(SD);

//4脈沖

CLK=0;

yc(SD);

ADC7=DO;

//------------------------

CLK=1;

yc(SD);

//5脈沖

CLK=0;

yc(SD);

ADC6=DO;

//------------------------

CLK=1;

yc(SD);

//6脈沖

CLK=0;

yc(SD);

ADC5=DO;

//------------------------

CLK=1;

yc(SD);

//7脈沖

CLK=0;

yc(SD);

ADC4=DO;

//------------------------

CLK=1;

yc(SD);

//8脈沖

CLK=0;

yc(SD);

ADC3=DO;

//------------------------

CLK=1;

yc(SD);

//9脈沖

CLK=0;

yc(SD);

ADC2=DO;

//------------------------

CLK=1;

yc(SD);

//10脈沖

CLK=0;

yc(SD);

ADC1=DO;

//------------------------

CLK=1;

yc(SD);

//11脈沖

CLK=0;

yc(SD);

ADC0=DO;

//------------------------

CS=1;

}

//=========================================

main()

{

float NUM_F;

char D4,D3,D2,D1;

while(1)

{

BEGIN_ADC0832();

READ_ADC0832();

NUM_F=  ADC_BIT * 0.0196;

//==================

D4=NUM_F;

D3=(NUM_F*10)-(D4*10);

D2=(NUM_F*100)-(D4*100)-(D3*10);

D1=0;

//=============

smg_xs(D4*1000 + D3*100 + D2 *10 +D1);

//1 函數的形參  類型是什麼  int

//2       實參  類型        double

}

//等待

}

void yc(int n)   //延時n毫秒

{

char i;

while(n--)

{

for(i=0;i<120;i++);

}

}