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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6657|回復: 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黑下載附件…………
復制代碼
0.png

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

評分

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

查看全部評分

回復

使用道具 舉報

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文件

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

使用道具 舉報

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

評分

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

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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是會出現閃爍的現象的。
回復

使用道具 舉報

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

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

使用道具 舉報

ID:249455 發表于 2018-5-28 22:58 | 顯示全部樓層
為什么下載下載下來的是文本文檔
回復

使用道具 舉報

ID:456618 發表于 2018-12-28 16:38 | 顯示全部樓層
飛哥無敵 發表于 2018-5-28 22:58
為什么下載下載下來的是文本文檔

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

使用道具 舉報

ID:456618 發表于 2018-12-28 16:43 | 顯示全部樓層
感謝樓主,讓小白的我可以多多學習
回復

使用道具 舉報

ID:454000 發表于 2018-12-28 17:01 | 顯示全部樓層
辛苦了!再接再厲!

評分

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

查看全部評分

回復

使用道具 舉報

ID:457488 發表于 2018-12-28 17:24 | 顯示全部樓層
不錯,贊一個
回復

使用道具 舉報

ID:356526 發表于 2018-12-28 20:05 | 顯示全部樓層
很不錯,頂一個
回復

使用道具 舉報

ID:311125 發表于 2019-3-25 09:49 | 顯示全部樓層
下載下來,先學習一下!謝謝!
回復

使用道具 舉報

ID:580497 發表于 2019-7-9 10:09 | 顯示全部樓層
大佬,仿真文件打不開
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人在线观看视频 | 欧美精品一区二区三区在线 | 精品国产欧美一区二区 | 久久国产精品一区二区 | 日韩不卡一区二区三区 | 精品一区二区视频 | 四虎影视免费在线 | 亚洲人人舔人人 | 国产亚洲一区在线 | 91国内产香蕉 | 一区二区三区高清在线观看 | 国产高清一区二区 | 特黄视频| 亚洲第一av网站 | 亚洲人在线观看视频 | 日韩成人精品在线观看 | 奇米超碰 | 中文字幕亚洲区 | 久久久亚洲 | 97精品久久 | 99re在线视频观看 | 四虎在线视频 | 人人干人人艹 | 91久久精品 | 精品免费国产视频 | 国产1区2区在线观看 | 国产在线不卡视频 | 人操人人干人 | 午夜影视| 91亚洲一区 | 亚洲91精品| 成人一级视频在线观看 | 国产成人精品久久二区二区91 | 久久久久亚洲精品 | 久免费视频 | 婷婷在线视频 | 国产视频一二三区 | 一区二区三区欧美在线 | 国产精品视频在线观看 | 成人99| 国产精品7777777|