找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1388|回复: 2
收起左侧

基于51单片机的声光控延时灯程序Proteus仿真图

[复制链接]
ID:818537 发表于 2024-6-30 06:11 | 显示全部楼层 |阅读模式
基于51的声光控延时灯
仿真图protues 8.0程序编译器:keil 4/keil 5程序 仿真原理图 单片机AT89S521)光控功能,?天光线较强,有声音灯不亮;光线较暗,有声音时灯点亮。2)声控功能:傍晚光线变暗后,?动进?待机状态,有声音时,通电亮灯,延时 30 秒后?动断电;无声音时不点亮;3)灯在点亮时如有新的声音,灯应该重新点亮 30 秒。4)用 PROTEUS 或 MULTISIM 软件进行仿真调试实现

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
d49def16c88f1eecd3720be04f7305f.png

单片机源程序如下:
  1. #include "main.h"

  2. bit sflag=0;
  3. bit heitian=0;
  4. bit baitian=0;

  5. unsigned int Countdown=0;

  6. void baitian_run();
  7. void InitTimer0(void);


  8. void main() //0通道光
  9. {
  10.         
  11.         InitTimer0();
  12.         SW=1;
  13.         UartInit();
  14.         while(1)
  15.         {
  16.                 baitian_run();  
  17.         }
  18. }

  19. void Timer0Interrupt(void) interrupt 1 //12T@10ms
  20. {
  21.         static u16 timecount=0;
  22.         static u8 keycount=0;
  23.         TH0 = 0x0FC;
  24.   TL0 = 0x18;
  25.         timecount++;
  26.         keycount++;
  27.         if(timecount==1000)
  28.         {
  29.                 timecount=0;
  30.                 sflag=1;
  31.         }
  32.                
  33. }

  34. void baitian_run()
  35. {
  36.         unsigned long d=100000;
  37.         u8 adc,voltage1,voltage2;
  38.         adc = ADC_read_data(0);//读取adc光值
  39.         voltage1 = adc * 500.0 / 255;//将adc值换算成电压
  40.         adc = ADC_read_data(1);//读取adc光值
  41.         voltage2 = adc * 500.0 / 255;//将adc值换算成电压
  42.         
  43.         UART_SendNum(voltage2);
  44.         while(d--);
  45.         
  46.         if(voltage1<LS)
  47.         {
  48.                 heitian=1;
  49.         }
  50.         else
  51.         {
  52.                 heitian=0;
  53.         }
  54.         if(heitian==1)
  55.         {
  56.                         if(voltage2>SS)
  57.                 {
  58.                         baitian=1;
  59.                 }
  60.         }
  61.         if(baitian==1)
  62.         {
  63.                
  64.                 if(voltage2>SS)
  65.                 {
  66.                         Countdown=0;
  67.                 }
  68.                 SW=0;
  69.                 if(sflag==1)
  70.                 {
  71.                         sflag=0;
  72.                         Countdown++;
  73.                         if(Countdown==Timeout)
  74.                         {
  75.                                 Countdown=0;
  76.                                 baitian=0;
  77.                         }
  78.                 }
  79.         }
  80.         else
  81.         {
  82.                 SW=1;
  83.         }
  84.         
  85.         
  86. }

  87. void InitTimer0(void)
  88. {
  89.     TMOD = 0x01;
  90.     TH0 = 0x0FC;
  91.     TL0 = 0x18;
  92.     EA = 1;
  93.     ET0 = 1;
  94.     TR0 = 1;
  95. }
复制代码
下载:
基于51单片机的声光控延时灯.7z (1.9 MB, 下载次数: 12)

评分

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

查看全部评分

回复

使用道具 举报

ID:1127891 发表于 2024-7-2 14:36 | 显示全部楼层
有点看不懂
回复

使用道具 举报

ID:818537 发表于 2024-9-26 00:12 | 显示全部楼层

哪里看不懂,我跟你说一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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