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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機TSL2561光強檢測程序 12864液晶顯示

  [復制鏈接]
跳轉到指定樓層
樓主
51單片機12864液晶tsl2561光強傳感器,調試成功

單片機源程序如下:
  1. #include
  2. #include
  3. #include

  4. /*********************************************
  5. 下均為IIC和光強所需程序

  6. **********************************************/
  7. #include
  8. //設備讀寫地址



  9. ////命令控制寄存器
  10. #define CONTROL 0x80
  11. #define TIMING        0x81
  12. #define        DATA0LOW 0x8C
  13. #define        DATA0HIGH 0x8D
  14. #define        DATA1LOW  0x8E
  15. #define        DATA1HIGH 0x8F

  16. //TSL2561地址


  17. typedef signed   int  sint;
  18. typedef unsigned long u32;

  19. uint DataLow0,DataHigh0,DataLow1,DataHigh1;
  20. float ratioc;
  21. sint Lux=0;
  22. uchar command,temp;
  23. uint Channel1,Channel0;



  24. void i2c_delay()                //10us
  25. {
  26.         unsigned char a,b;
  27.         for(b=1;b>0;b--)
  28.                 for(a=2;a>0;a--);

  29. }







  30. //初始化延時函數
  31. void init_delay(void)
  32. {
  33.     static time =10000;
  34.         while(time--);
  35. }

  36.   //初始化函數

  37. void i2c_init(void)
  38. {
  39.         i2c_scl = 1;//釋放時鐘線
  40.         init_delay();
  41.         i2c_sda = 1;//釋放數據線
  42.         init_delay();
  43. }


  44. //起始信號
  45. void i2c_start(void)
  46. {
  47.         i2c_sda=1;
  48.         i2c_delay();
  49.         i2c_scl=1;
  50.         i2c_delay();
  51.         i2c_sda=0;
  52.         i2c_delay();
  53.         i2c_scl=0;
  54.         i2c_delay();
  55. }
  56. //停止信號
  57. void i2c_stop(void)
  58. {
  59.           i2c_sda = 0;
  60.         i2c_delay();
  61.           i2c_scl = 1;
  62.          i2c_delay();
  63.           i2c_sda = 1;
  64.         i2c_delay();
  65. }



  66. uchar write_byte(unsigned char dat)
  67. {
  68.         unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us。               
  69.         for(a=0;a<8;a++)//要發送8位,從最高位開始
  70.         {
  71.                 i2c_sda=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
  72.                 dat=dat<<1;
  73.                 i2c_delay();
  74.                 i2c_scl=1;
  75.                 i2c_delay();//建立時間>4.7us
  76.                 i2c_scl=0;
  77.                 i2c_delay();//時間大于4us               
  78.         }
  79.         i2c_sda=1;
  80.         i2c_delay();
  81.         i2c_scl=1;
  82.         while(i2c_sda)//等待應答,也就是等待從設備把SDA拉低
  83.         {
  84.                 b++;
  85.                 if(b>200)         //如果超過2000us沒有應答發送失敗,或者為非應答,表示接收結束
  86.                 {
  87.                         i2c_scl=0;
  88.                         i2c_delay();
  89.                         return 0;
  90.                 }
  91.         }
  92.         i2c_scl=0;
  93.         i2c_delay();
  94.          return 1;               
  95. }




  96. unsigned char read_byte()
  97. {
  98.         unsigned char a=0,dat=0;
  99.         i2c_sda=1;                        //起始和發送一個字節之后SCL都是0
  100.         i2c_delay();
  101.         for(a=0;a<8;a++)//接收8個字節
  102.         {
  103.                 i2c_scl=1;
  104.                 i2c_delay();
  105.                 dat<<=1;
  106.                 dat|=i2c_sda;
  107.                 i2c_delay();
  108.                 i2c_scl=0;
  109.                 i2c_delay();
  110.         }
  111.         return dat;               
  112. }





  113. //TSL2561寫函數
  114. //-------------------------------------------------
  115. void TSL2561_Write(uchar command,uchar date)
  116. {
  117.         i2c_start();
  118.         write_byte(SLAVE_ADDR_WR);
  119.         //respons();
  120.         write_byte(command);
  121.         //respons();
  122.         write_byte(date);
  123.         //respons();
  124.         i2c_stop();
  125. }
  126. //讀函數
  127. //-------------------------------------------------
  128. uchar TSL2561_Read(uchar command)
  129. {
  130.         uchar date;
  131.         i2c_start();
  132.         write_byte(SLAVE_ADDR_WR);
  133.           //respons();
  134.         write_byte(command);
  135.         //respons();
  136.         i2c_start();
  137.         write_byte(SLAVE_ADDR_WR+1);
  138.         //respons();
  139.         date=read_byte();
  140.         i2c_stop();
  141.         return date;
  142. }

  143. //------------------------------------------
  144. //讀取光照強度
  145. sint Read_Light(void)
  146. {
  147.    
  148.         DataLow0 = TSL2561_Read(DATA0LOW);
  149.         DataHigh0 = TSL2561_Read(DATA0HIGH);
  150.         Channel0 = 256*DataHigh0 + DataLow0;
  151.         
  152.         //------------------------------
  153.         DataLow1 = TSL2561_Read(DATA1LOW);
  154.         DataHigh1 = TSL2561_Read(DATA1HIGH);
  155.         Channel1 = 256*DataHigh1 + DataLow1;
  156.         
  157.         //---------------------------------
  158.         //Calculating Lux         for tmb封裝
  159.         ratioc  =         Channel1/Channel0;
  160.         if (0 < ratioc <= 0.50)  Lux = 0.0304 * Channel0 - 0.062 * Channel0 *pow((Channel1/Channel0) ,1.4 );
  161.     if (0.50 < ratioc <= 0.61) Lux = 0.0224 *Channel0 - 0.031 * Channel1;
  162.     if (0.61 < ratioc <= 0.80 )Lux = 0.0128 * Channel0 - 0.0153 * Channel1;
  163.     if (0.80 < ratioc <= 1.30) Lux = 0.00146 * Channel0 - 0.00112 * Channel1;
  164.     if (ratioc > 1.30) Lux = 0;
  165.         return Lux;
  166. }


  167. //直接調用
  168. void tsl2561_Init(void)
  169. {
  170.         i2c_init();                                        //i2c初始化
  171.         TSL2561_Write(CONTROL,0x03);        //啟動原件
  172.         init_delay();                                                //防止數據出錯
  173.     TSL2561_Write(TIMING,0x02);                //積分時間
  174.         //TSL2561_Write(0xC6,0x30);                //中斷           
  175. }







  176. /********************************
  177. 主函數main
  178. **********************************/
  179. void main()
  180. {
  181.         uchar i=0;
  182.         uchar code DIS1[]={"光強1:"},code DIS2[]={"光強R-L:"},code DIS3[]={"通道0:"},code DIS4[]={"通道1:"};
  183.         uint ge,shi,bai,qian,wan,W1,Q1,B1,S1,G1,W0,Q0,B0,S0,G0;
  184.         sint CH1,RL,CH0;                                   //16位

  185.         tsl2561_Init();
  186.         LcdInit();
  187.         LcdWriteCom(0x80);
  188.         while(DIS1[i]!='')
  189.             LcdWriteData(DIS1[i++]);
  190.         i=0;

  191.         LcdWriteCom(0x90);
  192.         while(DIS1[i]!='')
  193.             LcdWriteData(DIS2[i++]);
  194.         i=0;

  195.         LcdWriteCom(0x88);
  196.         while(DIS1[i]!='')
  197.             LcdWriteData(DIS3[i++]);
  198.         i=0;

  199.         LcdWriteCom(0x98);
  200.         while(DIS1[i]!='')
  201.             LcdWriteData(DIS4[i++]);
  202.         
  203.         while(1)
  204.         {
  205.                

  206.                 RL=Read_Light();         //讀取光強        
  207.                
  208.                 CH0=Channel0;         
  209.                 CH1=Channel1;

  210.                 LcdWriteCom(0x90);                 
  211.                 wan=RL/10000;
  212.                 qian=RL%10000/1000;
  213.                 bai=RL%10000%1000/100;
  214.                 shi=RL%10000%1000%100/10;
  215.                 ge=RL%10000%1000%100%10;               
  216.                 LcdWriteData(0x30+wan);
  217.                 LcdWriteData(0x30+qian);
  218.                 LcdWriteData(0x30+bai);
  219. ……………………

  220. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
光強程序12864改善2成功無應答程序.zip (54.32 KB, 下載次數: 160)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-12-17 19:09 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

板凳
ID:450241 發表于 2018-12-19 21:01 來自手機 | 只看該作者
請問一下,代碼里的slave_addr_wr是0
回復

使用道具 舉報

地板
ID:450241 發表于 2018-12-19 21:03 來自手機 | 只看該作者
請問一下代碼里的slave_addr_wr是0x72么?我照這樣測試后,發現液晶一直顯示00022,沒有變化(我自己換了1602的顯示)
回復

使用道具 舉報

5#
ID:446267 發表于 2018-12-24 13:08 | 只看該作者
Cedar_924 發表于 2018-12-19 21:03
請問一下代碼里的slave_addr_wr是0x72么?我照這樣測試后,發現液晶一直顯示00022,沒有變化(我自己換了1602 ...

wr是0x72,用的是12864液晶,接線自己參考12864中文資料,你說的這個00022是有應答程序respons()函數的版本,我試過等待應答程序加進去就是00022,所以不行
回復

使用道具 舉報

6#
ID:446267 發表于 2018-12-24 13:18 | 只看該作者
Cedar_924 發表于 2018-12-19 21:03
請問一下代碼里的slave_addr_wr是0x72么?我照這樣測試后,發現液晶一直顯示00022,沒有變化(我自己換了1602 ...

我這帖子下面有調試好的51單片機液晶12864的tsl2561程序 壓縮包
回復

使用道具 舉報

7#
ID:453467 發表于 2018-12-24 14:58 | 只看該作者
無應答為什么要把時鐘線寫0?

                if(b>200)         //如果超過2000us沒有應答發送失敗,或者為非應答,表示接收結束
                {
                        i2c_scl=0;
                        i2c_delay();
                        return 0;
                }
回復

使用道具 舉報

8#
ID:446267 發表于 2018-12-24 18:05 | 只看該作者
iseesx 發表于 2018-12-24 14:58
無應答為什么要把時鐘線寫0?

                if(b>200)         //如果超過2000us沒有應答發送失敗, ...

強行結束上一次數據的接收,
回復

使用道具 舉報

9#
ID:446267 發表于 2018-12-24 18:06 | 只看該作者
iseesx 發表于 2018-12-24 14:58
無應答為什么要把時鐘線寫0?

                if(b>200)         //如果超過2000us沒有應答發送失敗, ...

因為正常情況下接收一次是不會超過2000us的,
回復

使用道具 舉報

10#
ID:500275 發表于 2019-4-15 13:53 | 只看該作者
response函數為什么要注釋掉,沒有response可以嗎?
回復

使用道具 舉報

11#
ID:446267 發表于 2019-4-18 19:47 | 只看該作者
ghost1150 發表于 2019-4-15 13:53
response函數為什么要注釋掉,沒有response可以嗎?

我這個用的51注釋了可以正常運行,其他的單片機就不知道了
回復

使用道具 舉報

12#
ID:552184 發表于 2019-6-2 20:26 | 只看該作者
這個有和TSL2561的連接的電路圖嗎
回復

使用道具 舉報

13#
ID:107923 發表于 2019-6-17 17:47 | 只看該作者

這個有和TSL2561的連接的電路圖嗎
回復

使用道具 舉報

14#
ID:640113 發表于 2019-11-12 17:10 | 只看該作者
TSL2561的中斷引腳接在哪里
回復

使用道具 舉報

15#
ID:640113 發表于 2019-11-12 17:11 | 只看該作者
TSL2561的中斷引腳接在哪里
回復

使用道具 舉報

16#
ID:662064 發表于 2020-5-5 21:51 | 只看該作者
怎么處理光敏電阻傳遞的信號啊
回復

使用道具 舉報

17#
ID:843718 發表于 2021-4-12 11:08 | 只看該作者
樓主,你顯示的光照強度和照度計相似嗎?為什么我的比照度計顯示的要低很多
回復

使用道具 舉報

18#
ID:147329 發表于 2022-4-3 19:31 | 只看該作者
大神~膜拜,下載好好學習下,看評論區中顯示有很多經驗性的處理代碼,比如時鐘線拉低~~~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲综合av | 国产在线播放一区二区三区 | 国产高清视频在线观看 | 国产乱性 | 黄色大片观看 | 北条麻妃一区二区三区在线视频 | 日本a级大片 | 久久久一区二区三区四区 | 在线日韩 | 成人欧美一区二区三区在线播放 | 欧美1区2区 | 午夜私人影院 | 日韩欧美在线不卡 | 91欧美精品成人综合在线观看 | av看片| 成人欧美一区二区三区 | 亚洲一区视频在线 | 久久精品视频一区二区 | 久久久久久看片 | 精品久久久久香蕉网 | www.中文字幕.com| 久久免费大片 | 在线免费中文字幕 | 久久国产视频网 | 亚洲美女在线视频 | 亚洲欧美激情精品一区二区 | 国内精品成人 | 国产欧美一区二区在线观看 | 天天干天天插 | 国产婷婷综合 | 精品自拍视频 | 国产精品色哟哟网站 | 国产精品一区二区无线 | 成年人在线观看 | 91精品国产色综合久久 | 成人一级黄色毛片 | 99re国产视频 | 91精品国产乱码久久久久久久久 | 国产免费国产 | 欧美影院久久 | 欧美精品一区二区三区一线天视频 |