欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 分享一個基于51單片機的電子秤設(shè)計(LCD2864)的原理圖及源碼 [打印本頁]

作者: 啦啦啦我的    時間: 2018-5-6 13:49
標(biāo)題: 分享一個基于51單片機的電子秤設(shè)計(LCD2864)的原理圖及源碼
電路原理圖如下:


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

  3. 補充說明:
  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         //宏定義,單價最大輸入3位數(shù)
  12. /************************引腳定義************************/
  13. sbit led=P3^2;         //超重指示燈
  14. /************************變量定義************************/
  15. uchar key;       //存儲按鍵值
  16. double price=0;  //存儲零時單價          
  17. double prices=0; //存儲最終單價

  18. bit price_f=0;   //記錄輸入單價標(biāo)志位
  19. bit price_w=0;   //記錄輸入單價完成標(biāo)志位
  20. uchar price_z=0; //存儲總價
  21. bit dian_f=0;    //小數(shù)單價標(biāo)志位
  22. bit dian_w=0;    //小數(shù)單價標(biāo)志位
  23. uchar n=0;             //記錄當(dāng)前輸入了幾位數(shù)
  24. /********************************************************
  25. 函數(shù)名稱:void fixed_display()
  26. 函數(shù)作用:固定顯示函數(shù)
  27. 參數(shù)說明:
  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,"單價: 0");
  34.         LCD12864_display_string(0,4,"總價:");


  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ù)作用:在輸入單價的時候按下數(shù)字按鍵處理函數(shù)
  42. 參數(shù)說明:
  43. ********************************************************/
  44. void chuli_num(uchar keys)
  45. {
  46.         if((price_f==1&&price_w==0&&n<MAX)||(dian_f==1&&dian_w==0))//判斷是否為輸入單價狀態(tài),并且輸入未滿最大整數(shù)位數(shù)或者小數(shù)未滿一位,才可以繼續(xù)輸入
  47.         {
  48.                 if(dian_f==0)                    //判斷是否為整數(shù)
  49.                 {
  50.                         price=price*10+keys;//單價計算
  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;//單價計算         12+ 1/10=12.1
  58.                         dian_w=1;                                   //標(biāo)記小數(shù)輸入完成。因為單價最低也就0.1元,所以只能輸入一位小數(shù)
  59.                         price_w=1;                                   //標(biāo)記單價輸入完成
  60.                 }
  61.         }       
  62. }
  63. /********************************************************
  64. 函數(shù)名稱:void chuli()
  65. 函數(shù)作用:按鍵處理函數(shù)
  66. 參數(shù)說明:
  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))//判斷是否為輸入單價狀態(tài),并且輸入未滿最大整數(shù)位或者小數(shù)未滿一位,才可以繼續(xù)輸入
  77.                 {
  78.                         if(dian_f==0)                  //判斷是否為整數(shù)
  79.                         {
  80.                                 price=price*10+0; //單價計算
  81.                                 n++;                          //輸入位數(shù)加1
  82.                                 if(n==MAX)                  //判斷是否輸入四位完成
  83.                                         price_w=1;          //是,標(biāo)記輸入完成
  84.                         }
  85.                         else                                  //小數(shù)
  86.                         {
  87.                                 price=price+0.0;  //單價計算
  88.                                 dian_w=1;                  //標(biāo)記小數(shù)輸入完成。
  89.                                 price_w=1;                  //標(biāo)記單價輸入完成
  90.                         }       
  91.                 }
  92.         }
  93. /*********************按下‘.’鍵***********************/
  94.         if(key=='.')
  95.         {               
  96.                 if(price_f==1&&dian_f==0) //標(biāo)記位當(dāng)前單價是具有小數(shù)
  97.                         dian_f=1;
  98.         }
  99. /*********************按下‘去皮’鍵***********************/
  100.         if(key=='Q')
  101.         {
  102.                 if(price_f!=1)                          //重新獲取初值,0kg對應(yīng)的AD值
  103.                         init_val=fil();                  
  104.         }  
  105. /*********************按下‘單價’鍵***********************/
  106.         if(key=='D')
  107.         {
  108.                  price_f=1;                                  //標(biāo)記位單價輸入狀態(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ù),重新輸入單價
  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)前輸入的單價不為0采集必要進行退格處理
  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;//單價計算
  143.                                 LCD12864_display_string(3,3,"        ");
  144.                         }
  145.                  }
  146.                  else
  147.                          if(price_f==0)
  148.                          {
  149.                                   prices=0;
  150.                                  //清空顯示合計后的價格
  151.                                  LCD12864_display_string(3,3,"        ");
  152.                          }
  153.         }
  154. /*********************按下‘確認’鍵***********************/
  155.         if(key=='=')
  156.         {
  157.                 if(price_f==1)                          //按下確定鍵后,將輸入的單價記錄下來
  158.                 {
  159.                          prices=price;                  //記錄單價
  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ù)說明:
  173. ********************************************************/
  174. void main()
  175. {
  176.         uchar weight_s[8];          //存儲重量轉(zhuǎn)換為字符串
  177.         uchar price_s[4]="0"; //存儲單價轉(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);        //開機顯示啟動畫面
  189.         init_val=fil2();                                //讀取0kg初始值
  190.         while(ii>=8000)                                        //判斷模塊是否插接好
  191.         {
  192.                 LCD12864_clear12864();                //清除開機畫面       
  193.                 LCD12864_display_string(2,1,"☆警告☆");          
  194.                 LCD12864_display_string(1,2,"未檢測到模塊");
  195.                 LCD12864_display_string(0,3,"關(guān)閉電源后檢測下");
  196.                 LCD12864_display_string(0,4,"HX711 是否插接好");               
  197.         }
  198.         init_val=(init_val+fil2())/2;        //讀取0kg初始值,這里多次采集取平均值,為了提高測量精度
  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();                        //清除開機畫面
  213.         fixed_display();                                //顯示固定內(nèi)容
  214.         while(1)                                                //死循環(huán)
  215.         {
  216.                 if(price_f==0)                    //非單價輸入狀態(tài)
  217.                 {
  218.                         value=fil();            //采集實際AD
  219.                         if(value<init_val)
  220.                                 value=(init_val-value)/418.251;//轉(zhuǎn)換成實際重量,其中最后一個數(shù)字是指1g所占的AD410.05
  221.                                 //value=(init_val-value)/41.220;//轉(zhuǎn)換成實際重量,其中最后一個數(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.                                 //顯示實際重量
  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.                                 //顯示總價
  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)        //單價輸入
  256.                         {
  257.                                 if(dian_f==1)
  258.                                 {
  259.                                         sprintf(price_s,"%0.1f",price);                   //將價格轉(zhuǎn)換成字符,有小數(shù)
  260.                                         LCD12864_display_string(3,3,price_s);  //顯示價格
  261.                                         LCD12864_clear3216(6,3);
  262.                                 }
  263.                                 else
  264.                                 {
  265.                                         sprintf(price_s,"%ld",(ulong)price);   //將價格轉(zhuǎn)換成字符,整數(shù)
  266.                                         LCD12864_display_string(3,3,price_s);  //顯示價格
  267.                                         LCD12864_clear3216(6,3);
  268.                                 }
  269.                         }
  270.                         else
  271.                         {
  272.                                 sprintf(price_s,"%0.1f",prices);                   //將價格轉(zhuǎn)換成字符,最終的價格
  273.                                 LCD12864_display_string(3,3,price_s);           //顯示價格
  274.                                 LCD12864_image3216(6,3,ASI);                           //顯示【元/Kg】
  275.                         }                        
  276.                 }                        
  277.         }
  278. }
