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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8007|回復: 5
打印 上一主題 下一主題
收起左側

HX711+51單片機電子秤數碼管顯示設計資料下載

[復制鏈接]
跳轉到指定樓層
樓主
電子秤資料包:


1、單片機是通用的無論51還是52、無論stc還是at都一樣,引腳功能都一樣,原理圖和程序也是一樣的。
2、原理圖中的. sch等格式是要用protel99se打開的,沒有軟件的不要緊,我已幫您轉換成word格式和pdf格式的了。
3、程序中的.c文件可以用記事本打開,就是程序了。其他的是寫程序是自動生成的,沒什么用的。
4、可以按照正面布局,盡量不要按照實物的背面焊接,很容易看錯,要按照原理圖焊接,不要按照仿真圖焊接,因為仿真只是模擬一個現象。
5、關于資料好評后發送~~好評后記得向客服要哦~~~,我們的論文是針對這個設計寫的,不包修改,不包查重,望知悉。
6、上傳我們論文者,以后肯定不會找到好工作的~~鄙視上傳我們論文和資料的!!忘親們理解和支持,謝謝~~
我們寶貝詳情寫的附送資料都會送,沒寫的就是沒有送的!!
本視頻和資料的最終解釋權歸本店所有,勿轉載和倒賣。謝謝!!

