单片机源程序如下:
#include "reg52.h"
#define SD 1
char KEY_XY;
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;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
float ADC21[9]={0,2.5,1.25,0.625,0.3125,0.15625,0.078125,0.03906,0.01953};
sbit CS=P2^2;
sbit CLK=P2^0;
sbit SDI =P2^1;
sbit SDO =P2^1;
//===================================
void init_ADC0832()
{
CLK=0;yc(SD);
CS=0;yc(SD);
SDI=1;yc(SD);
CLK=1;yc(SD);
CLK=0;yc(SD);
SDI=1;yc(SD);
CLK=1;yc(SD);
CLK=0;yc(SD);
//SDI=0;yc(SD);
SDI=KEY_XY=!KEY_XY;yc(SD);
CLK=0;yc(SD);
CLK=0;yc(SD);
// 设置通道 110 CH0单通道输入
}
float read_ADC0832()
{
float re_data;
re_data=0;
//千万记住,局部动态变量的初值不可省略
CLK=1;
CLK=0;
CLK=1;
//第一个数据不要
//0
CLK=0;
ADC0=SDO;
CLK=1;
//1
CLK=0;
ADC1=SDO;
CLK=1;
//2
CLK=0;
ADC2=SDO;
CLK=1;
//3
CLK=0;
ADC3=SDO;
CLK=1;
//4
CLK=0;
ADC4=SDO;
CLK=1;
//5
CLK=0;
ADC5=SDO;
CLK=1;
//6
CLK=0;
ADC6=SDO;
CLK=1;
//7
CLK=0;
ADC7=SDO;
CLK=1;
re_data=ADC21[ADC0*1]+ADC21[ADC1*2]+ADC21[ADC2*3]+ADC21[ADC3*4]+ADC21[ADC4*5]+ADC21[ADC5*6]+ADC21[ADC6*7]+ADC21[ADC7*8];
return(re_data);
}
void rs232_init(void)
{
SCON=0x50; //设定串口工作方式
PCON=0x00; //波特率不倍增
TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率
EA=1;
ES = 1; //允许串口中断
TL1=0xA0;
TH1=0xff; //波特率9600
TR1=1;
}
void senddata(char dat)
{
//-------------------------
TI = 0;
SBUF = dat;
while(!TI);
}
main()
{
char num;
char D1;
// char D2;
// char D3;
// char D4;
rs232_init();
while(1)
{
init_ADC0832();
D1=read_ADC0832();
CS=1;
// D2=data_num*10-D1*10;
// D3=data_num*100-D1*100-D2*10;
// D4=data_num*1000-D1*1000-D2*100-D3*10;
//
//
if(KEY_XY)
{//X 数据
num=num&0x0f;
num=num+(D1<<4);
}
else
{ //Y 数据
num=num&0xf0;
num=num+D1;
;
}
// num=D1;
senddata(num);
yc(8);
}
}
|