完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uchar unsigned char #define uint unsigned int ***it HX711_DOUT=P2^1; ***it HX711_SCK=P2^0; ***it lcdrs=P2^5; ***it lcdrw=P2^4; ***it lcden=P2^3; ***it KEY1 = P3^2; unsigned long HX711_Buffer = 0; unsigned long Weight_Maopi = 0; long Weight_Shiwu = 0; unsigned char flag = 0; bit Flag_ERROR = 0; ***it speak= P3^5; #define GapValue 430 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } unsigned long HX711_Read(void) //增益128 { unsigned long count; unsigned char i; HX711_DOUT=1; delay(1); HX711_SCK=0; count=0; EA = 1; while(HX711_DOUT); EA = 0; for(i=0;i<24;i++) { HX711_SCK=1; count=count<<1; HX711_SCK=0; if(HX711_DOUT) count++; } HX711_SCK=1; count=count^0x800000;//第25个脉冲下降沿来时,转换数据 delay(1);; HX711_SCK=0; return(count); } void write_com(uchar com) //写指令 { lcdrs=0; //处理指令 P0=com; //输入命令 delay(5); lcden=1; //使能 delay(5); lcden=0; } void write_data(uchar date) { lcdrs=1; //写数据 P0=date; delay(5); lcden=1; delay(5); lcden=0; } void LCD_init() { lcdrw=0; lcden=0; write_com(0x38); // 显示模式设置 write_com(0x0e); // 显示光标,光标不闪烁 write_com(0x06); // 地址指针加1,光标右移 write_com(0x01); // 清屏 write_com(0x80+0x10); //数据指标地址(首地址为0x80) } /*在LCD上显示字符 输入参数:显示数据的地址 *dat, x 液晶显示在第x行,x=1或2 */ void LCD_display(uchar *dat, uchar x) { uchar num; if(x==1) { for(num=0;num<16;num++) //1602第一行写入16个字符 { write_com(0x80+num); //Ox80为第一行首地址,num为DDRAM地址偏移量 write_data(*dat); dat++; //数组指针加1 delay(20); } } // write_com(1); if(x==2) { for(num=0;num<16;num++) //1602第二行写入16个字符 { write_com(0x80+0x40+num); //0x80+0x40为第二行首地址,num为DDRAM地址偏移量 write_data(*dat); dat++; //数组指针加1 delay(20); } } } void display_welcome(void) //欢迎界面显示 { uchar table1[]={" CME13007 "}; uchar table2[]={" Welcome to use "}; LCD_display(table1,1); // LCD_display(table2,2); // delay(200); } void display_error(void) { uchar table1[]={" CME13007 "}; uchar table2[]={" error "}; LCD_display(table1,1); // LCD_display(table2,2); // delay(200); } void Delay_ms(unsigned int n) { unsigned int i,j; for(i=0;i } void Get_Maopi() { Weight_Maopi = HX711_Read(); } void Scan_Key() { if(KEY1 == 0) { Delay_ms(5); if(KEY1 == 0) { while(KEY1 == 0); Get_Maopi(); //去皮 } } } //**************************************************** //称重 //**************************************************** void Get_Weight() { Weight_Shiwu = HX711_Read(); Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重 if(Weight_Shiwu > 0) { Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); //计算实物的实际重量 if(Weight_Shiwu > 5000) //超重报警 { Flag_ERROR = 1; } else { Flag_ERROR = 0; } } else { Weight_Shiwu = 0; // Flag_ERROR = 1; //负重报警 } } //**************************************************** //MS延时函数(12M晶振下测试) //**************************************************** void display_weight(void) { uchar table1[]={" the weight is: "}; uchar table2[]={" . g "}; table2[0]=Weight_Shiwu/1000+'0'; table2[2]=Weight_Shiwu/100%10+'0'; table2[3]=Weight_Shiwu/10%10+'0'; table2[4]=Weight_Shiwu%10+'0'; LCD_display(table1,1); LCD_display(table2,2); delay(200); } void main() { LCD_init(); //液晶屏初始化 display_welcome(); //欢迎界面 Delay_ms(1000); while(1) { Get_maopi(); EA=0; Get_Weight(); EA=1; Scan_Key(); if(Flag_ERROR ==1) { display_error(); speak=0;} else { speak=1; display_weight(); } } } |
|
相关推荐
10个回答
|
|
主程序里线单独测试一下 Get_maopi();这个有没有问题
|
|
|
|
顶一下哦,发了那么多
|
|
|
|
|
|
|
|
|
|
|
|
楼主解决了么~数值可以解决了么~我最近也在做这个,同问~
|
|
|
|
同做这个设计
|
|
|
|
同做这个设计,一直在while循环里跳不出来
|
|
|
|
谢谢各位大佬
|
|
|
|
...
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:45 , Processed in 0.812329 second(s), Total 92, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号