復(fù)制代碼

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





作者: luxuan    時間: 2018-5-6 22:01
大神,有沒有串口通信功能?
作者: 啦啦啦我的    時間: 2018-5-7 11:25
luxuan 發(fā)表于 2018-5-6 22:01
大神,有沒有串口通信功能?

串口通信功能得自己在程序里加
作者: coldfire    時間: 2018-5-8 16:31
感謝樓主分享
作者: feiji666    時間: 2018-5-8 17:49
原理圖很漂亮
作者: amireu    時間: 2018-5-8 21:29
有沒有元器件圖呢,假期作業(yè)準(zhǔn)備動手做一個
作者: linyin    時間: 2018-7-12 18:27
不錯,贊一個,
作者: 酷酷的騰    時間: 2018-8-2 12:20
哥  那個我硬件搭起來了  就是軟件一直有問題  能回復(fù)一下嗎
作者: whiterice    時間: 2018-8-2 16:30
大神厲害了0.0
作者: whiterice    時間: 2018-8-2 16:31
感謝樓主分享
作者: 中恒電子asus    時間: 2018-8-4 13:47
感謝樓主分享

作者: 第1001個用戶    時間: 2019-4-6 16:55
正好需要,多謝樓主
作者: hellowC8051    時間: 2019-7-18 13:13
不錯,多謝樓主
作者: 2223.    時間: 2019-8-9 11:11
feiji666 發(fā)表于 2018-5-8 17:49
原理圖很漂亮

有原理圖嗎?

作者: xjhun    時間: 2019-11-23 10:33
電路圖是哪一個文件
作者: kino.    時間: 2019-12-10 15:30
很棒啊
作者: kino.    時間: 2019-12-12 13:12
我怎么沒看到總價的計算公式,就是重量乘單價的那個





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1