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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)的簡易電子秤換了一個(gè)開發(fā)板就不顯示了,求大神幫忙解決

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 AT88C52RC 于 2019-7-20 11:08 編輯

下面程序是在本論壇下載后修改的,下載到開發(fā)板后都能用,但是換了一個(gè)開發(fā)板之后稱重模塊就不能用了或者說不顯示重量了,下面是顯示和接線。求大神支招該怎么辦?原本顯示重量數(shù)字的地方現(xiàn)在沒有任何顯示。

  1. #include<reg51.h>    //包含單片機(jī)寄存器的頭文件
  2. #include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件
  3. #define GapValue 400

  4. typedef unsigned int u16;
  5. typedef unsigned char u8;
  6. sbit bz= P1^5;

  7. unsigned long HX711_Buffer = 0;
  8. sbit HX711_SCK=P2^1;
  9. sbit HX711_DOUT=P2^0;
  10. void Delay__hx711_us()
  11. {
  12.         _nop_();
  13.         _nop_();
  14. }

  15. long Weight_Shiwu = 0;
  16. unsigned long Weight_Maopi = 0;
  17. unsigned int ge=0,shi=0,bai=0,qian=0;
  18. unsigned char code string[ ]={"Weight:"};          //顯示數(shù)組
  19. //unsigned char code string3[ ]={"error!"};          //顯示數(shù)組
  20. unsigned char code digit[ ]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字

  21. sbit RS=P2^6;    //寄存器選擇位,將RS位定義為P2.0引腳
  22. sbit RW=P2^5;    //讀寫選擇位,將RW位定義為P2.1引腳
  23. sbit E=P2^7;     //使能信號位,將E位定義為P2.2引腳
  24. sbit BF=P0^7;    //忙碌標(biāo)志位,將BF位定義為P0.7引腳
  25. /*****************************************************
  26. 函數(shù)功能:延時(shí)1ms
  27. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒
  28. ***************************************************/
  29. void delay1ms()
  30. {
  31.    unsigned char i,j;        
  32.          for(i=0;i<10;i++)
  33.           for(j=0;j<33;j++)
  34.            ;                 
  35. }
  36. /*****************************************************
  37. 函數(shù)功能:延時(shí)若干毫秒
  38. 入口參數(shù):n
  39. ***************************************************/
  40. void delay(unsigned char n)
  41. {
  42.    unsigned char i;
  43.         for(i=0;i<n;i++)
  44.            delay1ms();
  45. }
  46. /*****************************************************
  47. 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)
  48. 返回值:result。result=1,忙碌;result=0,不忙
  49. ***************************************************/
  50. unsigned char BusyTest(void)
  51.   {
  52.    bit result;
  53.         RS=0;       //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
  54.     RW=1;
  55.     E=1;        //E=1,才允許讀寫
  56.     _nop_();   //空操作
  57.     _nop_();
  58.     _nop_();
  59.     _nop_();   //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間        
  60.    result=BF;  //將忙碌標(biāo)志電平賦給result
  61.         E=0;
  62.     return result;
  63.   }
  64. /*****************************************************
  65. 函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊
  66. 入口參數(shù):dictate
  67. ***************************************************/
  68. void WriteInstruction (unsigned char dictate)
  69. {   
  70.     while(BusyTest()==1); //如果忙就等待
  71.          RS=0;                  //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫入指令
  72.          RW=0;   
  73.          E=0;                   //E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,
  74.                              // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  75.          _nop_();
  76.          _nop_();             //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  77.          P0=dictate;            //將數(shù)據(jù)送入P0口,即寫入指令或地址
  78.          _nop_();
  79.          _nop_();
  80.          _nop_();
  81.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  82.          E=1;                   //E置高電平
  83.          _nop_();
  84.          _nop_();
  85.          _nop_();
  86.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  87.           E=0;                  //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
  88. }
  89. /*****************************************************
  90. 函數(shù)功能:指定字符顯示的實(shí)際地址
  91. 入口參數(shù):x
  92. ***************************************************/
  93. void WriteAddress(unsigned char x)
  94. {
  95.      WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"
  96. }
  97. /*****************************************************
  98. 函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊
  99. 入口參數(shù):y(為字符常量)
  100. ***************************************************/
  101. void WriteData(unsigned char y)
  102. {
  103.     while(BusyTest()==1);  
  104.           RS=1;           //RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù)
  105.           RW=0;
  106.           E=0;            //E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,
  107.                        // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  108.           P0=y;           //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊
  109.           _nop_();
  110.           _nop_();
  111.            _nop_();
  112.      _nop_();       //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  113.           E=1;          //E置高電平
  114.           _nop_();
  115.           _nop_();
  116.           _nop_();
  117.          _nop_();        //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  118.          E=0;            //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
  119. }
  120. /*****************************************************
  121. 函數(shù)功能:對LCD的顯示模式進(jìn)行初始化設(shè)置
  122. ***************************************************/
  123. void LcdInitiate(void)
  124. {
  125.    delay(15);             //延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長的反應(yīng)時(shí)間
  126.    WriteInstruction(0x38);  //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口
  127.         delay(5);   //延時(shí)5ms 
  128.         WriteInstruction(0x38);
  129.         delay(5);
  130.         WriteInstruction(0x38);
  131.         delay(5);
  132.         WriteInstruction(0x0c);  //顯示模式設(shè)置:顯示開,有光標(biāo),光標(biāo)閃爍
  133.         delay(5);
  134.         WriteInstruction(0x06);  //顯示模式設(shè)置:光標(biāo)右移,字符不移
  135.         delay(5);
  136.         WriteInstruction(0x01);  //清屏幕指令,將以前的顯示內(nèi)容清除
  137.         delay(5);
  138. }

  139. unsigned long HX711_Read(void)        //增益128
  140. {
  141.         unsigned long count;
  142.         unsigned char i;
  143.           HX711_DOUT=1;
  144.                 Delay__hx711_us();
  145.           HX711_SCK=0;
  146.           count=0;
  147.           while(HX711_DOUT);
  148.           for(i=0;i<24;i++)                                
  149.         {
  150.                   HX711_SCK=1;
  151.                   count=count<<1;
  152.                         HX711_SCK=0;
  153.                   if(HX711_DOUT)
  154.                         count++;
  155.         }
  156.          HX711_SCK=1;
  157.     count=count^0x800000;//第25個(gè)脈沖下降沿來時(shí),轉(zhuǎn)換數(shù)據(jù)
  158.         Delay__hx711_us();
  159.     HX711_SCK=0;
  160.    return(count);        
  161. }

  162. //****************************************************
  163. //獲取毛皮重量
  164. //****************************************************
  165. void Get_Maopi()
  166. {
  167.         Weight_Maopi = HX711_Read();        
  168. }

  169. //****************************************************
  170. //稱重
  171. //****************************************************
  172. void Get_Weight()
  173. {
  174.     unsigned char i;
  175.         Weight_Shiwu = HX711_Read();
  176.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //獲取凈重
  177.         if(Weight_Shiwu > 0)                        
  178.         {        
  179.         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);         //計(jì)算實(shí)物的實(shí)際重量        
  180.    ge=Weight_Shiwu%10;
  181.    WriteAddress(0x4c);  
  182.    WriteData(digit[ge]);
  183.    shi=Weight_Shiwu/10%10;
  184.    WriteAddress(0x4b);  
  185.    WriteData(digit[shi]);
  186.    bai=Weight_Shiwu/100%10;
  187.    WriteAddress(0x4a);  
  188.    WriteData(digit[bai]);
  189.    qian=Weight_Shiwu/1000;
  190.    WriteAddress(0x49);  
  191.    WriteData(digit[qian]);

  192.         if(Weight_Shiwu > 5000)
  193.         {
  194.           while(1)
  195.           {
  196.             bz=~bz;
  197.                 delay(1);
  198.           }        
  199.         }
  200.           else
  201.           {
  202.             ;
  203.           }
  204.         }        
  205.         else
  206.         {
  207.       ;
  208.         }        
  209. }

  210. void main(void)            //主函數(shù)
  211. {
  212.     unsigned char i;
  213.         LcdInitiate();         //調(diào)用LCD初始化函數(shù)
  214.         WriteAddress(0x00);          //寫地址,從第1行第1列開始顯示        
  215.          i=0;              //從字符數(shù)組的第1個(gè)元素開始顯示
  216.          while(string[i]!='\0')   //只要沒有顯示到字符串的結(jié)束標(biāo)志'\0',就繼續(xù)
  217.          {
  218.                  WriteData(string[i]); //將第i個(gè)字符數(shù)組元素寫入LCD
  219.                  i++;                 //指向下一個(gè)數(shù)組元素
  220.          }
  221.                  WriteAddress(0x4D);     //寫地址,將M顯示在第2行第16列
  222.             WriteData('g');        

  223.         Get_Maopi();                                //稱毛皮重量

  224.                 while(1)
  225.                 {
  226.                   EA=0;
  227.                   Get_Weight();
  228.                   EA=1;
  229.                 }                       
  230. }
