久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12075|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

分享一個(gè)基于51單片機(jī)的電子秤設(shè)計(jì)(LCD2864)的原理圖及源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
電路原理圖如下:


單片機(jī)源程序如下:
  1. /*************************************************************
  2.                       電子秤

  3. 補(bǔ)充說(shuō)明:
  4. ***************************************************************/
  5. #include<reg52.h>//頭文件
  6. #include<lcd12864.H>
  7. #include<HX711.h>
  8. #include<KEY.h>
  9. #include<math.h>
  10. #include<stdio.h>

  11. #define        MAX 3         //宏定義,單價(jià)最大輸入3位數(shù)
  12. /************************引腳定義************************/
  13. sbit led=P3^2;         //超重指示燈
  14. /************************變量定義************************/
  15. uchar key;       //存儲(chǔ)按鍵值
  16. double price=0;  //存儲(chǔ)零時(shí)單價(jià)          
  17. double prices=0; //存儲(chǔ)最終單價(jià)

  18. bit price_f=0;   //記錄輸入單價(jià)標(biāo)志位
  19. bit price_w=0;   //記錄輸入單價(jià)完成標(biāo)志位
  20. uchar price_z=0; //存儲(chǔ)總價(jià)
  21. bit dian_f=0;    //小數(shù)單價(jià)標(biāo)志位
  22. bit dian_w=0;    //小數(shù)單價(jià)標(biāo)志位
  23. uchar n=0;             //記錄當(dāng)前輸入了幾位數(shù)
  24. /********************************************************
  25. 函數(shù)名稱:void fixed_display()
  26. 函數(shù)作用:固定顯示函數(shù)
  27. 參數(shù)說(shuō)明:
  28. ********************************************************/
  29. void fixed_display()
  30. {  
  31.         LCD12864_display_string(2,1,"電子秤"); //2:表示第3列,1:表示第1行,所有關(guān)于顯示都一樣
  32.         LCD12864_display_string(0,2,"重量:");  //0:表示第1列,2:表示第2行,所有關(guān)于顯示都一樣
  33.         LCD12864_display_string(0,3,"單價(jià): 0");
  34.         LCD12864_display_string(0,4,"總價(jià):");


  35.         LCD12864_display_string(7,2,"g");
  36.         LCD12864_image3216(6,3,ASI);                   //6:表示第7列,3:表示第3行,顯示【元/Kg】
  37.         LCD12864_display_string(7,4,"元");
  38. }
  39. /********************************************************
  40. 函數(shù)名稱:void chuli_num(uchar keys)
  41. 函數(shù)作用:在輸入單價(jià)的時(shí)候按下數(shù)字按鍵處理函數(shù)
  42. 參數(shù)說(shuō)明:
  43. ********************************************************/
  44. void chuli_num(uchar keys)
  45. {
  46.         if((price_f==1&&price_w==0&&n<MAX)||(dian_f==1&&dian_w==0))//判斷是否為輸入單價(jià)狀態(tài),并且輸入未滿最大整數(shù)位數(shù)或者小數(shù)未滿一位,才可以繼續(xù)輸入
  47.         {
  48.                 if(dian_f==0)                    //判斷是否為整數(shù)
  49.                 {
  50.                         price=price*10+keys;//單價(jià)計(jì)算
  51.                         n++;                                //輸入的位數(shù)加1
  52.                         if(n==MAX)                        //判斷是否輸入完成
  53.                                 price_w=1;                //是的話標(biāo)記輸入完成               
  54.                 }
  55.                 else                                        //否者為小數(shù)
  56.                 {
  57.                         price=price+(float)keys/10;//單價(jià)計(jì)算         12+ 1/10=12.1
  58.                         dian_w=1;                                   //標(biāo)記小數(shù)輸入完成。因?yàn)閱蝺r(jià)最低也就0.1元,所以只能輸入一位小數(shù)
  59.                         price_w=1;                                   //標(biāo)記單價(jià)輸入完成
  60.                 }
  61.         }       
  62. }
  63. /********************************************************
  64. 函數(shù)名稱:void chuli()
  65. 函數(shù)作用:按鍵處理函數(shù)
  66. 參數(shù)說(shuō)明:
  67. ********************************************************/
  68. void chuli()
  69. {
  70. /*****************按下數(shù)字鍵1~9鍵*****************/       
  71.         if(key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9')//判斷當(dāng)前按下是否為0~9的數(shù)字鍵
  72.                 chuli_num(key-0x30);
  73. /*********************按下‘0’鍵***********************/       
  74.         if(key=='0')
  75.         {
  76.                 if((price_f==1&&price!=0&&price_w==0&&n<MAX)||(dian_f==1&&dian_w==0))//判斷是否為輸入單價(jià)狀態(tài),并且輸入未滿最大整數(shù)位或者小數(shù)未滿一位,才可以繼續(xù)輸入
  77.                 {
  78.                         if(dian_f==0)                  //判斷是否為整數(shù)
  79.                         {
  80.                                 price=price*10+0; //單價(jià)計(jì)算
  81.                                 n++;                          //輸入位數(shù)加1
  82.                                 if(n==MAX)                  //判斷是否輸入四位完成
  83.                                         price_w=1;          //是,標(biāo)記輸入完成
  84.                         }
  85.                         else                                  //小數(shù)
  86.                         {
  87.                                 price=price+0.0;  //單價(jià)計(jì)算
  88.                                 dian_w=1;                  //標(biāo)記小數(shù)輸入完成。
  89.                                 price_w=1;                  //標(biāo)記單價(jià)輸入完成
  90.                         }       
  91.                 }
  92.         }
  93. /*********************按下‘.’鍵***********************/
  94.         if(key=='.')
  95.         {               
  96.                 if(price_f==1&&dian_f==0) //標(biāo)記位當(dāng)前單價(jià)是具有小數(shù)
  97.                         dian_f=1;
  98.         }
  99. /*********************按下‘去皮’鍵***********************/
  100.         if(key=='Q')
  101.         {
  102.                 if(price_f!=1)                          //重新獲取初值,0kg對(duì)應(yīng)的AD值
  103.                         init_val=fil();                  
  104.         }  
  105. /*********************按下‘單價(jià)’鍵***********************/
  106.         if(key=='D')
  107.         {
  108.                  price_f=1;                                  //標(biāo)記位單價(jià)輸入狀態(tài)
  109.                  LCD12864_display_string(3,3,"        ");
  110.         }
  111. /*********************按下‘重輸’鍵***********************/
  112.         if(key=='C')
  113.         {
  114.                 if(price_f==1)
  115.                 {
  116.                         price_f=1;                          //清除所以數(shù)據(jù),重新輸入單價(jià)
  117.                         price=0;
  118.                         n=0;
  119.                         price_w=0;
  120.                         dian_f=0;
  121.                         dian_w=0;
  122.                         LCD12864_display_string(3,3,"        ");
  123.                 }
  124.         }
  125. /*********************按下‘退格’鍵***********************/
  126.         if(key=='T')                                          //13
  127.         {
  128.                  if(price_f==1&&price!=0) //判斷是否為輸入狀態(tài),并且當(dāng)前輸入的單價(jià)不為0采集必要進(jìn)行退格處理
  129.                  {
  130.                          if(dian_f==1)                  //小數(shù)
  131.                         {
  132.                                 price_w=0;
  133.                                 dian_w=0;
  134.                                 dian_f=0;
  135.                                 price=(ulong)price;       
  136.                                 LCD12864_display_string(3,3,"        ");
  137.                         }
  138.                         else                                  //整數(shù)
  139.                         {
  140.                                 n--;                          //輸入的位數(shù)減1
  141.                                 price_w=0;                                                                 
  142.                                 price=(ulong)price/10;//單價(jià)計(jì)算
  143.                                 LCD12864_display_string(3,3,"        ");
  144.                         }
  145.                  }
  146.                  else
  147.                          if(price_f==0)
  148.                          {
  149.                                   prices=0;
  150.                                  //清空顯示合計(jì)后的價(jià)格
  151.                                  LCD12864_display_string(3,3,"        ");
  152.                          }
  153.         }
  154. /*********************按下‘確認(rèn)’鍵***********************/
  155.         if(key=='=')
  156.         {
  157.                 if(price_f==1)                          //按下確定鍵后,將輸入的單價(jià)記錄下來(lái)
  158.                 {
  159.                          prices=price;                  //記錄單價(jià)
  160.                          price_f=0;                          //以下清除所有變量
  161.                          price=0;
  162.                          n=0;
  163.                          price_w=0;
  164.                          dian_f=0;
  165.                          dian_w=0;
  166.                  }
  167.         }
  168. }
  169. /********************************************************
  170. 函數(shù)名稱:void main()
  171. 函數(shù)作用:主函數(shù)
  172. 參數(shù)說(shuō)明:
  173. ********************************************************/
  174. void main()
  175. {
  176.         uchar weight_s[8];          //存儲(chǔ)重量轉(zhuǎn)換為字符串
  177.         uchar price_s[4]="0"; //存儲(chǔ)單價(jià)轉(zhuǎn)換為字符串
  178.         uchar z_s[8];
  179.         uchar wei,i;
  180.         LCD12864_init();

  181.         /*LCD12864_display_string(1,2,"初始化.");
  182.         init_val=fil2();
  183.         LCD12864_display_string(1,2,"初始化..");
  184.         init_val=(init_val+fil2())/2;
  185.         LCD12864_display_string(1,2,"初始化...");
  186.         init_val=(init_val+fil2())/2;*/
  187.         write_com(0x01);                                  //清除屏幕顯示

  188.         LCD12864_image12864(num12864);        //開(kāi)機(jī)顯示啟動(dòng)畫面
  189.         init_val=fil2();                                //讀取0kg初始值
  190.         while(ii>=8000)                                        //判斷模塊是否插接好
  191.         {
  192.                 LCD12864_clear12864();                //清除開(kāi)機(jī)畫面       
  193.                 LCD12864_display_string(2,1,"☆警告☆");          
  194.                 LCD12864_display_string(1,2,"未檢測(cè)到模塊");
  195.                 LCD12864_display_string(0,3,"關(guān)閉電源后檢測(cè)下");
  196.                 LCD12864_display_string(0,4,"HX711 是否插接好");               
  197.         }
  198.         init_val=(init_val+fil2())/2;        //讀取0kg初始值,這里多次采集取平均值,為了提高測(cè)量精度
  199.         init_val=(init_val+fil2())/2;
  200.         init_val=(init_val+fil2())/2;
  201.         init_val=(init_val+fil2())/2;
  202.         init_val=(init_val+fil2())/2;
  203.         init_val=fil2();
  204.         init_val=(init_val+fil2())/2;
  205.         init_val=(init_val+fil2())/2;
  206.         init_val=(init_val+fil2())/2;
  207.         init_val=(init_val+fil2())/2;
  208.         init_val=fil2();
  209.         init_val=(init_val+fil2())/2;
  210.         init_val=(init_val+fil2())/2;
  211.         init_val=(init_val+fil2())/2;
  212.         LCD12864_clear12864();                        //清除開(kāi)機(jī)畫面
  213.         fixed_display();                                //顯示固定內(nèi)容
  214.         while(1)                                                //死循環(huán)
  215.         {
  216.                 if(price_f==0)                    //非單價(jià)輸入狀態(tài)
  217.                 {
  218.                         value=fil();            //采集實(shí)際AD
  219.                         if(value<init_val)
  220.                                 value=(init_val-value)/418.251;//轉(zhuǎn)換成實(shí)際重量,其中最后一個(gè)數(shù)字是指1g所占的AD410.05
  221.                                 //value=(init_val-value)/41.220;//轉(zhuǎn)換成實(shí)際重量,其中最后一個(gè)數(shù)字是指1g所占的AD值                          
  222.                         else
  223.                         {
  224.                                 value=0;                        //重量=0                       
  225.                                 led=1;                                //關(guān)閉led
  226.                         }
  227.                         if(value<=10000)            //判斷是否超重
  228.                         //if(value<=100000)
  229.                         {
  230.                                 led=1;                    //關(guān)閉超重警示
  231.                                 //顯示實(shí)際重量
  232.                             wei=sprintf(weight_s,"%ld",(ulong)value);
  233.                                 //wei=sprintf(weight_s,"%0.1f",(double)value/10);
  234.                                 for(i=wei/2+3;i<7;i++)
  235.                                         LCD12864_display_string(i,2,"  ");
  236.                                 LCD12864_display_string(3,2,weight_s);
  237.                                 //顯示總價(jià)
  238.                                 wei=sprintf(z_s,"%0.1f",(double)value/1000*prices);
  239.                                 //wei=sprintf(z_s,"%0.1f",(double)value/10000*prices);
  240.                                 for(i=wei/2+3;i<7;i++)
  241.                                         LCD12864_display_string(i,4,"  ");
  242.                                 LCD12864_display_string(3,4,z_s);
  243.                         }
  244.                         else                                //超重
  245.                         {
  246.                                 led=0;                        //指示燈警示
  247.                                 LCD12864_display_string(3,2,"超重    ");//顯示“超重”提示
  248.                         }                       
  249.                 }
  250.                 key=keyscan();//獲取按鍵返回值
  251.        
  252.                 if(key!=0xff) //判斷是否有按鍵按下
  253.                 {
  254.                         chuli();  //按鍵處理
  255.                         if(price_f==1)        //單價(jià)輸入
  256.                         {
  257.                                 if(dian_f==1)
  258.                                 {
  259.                                         sprintf(price_s,"%0.1f",price);                   //將價(jià)格轉(zhuǎn)換成字符,有小數(shù)
  260.                                         LCD12864_display_string(3,3,price_s);  //顯示價(jià)格
  261.                                         LCD12864_clear3216(6,3);
  262.                                 }
  263.                                 else
  264.                                 {
  265.                                         sprintf(price_s,"%ld",(ulong)price);   //將價(jià)格轉(zhuǎn)換成字符,整數(shù)
  266.                                         LCD12864_display_string(3,3,price_s);  //顯示價(jià)格
  267.                                         LCD12864_clear3216(6,3);
  268.                                 }
  269.                         }
  270.                         else
  271.                         {
  272.                                 sprintf(price_s,"%0.1f",prices);                   //將價(jià)格轉(zhuǎn)換成字符,最終的價(jià)格
  273.                                 LCD12864_display_string(3,3,price_s);           //顯示價(jià)格
  274.                                 LCD12864_image3216(6,3,ASI);                           //顯示【元/Kg】
  275.                         }                        
  276.                 }                        
  277.         }
  278. }
復(fù)制代碼

所有資料51hei提供下載:
電子秤源程序代碼(Keil).zip (69.36 KB, 下載次數(shù): 210)




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:307391 發(fā)表于 2018-5-6 22:01 | 只看該作者
大神,有沒(méi)有串口通信功能?
回復(fù)

使用道具 舉報(bào)

板凳
ID:319175 發(fā)表于 2018-5-7 11:25 | 只看該作者
luxuan 發(fā)表于 2018-5-6 22:01
大神,有沒(méi)有串口通信功能?

串口通信功能得自己在程序里加
回復(fù)

使用道具 舉報(bào)

地板
ID:107906 發(fā)表于 2018-5-8 16:31 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

5#
ID:313328 發(fā)表于 2018-5-8 17:49 | 只看該作者
原理圖很漂亮
回復(fù)

使用道具 舉報(bào)

6#
ID:325499 發(fā)表于 2018-5-8 21:29 | 只看該作者
有沒(méi)有元器件圖呢,假期作業(yè)準(zhǔn)備動(dòng)手做一個(gè)
回復(fù)

使用道具 舉報(bào)

7#
無(wú)效樓層,該帖已經(jīng)被刪除
8#
ID:370415 發(fā)表于 2018-7-12 18:27 | 只看該作者
不錯(cuò),贊一個(gè),
回復(fù)

使用道具 舉報(bào)

9#
ID:382025 發(fā)表于 2018-8-2 12:20 來(lái)自觸屏版 | 只看該作者
哥  那個(gè)我硬件搭起來(lái)了  就是軟件一直有問(wèn)題  能回復(fù)一下嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:382221 發(fā)表于 2018-8-2 16:30 | 只看該作者
大神厲害了0.0
回復(fù)

使用道具 舉報(bào)

11#
ID:382221 發(fā)表于 2018-8-2 16:31 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

12#
ID:377382 發(fā)表于 2018-8-4 13:47 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

13#
ID:505823 發(fā)表于 2019-4-6 16:55 | 只看該作者
正好需要,多謝樓主
回復(fù)

使用道具 舉報(bào)

14#
ID:328121 發(fā)表于 2019-7-18 13:13 | 只看該作者
不錯(cuò),多謝樓主
回復(fù)

使用道具 舉報(bào)

15#
ID:596808 發(fā)表于 2019-8-9 11:11 | 只看該作者

有原理圖嗎?
回復(fù)

使用道具 舉報(bào)

16#
ID:647690 發(fā)表于 2019-11-23 10:33 | 只看該作者
電路圖是哪一個(gè)文件
回復(fù)

使用道具 舉報(bào)

17#
ID:448997 發(fā)表于 2019-12-10 15:30 | 只看該作者
很棒啊
回復(fù)

使用道具 舉報(bào)

18#
ID:448997 發(fā)表于 2019-12-12 13:12 | 只看該作者
我怎么沒(méi)看到總價(jià)的計(jì)算公式,就是重量乘單價(jià)的那個(gè)
回復(fù)

使用道具 舉報(bào)

19#
無(wú)效樓層,該帖已經(jīng)被刪除
20#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线精品视频 | 国产欧美精品一区二区三区 | 国产精品亚洲视频 | 亚洲欧美视频一区二区 | 久久1区| 色影视| 91在线精品视频 | 久久成人18免费网站 | 久久99视频这里只有精品 | 成年网站在线观看 | 欧美黄色小视频 | 午夜精品影院 | 久久久999免费视频 999久久久久久久久6666 | 在线伊人| 亚洲精品久久久久中文字幕欢迎你 | 成人h视频| 成人av鲁丝片一区二区小说 | 欧美日韩在线一区二区 | 2018中文字幕第一页 | 精品国产欧美一区二区三区不卡 | 久久99网站 | 天天爽夜夜操 | 国产欧美精品一区二区色综合朱莉 | 九九激情视频 | 激情亚洲 | 中文字幕第100页 | a免费视频 | 日韩在线播放一区 | 亚洲国产精品一区二区三区 | 一区日韩| 日韩中文字幕视频在线观看 | 黄瓜av | 亚洲人成人网 | 久久毛片 | 欧美1级| 高清黄色网址 | 日本精品在线播放 | av 一区二区三区 | 久色视频在线观看 | 男女污网站 | 中文字幕一区在线 |