完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用的普通的那种桥式压力传感器,AD转换器是HX711模块,显示屏是1602,单片机是郭天祥开发板89C52RC单片机,按要求连好线之后,1602不显示,什么都没有,用力按压力传感器也没有显示。我的思路是压力传感器感受压力,把信号发给AD, AD把它转化成count变量,然后ad_change()函数把count转化成重量值,然后display()函数在1602上显示。 write_com(uchar), write_data(uchar)函数是1602显示时候用到的。
不知道哪里有问题,谢谢。 /*采集压力并在1602上显示*/ #include #define uint unsigned int #define uchar unsigned char #define ulong unsigned long /*管脚引用定义*/ ***it dula=P2^6; ***it wela=P2^7; ***it lcden=P3^5; ***it lcdrs=P3^6; ***it ADDO = P3^0; ***it ADSK = P3^1; /*全局变量*/ ulong count; //AD值 ulong weight; //转化好的重量 ulong AD_Init_Value;//AD初始值为0 /*表*/ uchar code table[]={"0123456789. "}; /*函数原型*/ void delay(uint); void init(); void write_com(uchar); void write_data(uchar); void HX711_Read(); void ad_change(); void display(); /*主函数*/ void main() { while(1) { HX711_Read(); //本就是无参函数 ad_change(); display(); } } /*桥式压力传感器采集压力*/ void HX711_Read(void) //增益128 { uchar i; ADSK=0; //使能AD(PD_SCK 置低) count=0; while(ADDO); //AD转换未结束则等待,否则开始读取 for (i=0;i<24;i++) { ADSK=1; //PD_SCK 置高(发送脉冲) count=count<<1; //下降沿来时变量Count左移一位,右侧补零 ADSK=0; //PD_SCK 置低 if(ADDO) count++; } ADSK=1; count=count^0x800000;//第25个脉冲下降沿来时,转换数据 ADSK=0; } /*将AD值转化为重量 */ void ad_change(void)//原来是AD_VALUE { count=count/100; count=count-81650; // AD_VALUE=AD_VALUE-AD_Init_Value; //减去AD初始值 if(count+15<15) count=0; //排除AD_VALUE是负值的情况 if(count<450) //数据分段拟合 count=(0.4766+0.2422*count); else if(count<850) count=(1.382+0.24*count); else if(count<1250) count=(1.1+0.2409*count); else if(count<1660) count=(2.405+0.2397*count); else if(count<2500) count=(1.045+0.2406*count); else count=888; weight=count; //仅仅是换个名称 } /*1602显示重量*/ void display() //显示程序 uint temp { ulong A1,A2,A3; A1=weight/100; //temp A2=(weight%100)/10; A3=(weight%100)%10; init(); //1602初始化函数 write_com(0x80); //准备给1602第一行写入字符 write_data(table[A1]); //百位 delay(10); write_data(table[A2]); //十位 delay(10); write_data(table[A3]); //个位 delay(10); write_data(table[1]); delay(10); /* dula=1; P0=table[(uchar)A3]; dula=0; P0=0xff; wela=1; P0=0x00; wela=0; delay(5); */ } /*1602初始化函数*/ void init() { dula=0; wela=0; lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } /*1602需要用到的子函数1*/ void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; } /*1602需要用到的子函数2*/ void write_data(uchar date) { lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; } /*延时函数*/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
|
|
相关推荐
22个回答
|
|
|
|
|
|
解决了吗?解决了的话 可不可以说下
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
54 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
395 浏览 0 评论
439 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1265 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
529 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11749 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 21:18 , Processed in 0.452665 second(s), Total 45, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号