復(fù)制代碼


/*--------------------------------------------------------------------------
INTRINS.H

Intrinsic functions for C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __INTRINS_H__
#define __INTRINS_H__

extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);

#endif




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

使用道具 舉報(bào)

沙發(fā)
ID:524818 發(fā)表于 2019-7-19 21:21 | 只看該作者
兩個(gè)開發(fā)板肯定線路上有區(qū)別,仔細(xì)比較一下應(yīng)該能看出來
回復(fù)

使用道具 舉報(bào)

板凳
ID:96682 發(fā)表于 2019-7-19 23:04 | 只看該作者
移植程序到別的 51 單片機(jī)或開發(fā)板上可能需要修改原代碼
回復(fù)

使用道具 舉報(bào)

地板
ID:412580 發(fā)表于 2019-7-20 00:22 | 只看該作者
不是說換了開發(fā)板就不能用嗎 有沒有考慮過開發(fā)板的問題
回復(fù)

使用道具 舉報(bào)

5#
ID:452821 發(fā)表于 2019-7-20 07:17 | 只看該作者
附:我先問一下,這個(gè)稱重傳感器不初始化一下就是能用的嗎?
既然你之前的完全能用只是換了一塊開發(fā)板就不行了,但是這塊開發(fā)板也能顯示漢字什么的都是正常的,說明這塊開發(fā)板本身是壞的或者硬件連接大不一樣的可能性就很小了。所以我比較傾向于你可能是線接錯(cuò)了,我掃了眼程序沒仔細(xì)看,發(fā)現(xiàn)了如while(HX711_DOUT);這樣的語句,這種寫法就會導(dǎo)致如果你的HX711_DOUT的值不正確你的程序就會一直卡在這里,自然也就沒有后面的顯示重量的部分。


回復(fù)

使用道具 舉報(bào)

6#
ID:465315 發(fā)表于 2019-7-20 08:22 | 只看該作者
應(yīng)該是跳線帽接的有問題
回復(fù)

使用道具 舉報(bào)

7#
ID:586945 發(fā)表于 2019-7-20 08:50 | 只看該作者
兩塊開發(fā)板電路是一模一樣的?看看電路原理圖接線的區(qū)別
回復(fù)

使用道具 舉報(bào)

8#
ID:587195 發(fā)表于 2019-7-20 08:51 | 只看該作者
檢查另一個(gè)開發(fā)板,晶振、芯片是不是一樣
回復(fù)

使用道具 舉報(bào)

9#
ID:457495 發(fā)表于 2019-7-20 09:39 | 只看該作者
你看看開發(fā)板上的單片機(jī)是不是一樣的,60S2是有自帶ADC轉(zhuǎn)換模塊的,89c52是沒有的,你看看有沒有用到ADC轉(zhuǎn)換,還是你們自己用的ADC芯片,再看看線路,拿一字螺絲刀改一下灰度值。
回復(fù)

使用道具 舉報(bào)

10#
ID:285069 發(fā)表于 2019-7-20 10:44 | 只看該作者
檢查一下HX711的DATA_OUT接到開發(fā)板(P2.0),板上有接"上拉電阻"嗎?
HX711的DOUT是"開漏輸出"的;沒上拉電組,是沒訊號的.
回復(fù)

使用道具 舉報(bào)

11#
ID:584339 發(fā)表于 2019-7-20 11:00 | 只看該作者
尹子歸來 發(fā)表于 2019-7-20 07:17
附:我先問一下,這個(gè)稱重傳感器不初始化一下就是能用的嗎?
既然你之前的完全能用只是換了一塊開發(fā)板就不 ...

那么需要怎樣修改呢?
回復(fù)

使用道具 舉報(bào)

12#
ID:584339 發(fā)表于 2019-7-20 11:15 | 只看該作者
我么得感情 發(fā)表于 2019-7-20 09:39
你看看開發(fā)板上的單片機(jī)是不是一樣的,60S2是有自帶ADC轉(zhuǎn)換模塊的,89c52是沒有的,你看看有沒有用到ADC轉(zhuǎn) ...

單片機(jī)用的是同一塊,開發(fā)板不同之處也修改了的,就是不知道為什么顯示重量哪里直接沒有了
回復(fù)

使用道具 舉報(bào)

13#
ID:584339 發(fā)表于 2019-7-20 11:20 | 只看該作者
277563114 發(fā)表于 2019-7-20 00:22
不是說換了開發(fā)板就不能用嗎 有沒有考慮過開發(fā)板的問題

考慮過了,并且把開發(fā)板上不同的參數(shù)都在源程序上修改了,只不過可能改的不完全
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜在线视频 | 99免费在线视频 | 国产高潮好爽受不了了夜色 | 精品国产欧美 | 日一日操一操 | 久久精品国产免费 | 久久小视频 | 亚洲国产精品久久久久久 | 久久亚洲视频网 | 狠狠爱免费视频 | 在线播放中文字幕 | 日韩高清国产一区在线 | 亚洲日本一区二区 | 色偷偷人人澡人人爽人人模 | 天天拍天天色 | 国产乱码精品一区二区三区五月婷 | 久久久久九九九九 | 91精品国模一区二区三区 | 欧美一a | 国产视频久久久 | 81精品国产乱码久久久久久 | 国产精品久久久久久久午夜 | 青青草视频免费观看 | 久草视频观看 | 中文字字幕一区二区三区四区五区 | 久久久久久亚洲精品 | 久久中文字幕在线 | 国产一区二区免费 | 亚洲乱码国产乱码精品精98午夜 | www.干| 自拍第1页 | 国产精品久久久久av | 天天操网 | 中文字幕欧美日韩一区 | 美女视频一区二区三区 | 久久久精品国产 | 亚洲传媒在线 | 一区二区三区国产精品 | h片在线看 | 欧美一区二区在线 | www久久国产 |