基于51单片机的电子秤程序.docx
- 文档编号:9240520
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:15
- 大小:19.96KB
基于51单片机的电子秤程序.docx
《基于51单片机的电子秤程序.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子秤程序.docx(15页珍藏版)》请在冰豆网上搜索。
基于51单片机的电子秤程序
#include
#include
//#include"LCD1602.h"
//#include"HX711.h"
#defineuintunsignedint
#defineucharunsignedchar
sbitLCD1602_RS=P2^5;
sbitLCD1602_RW=P2^6;
sbitLCD1602_EN=P2^7;
sbitHX711_DOUT=P2^0;
sbitHX711_SCK=P2^1;
unsignedlongHX711_Buffer=0;
unsignedlongWeight_Maopi=0,Weight_Shiwu=0;
charPrice_Count=0;
ucharKEY_NUM=0;
ucharPrice_Buffer[3]={0x00,0x00,0x00};
unsignedlongMoney=0;
bitFlag_OK=0;
ucharcom;
//延时函数
//****************************************************
voidDelay__hx711_us(void)
{
_nop_();
_nop_();
}
voidLCD1602_delay_ms(unsignedintn)
{
unsignedinti,j;
for(i=0;i for(j=0;j<123;j++); } voidDelay_ms(unsignedintn) { unsignedinti,j; for(i=0;i for(j=0;j<123;j++); } //**************************************************** //写指令 //**************************************************** voidLCD1602_write_com(ucharcom) { LCD1602_RS=0; LCD1602_delay_ms (1); LCD1602_EN=1; P0=com; LCD1602_delay_ms (1); LCD1602_EN=0; } //**************************************************** //写数据 //**************************************************** voidLCD1602_write_data(uchardat) { LCD1602_RS=1; LCD1602_delay_ms (1); P0=dat; LCD1602_EN=1; LCD1602_delay_ms (1); LCD1602_EN=0; } //**************************************************** //连续写字符 //**************************************************** voidLCD1602_write_word(unsignedchar*s) { while(*s>0) { LCD1602_write_data(*s); s++; } } voidInit_LCD1602() { LCD1602_EN=0; LCD1602_RW=0;//设置为写状态 LCD1602_write_com(0x38);//显示模式设定 LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置 LCD1602_write_com(0x06);//写一个字符后指针加一 LCD1602_write_com(0x01);//清屏指令 } //**************************************************** //矩阵键盘扫描 //**************************************************** unsignedcharKEY_Scan() { unsignedchartemp=0; unsignedcharcom=0x55,com1=0,com2=0; P3=0xf0; if(P3! =0xf0) { com1=P3; P3=0x0f; com2=P3; } P3=0xf0; while(P3! =0xf0); temp=com1|com2; if(temp==0xee)com=1;//数字1 if(temp==0xed)com=4;//数字4 if(temp==0xeb)com=7;//数字7 if(temp==0xe7)com=11;//备用键*号键 if(temp==0xd7)com=0;//数字0 if(temp==0xb7)com=14;//备用键*号键 if(temp==0xde)com=2;//数字2 if(temp==0xdd)com=5;//数字5 if(temp==0xdb)com=8;//数字8 if(temp==0xbe)com=3;//数字3 if(temp==0xbd)com=6;//数字6 if(temp==0xbb)com=9;//数字9 if(temp==0x7e)com=16;//数字A键,去皮功能 if(temp==0x7d)com=15;//数字B键清除键,二次测量 if(temp==0x7b)com=12;//数字C输入单价错误时返回上一步 if(temp==0x77)com=13;//数字D键,计算总价 return(com); } unsignedlongHX711_Read(void)//增益128 { unsignedlongcount; unsignedchari; HX711_DOUT=1; Delay__hx711_us(); HX711_SCK=0; count=0; while(HX711_DOUT); 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__hx711_us(); HX711_SCK=0; return(count); } //**************************************************** //称重 //**************************************************** voidGet_Weight() { HX711_Buffer=HX711_Read(); HX711_Buffer=HX711_Buffer/100; if(HX711_Buffer>Weight_Maopi) { Weight_Shiwu=HX711_Buffer; Weight_Shiwu=Weight_Shiwu-Weight_Maopi;//获取实物的AD采样数值。 Weight_Shiwu=(unsignedint)((float)Weight_Shiwu/4.22+0.05);//计算实物的实际重量 //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该数值一般在4.0-5.0之间。 因传感器不同而定。 //+0.05是为了四舍五入百分位 //Buzzer=1;//关闭警报 } //elseif(HX711_Buffer //{ //Buzzer=0;//负重量报警 //} //elseif(HX711_Buffer>Weight_Maopi+24970)//大于5Kg的最大量程,报警 //{ //Buzzer=0; //} //if(Weight_Shiwu>5000||HX711_Buffer //{ //Buzzer=0; //} //else //{ //Buzzer=1; //} // // } //**************************************************** //获取毛皮重量 //**************************************************** voidGet_Maopi() { HX711_Buffer=HX711_Read(); Weight_Maopi=HX711_Buffer/100; } //**************************************************** //主函数 //**************************************************** voidmain() { Init_LCD1602();//初始化LCD1602 LCD1602_write_com(0x80);//指针设置 LCD1602_write_word("Welcometouse! ");//开机画面第一行 Delay_ms(2000);//延时2s loop: Price_Count=0; Price_Buffer[0]=0; Price_Buffer[1]=0; Price_Buffer[2]=0; Flag_OK=0; LCD1602_write_com(0x80);//指针设置 LCD1602_write_word("WEIg|PRI|MON"); LCD1602_write_com(0x80+0x40);//指针设置 LCD1602_write_word("0.000|.|."); Get_Maopi();//称毛皮重量 while (1) { if(Flag_OK==0) { Get_Weight();//称重 //显示当前重量 LCD1602_write_com(0x80+0x40); LCD1602_write_data(Weight_Shiwu/1000+0x30); LCD1602_write_data('.'); LCD1602_write_data(Weight_Shiwu%1000/100+0x30); LCD1602_write_data(Weight_Shiwu%100/10+0x30); LCD1602_write_data(Weight_Shiwu%10+0x30); } KEY_NUM=KEY_Scan(); if(KEY_NUM! =0x55)//当返回的不是初值时候,确认按键按下。 { if(KEY_NUM==16)//数字A键,去皮功能 { Get_Maopi();//去皮 } if(KEY_NUM==15)//数字B键清除键,二次测量 { gotoloop; } if(KEY_NUM==12)//数字C输入单价错误时返回上一步 { Price_Count--; if(Price_Count<0) { Price_Count=0; } Price_Buffer[Price_Count]=0;//清除上一个输入的数据 switch(Price_Count) { case0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(''); break; case1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(''); break; case2: LCD1602_write_com(0x80+0x40+9); LCD1602_write_data(''); break; default: break; } } if(KEY_NUM==13)//数字D键,计算总价 { Money=Price_Buffer[0]*100+Price_Buffer[1]*10+Price_Buffer[2]; Money=Money*Weight_Shiwu/1000; LCD1602_write_com(0x80+0x40+11); LCD1602_write_data(Money/1000+0x30); LCD1602_write_data(Money%1000/100+0x30); LCD1602_write_data(Money%100/10+0x30); LCD1602_write_data('.'); LCD1602_write_data(Money%10+0x30); Flag_OK=1; } if(KEY_NUM>=0&&KEY_NUM<=9)//显示输入的价值 { Price_Buffer[Price_Count]=KEY_NUM; switch(Price_Count) { case0: LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(Price_Buffer[0]+0x30); break; case1: LCD1602_write_com(0x80+0x40+7); LCD1602_write_data(Price_Buffer[1]+0x30); break; case2: LCD1602_write_com(0x80+0x40+9); LCD1602_write_data(Price_Buffer[2]+0x30); break; default: break; } Price_Count++; if(Price_Count>=3) { Price_Count=3; } } } } } 当我被上帝造出来时,上帝问我想在人间当一个怎样的人,我不假思索的说,我要做一个伟大的世人皆知的人。 于是,我降临在了人间。 我出生在一个官僚知识分子之家,父亲在朝中做官,精读诗书,母亲知书答礼,温柔体贴,父母给我去了一个好听的名字: 李清照。 小时侯,受父母影响的我饱读诗书,聪明伶俐,在朝中享有“神童”的称号。 小时候的我天真活泼,才思敏捷,小河畔,花丛边撒满了我的诗我的笑,无可置疑,小时侯的我快乐无虑。 “兴尽晚回舟,误入藕花深处。 争渡,争渡,惊起一滩鸥鹭。 ”青春的我如同一只小鸟,自由自在,没有约束,少女纯净的心灵常在朝阳小,流水也被自然洗礼,纤细的手指拈一束花,轻抛入水,随波荡漾,发髻上沾着晶莹的露水,双脚任水流轻抚。 身影轻飘而过,留下一阵清风。 可是晚年的我却生活在一片黑暗之中,家庭的衰败,社会的改变,消磨着我那柔弱的心。 我几乎对生活绝望,每天在痛苦中消磨时光,一切都好象是灰暗的。 “寻寻觅觅冷冷清清凄凄惨惨戚戚”这千古叠词句就是我当时心情的写照。 最后,香消玉殒,我在痛苦和哀怨中凄凉的死去。 在天堂里,我又见到了上帝。 上帝问我过的怎么样,我摇摇头又点点头,我的一生有欢乐也有坎坷,有笑声也有泪水,有鼎盛也有衰落。 我始终无法客观的评价我的一生。 我原以为做一个着名的人,一生应该是被欢乐荣誉所包围,可我发现我错了。 于是在下一轮回中,我选择做一个平凡的人。 我来到人间,我是一个平凡的人,我既不着名也不出众,但我拥有一切的幸福: 我有温馨的家,我有可亲可爱的同学和老师,我每天平凡而快乐的活着,这就够了。 天儿蓝蓝风儿轻轻,暖和的春风带着春的气息吹进明亮的教室,我坐在教室的窗前,望着我拥有的一切,我甜甜的笑了。 我拿起手中的笔,不禁想起曾经作诗的李清照,我虽然没有横溢的才华,但我还是拿起手中的笔,用最朴实的语言,写下了一时的感受: 人生并不总是完美的,每个人都会有不如意的地方。 这就需要我们静下心来阅读自己的人生,体会其中无尽的快乐和与众不同。 “富不读书富不久,穷不读书终究穷。 ”为什么从古到今都那么看重有学识之人? 那是因为有学识之人可以为社会做出更大的贡献。 那时因为读书能给人带来快乐。 自从看了《丑小鸭》这篇童话之后,我变了,变得开朗起来,变得乐意同别人交往,变得自信了……因为我知道: 即使现在我是只“丑小鸭”,但只要有自信,总有一天我会变成“白天鹅”的,而且会是一只世界上最美丽的“白天鹅”…… 我读完了这篇美丽的童话故事,深深被丑小鸭的自信和乐观所折服,并把故事讲给了外婆听,外婆也对童话带给我们的深刻道理而惊讶不已。 还吵着闹着多看几本名着。 于是我给外婆又买了几本名着故事,她起先自己读,读到不认识的字我就告诉她,如果这一面生字较多,我就读给她听整个一面。 渐渐的,自己的语文阅读能力也提高了不少,与此同时我也发现一个人读书的乐趣远不及两个人读的乐趣大,而两个人读书的乐趣远不及全家一起读的乐趣大。 于是,我便发展“业务”带动全家一起读书……现在,每每遇到好书大家也不分男女老少都一拥而上,争先恐后“抢书”,当我说起我最小应该让我的时候,却没有人搭理我。 最后还把书给撕坏了,我生气地哭了,妈妈一边安慰我一边对外婆说: “孩子小,应该让着点。 ”外婆却不服气的说: “我这一把年纪的了,怎么没人让我呀? ”大家人你一言我一语,谁也不肯相让……读书让我明白了善恶美丑、悲欢离合,读一本好书,犹如同智者谈心、谈理想,教你辨别善恶,教你弘扬正义。 读一本好书,如品一杯香茶,余香缭绕。 读一本好书,能使人心灵得到净化。 书是我的老师,把知识传递给了我;书是我的伙伴,跟我诉说心里话;书是一把钥匙,给我敞开了知识的大门;书更是一艘不会沉的船,引领我航行在人生的长河中。 其实读书的真真乐趣也就在于此处,不是一个人闷头苦读书;也不是读到好处不与他人分享,独自品位;更不是一个人如痴如醉地沉浸在书的海洋中不能自拔。 而是懂得与朋友,家人一起分享其中的乐趣。 这才是读书真正之乐趣呢! 这所有的一切,不正是我从书中受到的教益吗? 我阅读,故我美丽;我思考,故我存在。 我从内心深处真切地感到: 我从读书中受到了教益。 当看见有些同学宁可买玩具亦不肯买书时,我便想到培根所说的话: “世界上最庸俗的人是不读书的人,最吝啬的人是不买书的人,最可怜的人是与书无缘的人。 ”许许多多的作家、伟人都十分喜欢看书,例如毛泽东主席,他半边床上都是书,一读起书来便进入忘我的境界。 书是我生活中的好朋友,是我人生道路上的航标,读书,读好书,是我无怨无悔的追求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子秤 程序