找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 618|回复: 1
打印 上一主题 下一主题
收起左侧

单片机模拟感应灯程序Proteus仿真 ADC0832采集光敏电阻自动灯光控制

[复制链接]
跳转到指定楼层
#
模拟感应灯仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


用普通电位器来模拟光敏电阻

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. /*********************************************************/
  4. // 宏定义
  5. /*********************************************************/

  6. #define uchar unsigned char                // 以后unsigned char就可以用uchar代替
  7. #define uint  unsigned int                // 以后unsigned int 就可以用uint 代替

  8. /*********************************************************/
  9. // 端口定义
  10. /*********************************************************/

  11. sbit ADC_CS  = P2^5;                                         // ADC0832的CS引脚
  12. sbit ADC_CLK = P2^6;                                         // ADC0832的CLK引脚
  13. sbit ADC_DAT = P2^7;                                         // ADC0832的DI/DO引脚

  14. sbit LED = P2^1;
  15. sbit Induction  = P3^2;                                        // 人体红外检测模块


  16. /*********************************************************/
  17. // ADC0832的时钟脉冲
  18. /*********************************************************/
  19. void WavePlus()
  20. {
  21.         _nop_();
  22.         ADC_CLK = 1;
  23.         _nop_();
  24.         ADC_CLK = 0;
  25. }

  26. /*********************************************************/
  27. // 获取指定通道的A/D转换结果
  28. /*********************************************************/
  29. uchar Get_ADC0832()
  30. {
  31.         uchar i;
  32.         uchar dat1=0;
  33.         uchar dat2=0;
  34.         
  35.         ADC_CLK = 0;                                // 电平初始化
  36.         ADC_DAT = 1;
  37.         _nop_();
  38.         ADC_CS = 0;
  39.         WavePlus();                                        // 起始信号
  40.         ADC_DAT = 1;
  41.         WavePlus();                                        // 通道选择的第一位
  42.         ADC_DAT = 0;      
  43.         WavePlus();                                        // 通道选择的第二位
  44.         ADC_DAT = 1;
  45.         
  46.         for(i=0;i<8;i++)                // 第一次读取
  47.         {
  48.                 dat1<<=1;
  49.                 WavePlus();
  50.                 if(ADC_DAT)
  51.                         dat1=dat1|0x01;
  52.                 else
  53.                         dat1=dat1|0x00;
  54.         }
  55.         
  56.         for(i=0;i<8;i++)                // 第二次读取
  57.         {
  58.                 dat2>>= 1;
  59.                 if(ADC_DAT)
  60.                         dat2=dat2|0x80;
  61.                 else
  62.                         dat2=dat2|0x00;
  63.                 WavePlus();
  64.         }
  65.         
  66.         _nop_();                                                // 结束此次传输
  67.         ADC_DAT = 1;
  68.         ADC_CLK = 1;
  69.         ADC_CS  = 1;   

  70.         if(dat1 == dat2)                        // 返回采集结果
  71.                 return dat1;
  72.         else
  73.                 return 0;
  74. }

  75. /*********************************************************/
  76. // 自动灯光控制
  77. /*********************************************************/
  78. void AutoControl()
  79. {
  80.         uchar ret;
  81.         ret=Get_ADC0832();                // 获取AD采集结果(环境光照强度)
  82.         if(ret <= 29 && Induction == 1)        
  83.         {
  84.                 LED = 0; //点亮LED
  85.         }        
  86.         else
  87.         {
  88.                 LED = 1;
  89.         }               
  90. }

  91. /*********************************************************/
  92. // 主程序
  93. /*********************************************************/
  94. void main()
  95. {
  96.         while(1)
  97.         {
  98.                 AutoControl();
  99.         }
  100. }
复制代码

仿真程序51hei附件下载:
感应灯.zip (128.08 KB, 下载次数: 40)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

楼主
ID:291549 发表于 2024-1-22 20:05 | 只看该作者
感谢这么好的仿真程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表