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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

HX711 1602顯示 矩陣鍵盤控制程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:490765 發(fā)表于 2019-5-5 19:20 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
矩陣鍵盤 P3口控制

單片機源程序如下:
  1. #include "reg51.h"
  2. #include "LCD1602.h"
  3. #include "HX711.h"

  4. #define uint unsigned int
  5. #define uchar unsigned char

  6. sbit Buzzer=P0^0;
  7. unsigned long HX711_Buffer = 0;
  8. unsigned long Weight_Maopi = 0,Weight_Shiwu = 0;
  9. char Price_Count = 0;
  10. unsigned char KEY_NUM = 0;
  11. unsigned char Price_Buffer[3] = {0x00,0x00,0x00};
  12. unsigned long Money = 0;
  13. bit Flag_OK = 0;

  14. //****************************************************
  15. //矩陣鍵盤掃描
  16. //****************************************************
  17. unsigned char KEY_Scan()
  18. {
  19.         unsigned char temp = 0;
  20.         unsigned char com = 0x55 , com1 = 0 , com2 = 0;
  21.         P3=0xf0;
  22.         if(P3!=0xf0)
  23.         {
  24.                 com1=P3;
  25.                 P3=0x0f;
  26.                 com2=P3;        
  27.         }
  28.         P3=0xf0;
  29.     while(P3!=0xf0);          
  30.         temp=com1|com2;
  31.         if(temp==0xee)com=1;//數(shù)字1
  32.         if(temp==0xed)com=4;//數(shù)字4
  33.         if(temp==0xeb)com=7;//數(shù)字7
  34.         if(temp==0xe7)com=11;//備用鍵*號鍵
  35.         if(temp==0xd7)com=0;//數(shù)字0
  36.         if(temp==0xb7)com=14;//備用鍵*號鍵
  37.        

  38.         if(temp==0xde)com=2; //數(shù)字2
  39.         if(temp==0xdd)com=5; //數(shù)字5
  40.         if(temp==0xdb)com=8;//數(shù)字8

  41.         if(temp==0xbe)com=3;//數(shù)字3
  42.         if(temp==0xbd)com=6; //數(shù)字6
  43.         if(temp==0xbb)com=9;//數(shù)字9

  44.         if(temp==0x7e)com=16;//數(shù)字A鍵,去皮功能         
  45.         if(temp==0x7d)com=15;//數(shù)字B鍵清除鍵,二次測量
  46.         if(temp==0x7b)com=12;//數(shù)字C輸入單價錯誤時返回上一步
  47.         if(temp==0x77)com=13;//數(shù)字D鍵,計算總價         
  48.         return(com);
  49. }

  50. //****************************************************
  51. //稱重
  52. //****************************************************
  53. void Get_Weight()
  54. {
  55.         HX711_Buffer = HX711_Read();
  56.         HX711_Buffer = HX711_Buffer/100;
  57.         if(HX711_Buffer > Weight_Maopi)                       
  58.         {
  59.                 Weight_Shiwu = HX711_Buffer;
  60.                 Weight_Shiwu = Weight_Shiwu - Weight_Maopi;        //獲取實物的AD采樣數(shù)值。
  61.         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.22+0.05); //計算實物的實際重量
  62. //因為不同的傳感器特性曲線不一樣,因此,每一個傳感器需要矯正這里的4.30這個除數(shù)。
  63. //當發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
  64. //如果測試出來的重量偏小時,減小改數(shù)值。
  65. //該數(shù)值一般在4.0-5.0之間。因傳感器不同而定。
  66. //+0.05是為了四舍五入百分位
  67.                 Buzzer = 1;                                //關(guān)閉警報
  68.         }
  69. //        else if(HX711_Buffer < Weight_Maopi - 30)
  70. //        {
  71. //                Buzzer = 0;                                //負重量報警
  72. //        }
  73. //        else if(HX711_Buffer > Weight_Maopi + 24970)                //大于5Kg的最大量程,報警       
  74. //        {
  75. //                Buzzer = 0;
  76. //        }

  77.         if(Weight_Shiwu > 5000 || HX711_Buffer < Weight_Maopi - 30)
  78.         {
  79.                 Buzzer = 0;       
  80.         }
  81.         else
  82.         {
  83.                 Buzzer = 1;
  84.         }

  85.        
  86. }

  87. //****************************************************
  88. //獲取毛皮重量
  89. //****************************************************
  90. void Get_Maopi()
  91. {
  92.         HX711_Buffer = HX711_Read();
  93.         Weight_Maopi = HX711_Buffer/100;               
  94. }

  95. //****************************************************
  96. //MS延時函數(shù)(12M晶振下測試)
  97. //****************************************************
  98. void Delay_ms(unsigned int n)
  99. {
  100.         unsigned int  i,j;
  101.         for(i=0;i<n;i++)
  102.                 for(j=0;j<123;j++);
  103. }
  104. void main()
  105. {
  106.         Init_LCD1602();                                                                        //初始化LCD1602

  107.         LCD1602_write_com(0x80);                                                //指針設(shè)置
  108.         LCD1602_write_word("Welcome to use! ");                        //開機畫面第一行


  109.         Delay_ms(2000);                 //延時2s


  110. loop:Price_Count = 0;
  111.         Price_Buffer[0] = 0;
  112.         Price_Buffer[1] = 0;
  113.         Price_Buffer[2] = 0;
  114.         Flag_OK = 0;

  115.         LCD1602_write_com(0x80);                                                //指針設(shè)置
  116.         LCD1602_write_word("+WEI |PRI | MON ");
  117.         LCD1602_write_com(0x80+0x40);                                //指針設(shè)置
  118.         LCD1602_write_word("0.000|  . |   . ");

  119.        

  120.        
  121.         Get_Maopi();                                //稱毛皮重量

  122.         while(1)
  123.         {
  124.                 if( Flag_OK == 0)
  125.                 {
  126.                         Get_Weight();                        //稱重
  127.        
  128.                         //顯示當前重量
  129.                         LCD1602_write_com(0x80+0x40);
  130.                         LCD1602_write_data(Weight_Shiwu/1000 + 0x30);
  131.                         LCD1602_write_data('.');
  132.                         LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
  133.                         LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
  134.                         LCD1602_write_data(Weight_Shiwu%10 + 0x30);
  135.                 }

  136.                 KEY_NUM = KEY_Scan();

  137.                 if( KEY_NUM != 0x55)                        //當返回的不是初值時候,確認按鍵按下。
  138.                 {
  139.                         if(KEY_NUM == 16)                        //數(shù)字A鍵,去皮功能
  140.                         {
  141.                                 Get_Maopi();                        //去皮       
  142.                         }

  143.                         if(KEY_NUM == 15)                        //數(shù)字B鍵清除鍵,二次測量
  144.                         {
  145.                                 goto loop;       
  146.                         }

  147.                         if(KEY_NUM == 12)                        //數(shù)字C輸入單價錯誤時返回上一步
  148.                         {
  149.                                 Price_Count--;
  150.                                 if( Price_Count < 0)
  151.                                 {
  152.                                         Price_Count = 0;
  153.                                 }
  154.                                
  155.                                 Price_Buffer[Price_Count] = 0;                           //清除上一個輸入的數(shù)據(jù)

  156.                                 switch(Price_Count)
  157.                                 {
  158.                                         case 0:
  159.                                                         LCD1602_write_com(0x80+0x40+6);
  160.                                                         LCD1602_write_data(' ');
  161.                                                         break;
  162.                                         case 1:
  163.                                                         LCD1602_write_com(0x80+0x40+7);
  164.                                                         LCD1602_write_data(' ');
  165.                                                         break;
  166.                                         case 2:
  167.                                                         LCD1602_write_com(0x80+0x40+9);
  168.                                                         LCD1602_write_data(' ');
  169.                                                         break;
  170.                                         default : break;
  171.                                 }       
  172.                         }

  173.                         if(KEY_NUM == 13)                        //數(shù)字D鍵,計算總價
  174.                         {
  175.                                 Money = Price_Buffer[0] * 100 + Price_Buffer[1] * 10 + Price_Buffer[2];       
  176.                                 Money = Money * Weight_Shiwu / 1000;
  177.                                 LCD1602_write_com(0x80+0x40+11);
  178.                                 LCD1602_write_data(Money/1000 + 0x30);                       
  179.                                 LCD1602_write_data(Money%1000/100 + 0x30);
  180.                                 LCD1602_write_data(Money%100/10 + 0x30);
  181.                                 LCD1602_write_data('.');
  182.                                 LCD1602_write_data(Money%10 + 0x30);
  183.                                
  184.                                 Flag_OK = 1;                                       
  185.                         }

  186.                         if(KEY_NUM >= 0 && KEY_NUM <= 9)                                          //顯示輸入的價值
  187.                         {
  188.                                 Price_Buffer[Price_Count] = KEY_NUM;
  189.        
  190.                                 switch(Price_Count)
  191.                                 {
  192.                                         case 0:
  193.                                                         LCD1602_write_com(0x80+0x40+6);
  194.                                                         LCD1602_write_data(Price_Buffer[0] + 0x30);
  195.                                                         break;
  196.                                         case 1:
  197.                                                         LCD1602_write_com(0x80+0x40+7);
  198.                                                         LCD1602_write_data(Price_Buffer[1] + 0x30);
  199.                                                         break;
  200.                                         case 2:
  201.                                                         LCD1602_write_com(0x80+0x40+9);
  202.                                                         LCD1602_write_data(Price_Buffer[2] + 0x30);
  203.                                                         break;
  204.                                         default : break;
  205.                                 }
  206.        
  207.                                 Price_Count++;
  208.        
  209.                                 if( Price_Count >= 3)
  210.                                 {
  211.                                         Price_Count = 3;
  212.                                 }
  213.                         }

  214.                 }

  215.         }
  216. }
