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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

光強控制LED燈亮度_單片機源程序&仿真工程

  [復制鏈接]
跳轉到指定樓層
樓主
ID:163705 發表于 2018-2-28 08:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
光強控制LED燈亮度_程序&仿真
可配合人體傳感器判斷室內是否有人并根據環境光自動調整LED燈亮度

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

單片機源程序如下:

  1. #include<reg51.h>

  2. #define  WRITEADDR 0x90
  3. #define  READADDR  0x91

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

  6. sbit HR=P3^7;

  7. sbit SCL=P2^1;
  8. sbit SDA=P2^0;

  9. void Delay10us();
  10. void I2cStart();
  11. void I2cStop();
  12. unsigned char I2cSendByte(unsigned char dat);
  13. unsigned char I2cReadByte();

  14. void Pcf8591SendByte(unsigned char channel);
  15. unsigned char Pcf8591ReadByte();
  16. void Pcf8591DaConversion(unsigned char value);

  17. void main()
  18. {
  19.         unsigned long int adNum[5];

  20.         while(1)
  21.         {                       
  22.                 if(HR==1)
  23.         {
  24.             Pcf8591SendByte(0);        //選擇AD轉換通道   
  25.                     adNum[0]=        Pcf8591ReadByte()*2;    //獲取AD值
  26.    
  27.                     //--DA輸出--//
  28.                     adNum[4]=adNum[0];
  29.                     Pcf8591DaConversion(adNum[4]/2); //DAC          數模轉換
  30.         }
  31.         else
  32.         {
  33.                     Pcf8591DaConversion(0); //DAC        0  數模轉換
  34.         }
  35.         }
  36.                                  
  37. }

  38. void Pcf8591SendByte(unsigned char channel)
  39. {       
  40.         I2cStart();
  41.         I2cSendByte(WRITEADDR);//發送寫器件地址
  42.         I2cSendByte(0x40|channel);//發送控制寄存器
  43.         I2cStop();
  44. }

  45. unsigned char Pcf8591ReadByte()
  46. {
  47.         unsigned char dat;
  48.         I2cStart();
  49.         I2cSendByte(READADDR);//發送讀器件地址
  50.         dat=I2cReadByte();//讀取數據
  51.         I2cStop();          //結束總線
  52.   return dat;
  53. }

  54. void Pcf8591DaConversion(unsigned char value)
  55. {
  56.         I2cStart();
  57.         I2cSendByte(WRITEADDR);//發送寫器件地址
  58.         I2cSendByte(0x40);//開啟DA寫到控制寄存器
  59.         I2cSendByte(value);//發送轉換數值
  60.         I2cStop();       
  61. }

  62. /*******************************************************************************
  63. * 函數名         : Delay1us()
  64. * 函數功能                   : 延時
  65. * 輸入           : 無
  66. * 輸出                  : 無
  67. *******************************************************************************/

  68. void Delay10us()
  69. {
  70.         unsigned char a,b;
  71.         for(b=1;b>0;b--)
  72.                 for(a=2;a>0;a--);

  73. }
  74. /*******************************************************************************
  75. * 函數名         : I2cStart()
  76. * 函數功能                   : 起始信號:在SCL時鐘信號在高電平期間SDA信號產生一個下降沿
  77. * 輸入           : 無
  78. * 輸出                  : 無
  79. * 備注           : 起始之后SDA和SCL都為0
  80. *******************************************************************************/

  81. void I2cStart()
  82. {
  83.         SDA=1;
  84.         Delay10us();
  85.         SCL=1;
  86.         Delay10us();//建立時間是SDA保持時間>4.7us
  87.         SDA=0;
  88.         Delay10us();//保持時間是>4us
  89.         SCL=0;                       
  90.         Delay10us();               
  91. }
  92. /*******************************************************************************
  93. * 函數名         : I2cStop()
  94. * 函數功能                   : 終止信號:在SCL時鐘信號高電平期間SDA信號產生一個上升沿
  95. * 輸入           : 無
  96. * 輸出                  : 無
  97. * 備注           : 結束之后保持SDA和SCL都為1;表示總線空閑
  98. *******************************************************************************/

  99. void I2cStop()
  100. {
  101.         SDA=0;
  102.         Delay10us();
  103.         SCL=1;
  104.         Delay10us();//建立時間大于4.7us
  105.         SDA=1;
  106.         Delay10us();               
  107. }
  108. /*******************************************************************************
  109. * 函數名         : I2cSendByte(unsigned char num)
  110. * 函數功能                   : 通過I2C發送一個字節。在SCL時鐘信號高電平期間,保持發送信號SDA保持穩定
  111. * 輸入           : num
  112. * 輸出                  : 0或1。發送成功返回1,發送失敗返回0
  113. * 備注           : 發送完一個字節SCL=0
  114. *******************************************************************************/

  115. unsigned char I2cSendByte(unsigned char dat)
  116. {
  117.         unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us。               
  118.         for(a=0;a<8;a++)//要發送8位,從最高位開始
  119.         {
  120.                 SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
  121.                 dat=dat<<1;
  122.                 Delay10us();
  123.                 SCL=1;
  124.                 Delay10us();//建立時間>4.7us
  125.                 SCL=0;
  126.                 Delay10us();//時間大于4us               
  127.         }
  128.         SDA=1;
  129.         Delay10us();
  130.         SCL=1;
  131.         while(SDA)//等待應答,也就是等待從設備把SDA拉低
  132.         {
  133.                 b++;
  134.                 if(b>200)         //如果超過200us沒有應答發送失敗,或者為非應答,表示接收結束
  135.                 {
  136.                         SCL=0;
  137.                         Delay10us();
  138.                         return 0;
  139.                 }
  140.         }
  141.         SCL=0;
  142.         Delay10us();
  143.         return 1;               
  144. }
  145. /*******************************************************************************
  146. * 函數名         : I2cReadByte()
  147. * 函數功能                   : 使用I2c讀取一個字節
  148. * 輸入           : 無
  149. * 輸出                  : dat
  150. * 備注           : 接收完一個字節SCL=0
  151. ……………………

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

所有資料51hei提供下載:
光強控制LED燈亮度_程序&amp;仿真.zip (423.37 KB, 下載次數: 194)



評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:288202 發表于 2018-3-22 15:05 | 只看該作者
為什么我下載下來的東西打不開的?!浪費我一個又一個的黑幣
回復

使用道具 舉報

板凳
ID:1 發表于 2018-3-22 15:12 | 只看該作者
小白帆 發表于 2018-3-22 14:05
為什么我下載了卻打不開呢?浪費我的黑幣

因為這個文件名里面有特殊字符,你下載后要改名才能打開 改為.zip文件
回復

使用道具 舉報

地板
ID:288202 發表于 2018-3-22 15:20 | 只看該作者
admin 發表于 2018-3-22 15:12
因為這個文件名里面有特殊字符,你下載后要改名才能打開 改為.zip文件

非常感謝您的解答,您的方法可行,開心
回復

使用道具 舉報

5#
ID:288202 發表于 2018-3-22 16:29 | 只看該作者
謝謝樓主的資料,對小白我來說很有用,這段時間一直找這樣的資料。
但是我之前參考這個鏈接:
http://www.zg4o1577.cn/bbs/dpj-80134-1.html
為實現通過按鍵的方式控制LED的亮度,但是這個和我想要的效果有誤差,就是在控制LED亮度的時候,它會出現閃爍的現象,正常情況是不能出現閃爍的,然而我想了很久都沒有解決,不知能否請樓主幫忙解決?謝謝!

評分

參與人數 1黑幣 +40 收起 理由
admin + 40

查看全部評分

回復

使用道具 舉報

6#
ID:288202 發表于 2018-3-22 16:51 | 只看該作者
應該是這個鏈接:http://blog.163.com/asm_c/blog/static/2482031132012716860918/
之前那個鏈接我的測試中是存在問題的,也問過那個的樓主
回復

使用道具 舉報

7#
ID:163705 發表于 2018-3-23 10:00 | 只看該作者
小白帆 發表于 2018-3-22 16:29
謝謝樓主的資料,對小白我來說很有用,這段時間一直找這樣的資料。
但是我之前參考這個鏈接:
http://www ...

DAC輸出控制LED亮度在仿真中不會有閃爍現象,如果是PWM調光,在仿真中運行會閃爍是正常現象,只要PWM頻率夠高,實物運行不會閃爍
回復

使用道具 舉報

8#
ID:163705 發表于 2018-3-23 10:01 | 只看該作者
小白帆 發表于 2018-3-22 16:29
謝謝樓主的資料,對小白我來說很有用,這段時間一直找這樣的資料。
但是我之前參考這個鏈接:
http://www ...

PWM調光要想在仿真中看起來不閃爍可以加濾波電容
回復

使用道具 舉報

9#
ID:288202 發表于 2018-3-26 15:54 | 只看該作者
854100995 發表于 2018-3-23 10:01
PWM調光要想在仿真中看起來不閃爍可以加濾波電容

鏈接:http://blog.163.com/asm_c/blog/static/2482031132012716860918/
下的C6電容是電解電容,和D1并聯,不就相當于起到濾波的作用嗎?但是在數碼管的值未達到一定值時,D1是會出現閃爍的現象的。
回復

使用道具 舉報

10#
ID:288202 發表于 2018-3-26 15:56 | 只看該作者
854100995 發表于 2018-3-23 10:00
DAC輸出控制LED亮度在仿真中不會有閃爍現象,如果是PWM調光,在仿真中運行會閃爍是正常現象,只要PWM頻率 ...

pwm調光在頻率不夠高時,實物運行也不會閃爍嗎?(抱歉,因為最近都不在學校,身邊沒有實物,無法測試)
回復

使用道具 舉報

11#
ID:249455 發表于 2018-5-28 22:58 | 只看該作者
為什么下載下載下來的是文本文檔
回復

使用道具 舉報

12#
ID:456618 發表于 2018-12-28 16:38 | 只看該作者
飛哥無敵 發表于 2018-5-28 22:58
為什么下載下載下來的是文本文檔

把文件名后綴加一個.zip
回復

使用道具 舉報

13#
ID:456618 發表于 2018-12-28 16:43 | 只看該作者
感謝樓主,讓小白的我可以多多學習
回復

使用道具 舉報

14#
ID:454000 發表于 2018-12-28 17:01 | 只看該作者
辛苦了!再接再厲!

評分

參與人數 2黑幣 +50 收起 理由
找人PK + 15
yoxi + 35

查看全部評分

回復

使用道具 舉報

15#
ID:457488 發表于 2018-12-28 17:24 | 只看該作者
不錯,贊一個
回復

使用道具 舉報

16#
ID:356526 發表于 2018-12-28 20:05 | 只看該作者
很不錯,頂一個
回復

使用道具 舉報

17#
ID:311125 發表于 2019-3-25 09:49 | 只看該作者
下載下來,先學習一下!謝謝!
回復

使用道具 舉報

18#
ID:580497 發表于 2019-7-9 10:09 | 只看該作者
大佬,仿真文件打不開
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品久久久久久久 | 成人免费视频 | 成人av播放 | 中文字幕一区二区三区日韩精品 | 日日精品 | 久久精品99国产精品日本 | 国产一区二区三区四区 | 欧美综合久久 | 中文字幕人成乱码在线观看 | 九九热在线视频 | 欧美色欧美亚洲另类七区 | 国产三级在线观看播放 | 中文字幕亚洲一区二区三区 | www.中文字幕av | 国产一级在线 | 一级在线毛片 | 亚洲精品第一国产综合野 | 亚洲欧洲一区 | 一级欧美| 日韩在线一区二区三区 | 激情六月天 | 中文字幕一区二区视频 | 中文字幕av一区二区三区 | 精品视频www | 日日操夜夜操天天操 | 国产一区二区毛片 | 日韩二三区 | 天天草天天爱 | 日韩三区在线观看 | 久久国产成人午夜av影院武则天 | 亚洲成人一区 | 激情91| 欧美在线a| 91精品国产91久久综合桃花 | 国产真实精品久久二三区 | 国产激情免费视频 | 久久久久久久一区二区 | 老司机精品福利视频 | 999久久| 一区二区三区亚洲 | 天堂网中文字幕在线观看 |