完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 tcvsdonnnie 于 2013-7-8 20:34 编辑
主程序如下: #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;//设置配置寄存器的低八位1100 0101,即 start();//发送起始信号 for(i=0;i<4;i++) { shout(table);//将table里面的数写入ads1115 _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 delay(5); } 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 j,i,ptr[4]; WDTCTL = WDTPW + WDTHOLD; //使用外部高频晶体振荡器 BCSCTL1&=~XT2OFF; do{ IFG1&=~OFIFG; for(j=0XFF;j>0;j--); }while((IFG1&OFIFG)); BCSCTL2|=SELM_2; init_lcd();//初始化液晶屏 delay(10); 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); } } |
|
相关推荐
|
|
|
|
|
|
|
|
感谢分享,。。。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?
2667 浏览 0 评论
2657 浏览 1 评论
1893 浏览 1 评论
2049 浏览 2 评论
2612 浏览 2 评论
720浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 11:19 , Processed in 0.883522 second(s), Total 84, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号