復(fù)制代碼

所有資料51hei提供下載:
16.zip (45.01 KB, 下載次數(shù): 25)


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.久久 | 日韩免费一区二区 | 免费黄色av网站 | 中文字幕成人 | 久久一区二区免费视频 | 视频二区| 在线91 | 天天插天天操 | 亚洲精品一区在线观看 | 国产精品免费av | 国产视频久久 | wwwxx在线观看| 久久久久国产一区二区三区四区 | 淫片一级国产 | 久久亚洲精品国产精品紫薇 | 国产精品久久久久久久久久免费看 | 91久久精品一区二区二区 | 久久久欧洲 | 欧美黄页| 99久久免费精品国产男女高不卡 | 国产精品婷婷 | 亚洲精品视频一区 | 久久久91精品国产一区二区三区 | 国产91在线视频 | 日韩三级一区 | 亚洲毛片| 欧美日韩中文国产一区发布 | 亚洲精品久久久久久久久久久 | 国产乱码精品一品二品 | 亚洲国产精品成人综合久久久 | 国产精品美女久久久久 | 在线观看国产wwwa级羞羞视频 | 午夜日韩| 亚洲一区视频在线 | 成人国产精品一级毛片视频毛片 | 欧美日韩不卡 | 亚洲欧美日韩系列 | 欧美一区二区三区四区五区无卡码 | 干干干日日日 | 国产美女永久免费无遮挡 | 性一交一乱一透一a级 |