單片機源程序如下:
  1. #include <reg52.h>                 //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
  4. #include <intrins.h>

  5. //數碼管段選定義      0     1    2    3    4    5        6         7          8           9        
  6. uchar code smg_du[]={0x28,0xe1,0x32,0xa2,0x54,0xa1,0x21,0xea,0x20,0xa0,
  7.                                            0x60,0x25,0x39,0x26,0x31,0x71,0xff};         //斷碼
  8. //數碼管位選定義
  9. uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
  10. uchar dis_smg[8] = {0};        
  11. uchar smg_i = 4;    //顯示數碼管的個位數
  12. sbit beep = P2^3;   //蜂鳴器IO口定義

  13. bit flag_lj_en;                 //按鍵連加使能
  14. bit flag_lj_3_en;         //按鍵連3次連加后使能  加的數就越大了
  15. uchar key_time,key_value;      //用做連加的中間變量
  16. bit key_500ms  ;

  17. bit flag_300ms ;
  18. uchar menu_1;       //菜單設計的變量
  19. uint t_high = 300;           //上限報警值

  20. sbit hx711_dout=P2^7;
  21. sbit hx711_sck=P2^6;

  22. long weight;

  23. unsigned long HX711_Buffer = 0;
  24. unsigned long Weight_Maopi = 0;

  25. uint temp,qi_weight;
  26. bit chaozhong_flag;
  27. bit leiji_flag;
  28. uchar flag_200ms ;

  29. #define GapValue 437.0

  30. uint temp,qi_weight;
  31. bit chaozhong_flag;
  32. bit leiji_flag;

  33. /***********************1ms延時函數*****************************/
  34. void delay_1ms(uint q)
  35. {
  36.         uint i,j;
  37.         for(i=0;i<q;i++)
  38.                 for(j=0;j<120;j++);
  39. }

  40. /***********************數碼顯示函數*****************************/
  41. void display()
  42. {
  43.         static uchar i;   
  44.         i++;
  45.         if(i >= smg_i)
  46.                 i = 0;        
  47.         P1 = 0xff;                         //消隱
  48.         P3 = smg_we[i];                          //位選
  49.         P1 = dis_smg[i];                 //段選               
  50. }


  51. /*************定時器0初始化程序***************/
  52. void time_init()         
  53. {
  54.         EA   = 1;                   //開總中斷
  55.         TMOD = 0X01;          //定時器0、定時器1工作方式1
  56.         ET0  = 1;                  //開定時器0中斷
  57.         TR0  = 1;                  //允許定時器0定時
  58. }

  59. /********************獨立按鍵程序*****************/
  60. uchar key_can;         //按鍵值

  61. void key()         //獨立按鍵程序
  62. {
  63.         static uchar key_new;
  64.         key_can = 20;                   //按鍵值還原
  65.         P2 |= 0x07;
  66.         if((P2 & 0x07) != 0x07)                //按鍵按下
  67.         {
  68.                 if(key_500ms == 1)        //連加
  69.                 {
  70.                         key_500ms = 0;
  71.                         key_new = 1;
  72.                 }
  73.                 delay_1ms(1);                     //按鍵消抖動
  74.                 if(((P2 & 0x07) != 0x07) && (key_new == 1))
  75.                 {                                                //確認是按鍵按下
  76.                         key_new = 0;
  77.                         switch(P2 & 0x07)
  78.                         {
  79.                                 case 0x06: key_can = 3; break;           //得到k2鍵值
  80.                                 case 0x05: key_can = 2; break;           //得到k3鍵值
  81.                                 case 0x03: key_can = 1; break;           //得到k4鍵值
  82.                         }
  83.                         flag_lj_en = 1;         //連加使能
  84.                 }                        
  85.         }
  86.         else
  87.         {
  88.                 if(key_new == 0)
  89.                 {
  90.                         key_new = 1;
  91.                         flag_lj_en = 0;                //關閉連加使能
  92.                         flag_lj_3_en = 0;        //關閉3秒后使能
  93.                         key_value = 0;                //清零
  94.                         key_time = 0;
  95.                         key_500ms = 0;
  96.                 }
  97.         }        
  98. }

  99. /****************按鍵處理數碼管顯示函數***************/
  100. void key_with()
  101. {
  102.         if(key_can == 1)          //設置鍵
  103.         {
  104.                 menu_1 ++;
  105.                 if(menu_1 >= 2)
  106.                 {
  107.                         menu_1 = 0;
  108.                         smg_i = 4;                  //數碼管顯示3位
  109.                         flag_300ms = 1;
  110.                 }
  111.         }
  112.         if(menu_1 == 1)                        //設置高溫報警
  113.         {
  114.                 smg_i = 4;                  //數碼管顯示4位
  115.                 if(key_can == 2)
  116.                 {
  117.                         if(flag_lj_3_en == 0)
  118.                                 t_high += 10 ;                //按鍵按下未松開自動加三次        
  119.                         else
  120.                                 t_high += 100;        //按鍵按下未松開自動加三次之后每次自動加10
  121.                         if(t_high > 9990)
  122.                                 t_high = 9990;
  123.                 }
  124.                 if(key_can == 3)
  125.                 {
  126.                         if(flag_lj_3_en == 0)
  127.                                 t_high -= 10 ;                //按鍵按下未松開自動減三次        
  128.                         else
  129.                                 t_high -= 100;        //按鍵按下未松開自動減三次之后每次自動減10
  130.                         if(t_high <= 10)
  131.                                 t_high = 10;
  132.                 }
  133.                 dis_smg[0] = smg_du[t_high / 10 % 10];                   //取小數顯示
  134.                 dis_smg[1] = smg_du[t_high / 100 % 10] ;  //取個位顯示
  135.                 dis_smg[2] = smg_du[t_high / 1000 % 10] & 0xdf;           //取十位顯示
  136.                 dis_smg[3] = 0x64;         //H
  137.         }        
  138. }  

  139. /****************報警函數***************/
  140. void clock_h_l()
  141. {
  142.         static uchar value;
  143.         if(weight >= t_high)
  144.         {
  145.                 value ++;  //消除實際距離在設定距離左右變化時的干擾
  146.                 if(value >= 2)
  147.                 {
  148.                         beep = ~beep;           //蜂鳴器報警                        
  149.                 }        
  150.         }
  151.         else
  152.         {
  153.                 beep = 1;        
  154.         }                        
  155. }


  156. void Delay__hx711_us(void)
  157. {
  158.         _nop_();
  159.         _nop_();
  160. }

  161. unsigned long HX711_Read(void)        //增益128
  162. {
  163.         unsigned long count;
  164.         unsigned char i;
  165.           hx711_sck=0;
  166.         Delay__hx711_us();
  167.           hx711_dout=1;
  168.           while(hx711_dout==0);
  169.           for(i=0;i<24;i++)
  170.         {
  171.                 hx711_sck=0;
  172.                   count=count<<1;
  173.                   hx711_sck=1;
  174.                   if(hx711_dout)
  175.                         count++;
  176.         }
  177.          hx711_sck=1;
  178.     count=count^0x8000;//下降沿來時,轉換數據
  179.         Delay__hx711_us();
  180.         hx711_sck=0;  
  181.         return(count);
  182. }

  183. void get_weight()          //獲取被測物體重量
  184. {
  185.         weight = HX711_Read();
  186.         weight = weight - Weight_Maopi;                //獲取凈重
  187.         if(weight > 0)                        
  188.         {        
  189.                 weight = (unsigned int)((float)weight/GapValue);         //計算實物的實際重量                                                                                                                                       
  190.         }
  191.         else
  192.         {
  193.                 weight = 0;
  194.         }
  195. }


  196. /****************主函數***************/
  197. void main()
  198. {
  199.         time_init();                    //初始化定時器
  200.         while(1)
  201.         {               
  202.                 key();                                        //按鍵程序
  203.                 if(key_can < 10)
  204.                 {
  205.                         key_with();                        //設置報警壓力        
  206.                 }
  207.                 if(flag_300ms == 1)            //300ms 處理一次壓力程序
  208.                 {           
  209.                         flag_300ms = 0;        
  210.                         get_weight();          //獲取被測物體重量
  211.                         clock_h_l();        //報警函數
  212.                         if(menu_1 == 0)
  213.                         {        
  214.                                 smg_i = 4;
  215.                                 dis_smg[0] = smg_du[weight % 10];         //取壓力的小數顯示
  216.                                 dis_smg[1] = smg_du[weight / 10 % 10] ; //取壓力的個位顯示
  217.                                 dis_smg[2] = smg_du[weight / 100 % 10] ;           //取壓力的十位顯示
  218.                                 dis_smg[3] = smg_du[weight / 1000 % 10] & 0xdf;           //取壓力的百位顯示
  219.                         }
  220.                 }
  221.                 display();                //數碼管顯示函數
  222.         }
  223. }

  224. /*************定時器0中斷服務程序***************/
  225. void time0_int() interrupt 1
  226. {        
  227.         static uchar value;                         //定時2ms中斷一次
  228.         TH0 = 0xf8;
  229.         TL0 = 0x30;     //2ms
  230.         value++;         
  231.         if(value >= 100)
  232.         {
  233.                 value = 0;         
  234.                 flag_300ms = 1;
  235.         }
  236.         if(flag_lj_en == 1)           //按下按鍵使能
  237.         {
  238.                 key_time ++;
  239.                 if(key_time >= 250) //500ms
  240.                 {
  241.                         key_time = 0;
  242.                         key_500ms = 1; //500ms
  243.                         key_value ++;
  244.                         if(key_value > 3)
  245.                         {
  246.                                 key_value = 10;
  247.                                 flag_lj_3_en = 1; //3次后1.5秒連加大些
  248.                         }                                                
  249.                 }
  250.         }
  251. }
復制代碼

所有資料51hei提供下載:
1.52單片機電子秤數碼管顯示.zip (9.55 MB, 下載次數: 204)


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

使用道具 舉報

沙發
ID:299360 發表于 2018-4-12 11:10 | 只看該作者
這個程序是錯誤的,請不要上傳錯誤的程序誤導初學者。
回復

使用道具 舉報

板凳
ID:452994 發表于 2018-12-28 14:24 | 只看該作者
這個程序感覺是被改過的 ,主函數有問題,斷碼也有問題
回復

使用道具 舉報

地板
ID:194604 發表于 2019-4-7 17:14 | 只看該作者
資料不全  錯誤我已經改過來了
回復

使用道具 舉報

5#
ID:696168 發表于 2020-3-28 17:00 來自觸屏版 | 只看該作者
sqw577277899能分享嗎?
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
7#
ID:1032822 發表于 2022-6-13 11:21 | 只看該作者
sqw577277899 發表于 2019-4-7 17:14
資料不全  錯誤我已經改過來了

可以分享嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表