A/D LTC1864 16位转换资料网上百度库有。
单片机源程序如下:
- #include<reg52.h> //LTC1864是一个16位精度模数转换
- #include<intrins.h>
- #include<1602.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code num[]={"0123456789*#"}; //
- sbit SDO=P3^0; //数据输出端
- sbit SCK=P3^2; //时钟输入
- sbit CONV=P3^4; //转换输入
- uint read_adc() //定义一个16位变量
- {
- uchar i; //定义需要移位数量
- uint dat=0x0000; //定义一个16位变量
- SCK=1; //先时钟端高电平
- CONV=0;CONV=1; //转换端进行一个上升沿(一个低电平转到高电平)模数转换
- _nop_(); _nop_(); _nop_(); _nop_();//等待一下结束转换
- CONV=0; //结束转换转换端置低电平,进入采样模式,如果转换端为高电平进入睡眠模式
- for(i=0;i<16;i++) //移动16位
- {
- SCK=1; //时钟置为高电平
- _nop_();
- SCK=0; //时钟置为低电平
- _nop_();
- dat=(dat<<1)|SDO; //下降沿后输出同位数,由高电位转向低电位,完成一个16位数值
- _nop_();
- }
- SCK=0; //如果CONV为低电平,SCK时钟信号置低电平,SDO端为零
- return dat; //输出一个1转换完16位数值dat
- }
- void main()
- {
- uint temp; //定义一个16位变量
- lcd_init(); //1602初始化
- display_list(0,0,"LTC1864 A/D Test"); //1602第一行输出字符
- while(1)
- {
- temp=read_adc(); //定义temp=转换后数据
- temp=(temp*50.0/65534.0)*1000; //转换成电压数据
- display_list(1,0,"CurrVolt:"); //1602第二行输出字符
- wirte_lcd_cmd(0xc0+9); //1602第二行第9位开始输出下面字符
- wirte_lcd_date(num[temp/10000]); //输出压数值第一位
- wirte_lcd_date(num[temp%10000/1000]); //输出压数值第二位
- wirte_lcd_date('.'); //输出字符,
- wirte_lcd_date(num[temp%10000%1000/100]); //输出压数值第三位
- wirte_lcd_date(num[temp%10000%1000%100/10]); //输出压数值第四位
- wirte_lcd_date(num[temp%10]); //输出压数值第五位
- wirte_lcd_date('V'); //输出压符号
- }
- }
复制代码
所有资料51hei提供下载:
ADC_LTC1864.rar
(64.36 KB, 下载次数: 55)
|