完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
////*****重庆三峡学院电子与信息工程学院 创新实验室 唐老鸭*****////
#include "iic.h" #include "lcd12864.h" uchar a[10]="0123456789"; uchar b[16]="The Volt: . V"; uchar table[4],ReadBuffer[16],buffer[16]; uchar table1[16]=" 欢迎光临 "; uchar table3[16]="当前电压是如下:"; uchar table2[16]="创新实验室 sj618"; uchar table0[16]= " V"; unsigned long sum = 0; uint real; //配置ads1115 void Confige1115 () { unsigned char i; table[0] = 0x90;//CMD_Write; table[1] = 0x01;//指向配置寄存器 table[2] = 0xC2;//设置配置寄存器的高八位1100 0101,即AINp=AIN0,AINn=GND;满量程FS=+-4.096;连续转换模式 table[3] = 0xE3;//设置配置寄存器的低八位1110 0011,即 start();//发送起始信号 for(i=0;i<4;i++) { shout(table);//将table里面的数写入ads1115 _NOP(); _NOP(); } stop();//发送停止信号 } //指向ADS1115指针寄存器用于准备读取数据 void PointRegister (void) { unsigned char i; table[0] = 0x90;//写 table[1] = 0x00;//指针指向转换寄存器 start();//发送起始信号 for(i=0;i<2;i++) { shout(table);//将table里面的数写入ads1115 _NOP(); } stop();//发送停止信号 } //读转换寄存器里面的值 uint read() { uint result,resulth,resultl; start(); shout(0x91); resulth = shin(); //高八位 resultl = shin(); //底八位 stop(); result=(resulth<<8)|resultl; if(result>0x7fff) result=~result+1;//用于测量负电压,负电压从8000~ffff,负电压与正关于0有类似对称关系,按位取反后+1相同 return result; } //获取最终模数转换之后的结果 uint getad() { uint value; Confige1115(); _NOP(); PointRegister(); _NOP(); value=read(); return value; } void main() { // Stop watchdog timer to prevent time out reset uchar i,ptr[4]; WDTCTL = WDTPW + WDTHOLD; //主系统时钟切换为外部高速晶振 if (CALBC1_8MHZ == 0xFF || CALDCO_8MHZ == 0xFF) { while(1); // If calibration constants erased, trap CPU!! } // Configure Basic Clock BCSCTL1 = CALBC1_8MHZ;// Set range DCOCTL = CALDCO_8MHZ;// Set DCO step + modulation P1SEL=0; init_lcd();//初始化液晶屏 delay(2); while(1) { for(i=0;i<16;i++) sum+= getad();//将ad转换的值赋给sum,取16次转换的平均值 sum>>=4;//左移相当于除以16 real=(3.3*sum/32768)*1208-90;//4.096*(2/3)=2.731,因为参考电压3.3/2.731=1.2084,再扩大1000倍便于显示 //对于AINn不是GND的情况,+FS最高为7fff,最低-FS为1000,只显示0~+FS只除以32768, //90用于误差矫正 ptr[0] = real / 1000; //最高位 ptr[1] = (real - ptr[0]*1000)/100;//次高位 ptr[2] = (real - ptr[0]*1000 - ptr[1]*100)/10;//次低位 ptr[3] = (real - ptr[0]*1000 - ptr[1]*100 - ptr[2]*10); //最低位 b[10]=a[ptr[0]]; for(i=1;i<4;i++) b[i+11]=a[ptr];//b[11]显示“V”符号 display_12864(1,0,table1); display_12864(2,0,table2); display_12864(3,0,table3); display_12864(4,0,b); } }
|
|
相关推荐
8 个讨论
|
|
刚刚学习,多谢分享
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3073个成员聚集在这个小组
加入小组3092 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3760 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2376 浏览 1 评论
4850 浏览 1 评论
2606 浏览 1 评论
1656浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3760浏览 2评论
3092浏览 1评论
1850浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 05:58 , Processed in 1.606869 second(s), Total 69, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号