AD转化(简单代码)

xpt2046芯片


#include<reg52.h>
#include<intrins.h>
#define AD_CH0 0x94 //通道0光敏cmd
#define AD_CH1 0xd4	//通道1热敏cmd
#define AD_CH2 0xa4	//通道2电位器cmd
#define AD_CH3 0xe4	//通道3外部输入AIN3 cmd
typedef unsigned char uchar;
typedef unsigned int uint;
#define MAIN_Fosc  11059200UL  //宏定义主时钟HZ
sbit DIN=P2^0;
sbit DCLK=P2^1;
sbit DOUT=P2^5;
sbit CS=P3^7;
sbit WE=P2^7;	//段选
sbit DU=P2^6;	//位选
//共阴数码管段选表0-9
uchar code SMGduan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//数码管位选码
uchar code SMGwei[] = {0xfe, 0xfd, 0xfb, 0xf7};
//毫秒级延时函数
void delay(uint ms)
{uint i;do{i=MAIN_Fosc/96000;while(--i);	}while(--ms);
}
//显示函数
void display(uint i)
{uchar q, b, s, g;static uchar wei;q = i / 1000;b = i % 1000 / 100;s = i % 100 / 10;g = i % 10;		P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = SMGwei[wei];WE = 0;//锁存位选数据P0 = 0XFF;//清除断码switch(wei){case 0: DU = 1; P0 = SMGduan[q] | 0x80;	DU = 0; break;//0x80加上小数点case 1: DU = 1; P0 = SMGduan[b]; 	DU = 0; break;	case 2: DU = 1; P0 = SMGduan[s]; 	DU = 0; break;case 3: DU = 1; P0 = SMGduan[g]; 	DU = 0; break;		}wei++;if(wei == 4)wei = 0;
}
//写入命令
void SPI_Write(uchar DAT)
{uchar i;for(i=0;i<8;i++)	 //命令按位依次写入{DCLK=0;if(DAT&0x80)DIN=1;elseDIN=0;DCLK=1;DAT<<=1;}
}
//读出数据
uint SPI_Read()
{uint i,DAT;for(i=0;i<12;i++)	//依次读出每一位数据并反馈{DAT<<=1;DCLK=1;DCLK=0;if(DOUT)DAT|=0x01;}return DAT;
}
//AD读取指定数据
uint Read_AD(uchar cmd)
{uint DAT;CS=0;SPI_Write(cmd);DCLK=0;_nop_();_nop_();_nop_();_nop_();_nop_();DAT=SPI_Read();CS=1;return DAT;
}
void main()
{uint i,date;while(1){if(i>=100){i=0;date=Read_AD(AD_CH1); //接收date=date*1.2207;	 //数值转换}display(date);	  //显示反馈值delay(5);i++;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部