当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机智能路灯控制系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示时间,光照值
2、按键设定系统时间、工作时间、光照阈值
(默认开始时间为18点,结束时间为6点)
3、工作时间内路灯点亮,凌晨12点后路灯关闭,
有人或车通过,路灯点亮10s
4、非工作时间光照强度低于阈值,路灯点亮
5、手动和自动模式可通过按键自己手动切换,
手动模式由开关控制路灯亮灭

二、使用步骤

系统采用STC89C52作为主控芯片,通过光敏电阻与ADC0832芯片检测环境光照强度,配合DS1302时钟芯片实现时间控制。LCD1602液晶屏用于显示时间、光强及工作状态,红外传感器和噪声模块用于检测,蜂鸣器实现故障报警功能。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、时钟模块传感器
4、蜂鸣器模块
5、LED灯模块
6、LCD1602显示模块

四、软件设计、

#include<reg52.h>
#include <string.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

#define yh 0x80 
#define er 0x80+0x40
sbit en=P2^7;
sbit rw=P2^6;   
sbit rs=P2^5;


sbit KeySet=P2^0;    
sbit KeyUp=P2^1;     
sbit KeyDown=P2^2;     
sbit Keyout=P2^3;    

sbit key_5 = P1^6;
sbit key_6 = P1^7;

sbit AD_clk = P1^3;                  
sbit AD_do  = P1^4; 
sbit AD_di  = P1^4;
sbit AD_cs  = P1^5; 


sbit SCLK = P1^0;
sbit IO   = P1^1;
sbit RST  = P1^2;

sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

sbit Beep =  P3^6;                   
sbit led_1 = P3^7;
sbit red_sr = P2^4;                
uchar code tab1[]= {"20  -  -        "};     
uchar code tab2[]= {"  :  :          "};        
uchar count=0;         

uchar nian,yue,ri,shi,fen,miao;
uchar nian_temp,yue_temp,ri_temp,shi_temp,fen_temp,miao_temp;
bit  p_r=0;                             
char time;
char work_time_Start = 18 ,work_time_zhon = 0,work_time_End = 6;       
bit light_flag; 
uchar light;                         
uchar light_limit=100;                       
uchar Mode_flag = 0;
void Timer0Init(void);    
void Timer1Init(void); 
void uart_init();
void delay(uint xms);
void main()
{

    lcd_init();    
    Timer0Init();   //定时器0初始化
    Timer1Init();  //定时器1初始化
    while(1)  //无限循环下面的语句:
    {        
        qiehaun();
        keyscan();
        set_work_time();             
        set_limit_light();                
        light = 255-AD(0);               
    }
}
void timer0() interrupt 1  
{
      TH0=(65536-50000)/256;     
    TL0=(65536-50000)%256;            
        count++;
        if(count == 20) //1s
        {
                count = 0;    
            miao = BCD_Decimal(read_1302(0x81));
            fen =  BCD_Decimal(read_1302(0x83));
            shi  = BCD_Decimal(read_1302(0x85));
            ri  =  BCD_Decimal(read_1302(0x87));
            yue =  BCD_Decimal(read_1302(0x89));
            nian=  BCD_Decimal(read_1302(0x8d));

            write_sfm(6,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数)
            write_sfm(3,fen);//分,从第二行第5个字符后开始显示
            write_sfm(0,shi);//小时,从第二行第2个字符后开始显示

            //显示日、月、年数据:
            write_nyr(8,ri);//日期,从第二行第9个字符后开始显示
            write_nyr(5,yue);//月份,从第二行第6个字符后开始显示
            write_nyr(2,nian);//年,从第二行第3个字符后开始显示    

            write_1602com(0x8e);
            write_1602dat('0'+time%100/10);//显示计时
            write_1602dat('0'+time%10);
    
            write_1602com(0xcd);                         //显示当前光照强度
            write_1602dat('0'+light/100);
            write_1602dat('0'+light%100/10);
            write_1602dat('0'+light%10);            
        }
   
}
void timer1() interrupt 3  
{
      TH1=(65536-50000)/256;        //50ms
    TL1=(65536-50000)%256;            
        Led_count++;
        if(Led_count == 20) //1s
        {
            Led_count = 0;
            time ++;
            if(time>9)
                Beep = 0;
        }
}
void Timer0Init(void)        //50微秒
{
        TMOD|=0x01;                 //TMOD=0000 0001B,使用定时器T0的模式1
    TH0=(65536-50000)/256;        //定时器T0的高8位赋初值
    TL0=(65536-50000)%256;       //定时器T0的高8位赋初值
        ET0=1;                   //开T0中断
        TR0=1;                   //定时开始    
        EA =1;
}
void Timer1Init(void)        //50微秒
{
        TMOD|=0x10;                 //TMOD=0000 0001B,使用定时器T0的模式1
    TH1=(65536-50000)/256;        //定时器T0的高8位赋初值
    TL1=(65536-50000)%256;       //定时器T0的高8位赋初值
        ET1=0;                   //关T0中断
        TR1=1;                   //定时开始    
        EA =1;
}

//延时函数,后面经常调用
void delay(uint xms)//延时函数,有参函数
{
    uint x,y;
    for(x=xms; x>0; x--)
        for(y=110; y>0; y--);
}

五、实验现象

演示视频:

【51单片机-B053】【protues仿真】基于51单片机智能路灯控制系统仿真

http://www.dtcms.com/a/449810.html

相关文章:

  • 3d模型免费素材网站wordpress如何修改行距
  • 再探类对象——C++入门进阶
  • 公司网站如何维护wordpress去掉title前空格及keywords最后的逗号
  • 仙居谁认识做网站的广告投放平台代理
  • 智慧餐厅管理系统qq群排名优化软件官网
  • InnoDB核心限制与应对策略
  • 贵州建设厅监理协会网站前后端分离实现网站开发
  • QNX 开发环境搭建
  • Java技术栈 —— 使用MinIO进行大文件分片上传与下载
  • `modprobe`命令 与 `KVM`模块 笔记251006
  • 山东省建设监理协会网站打不开赣州招聘网最新招聘
  • 贵阳网站建设设计个人网页设计作品集分析
  • 音乐介绍网站怎么做做暧暧小视频网站
  • 公网带宽1m能建设电商网站吗wordpress新建数据库
  • C57-断言函数assert
  • 网站的制作建站人汽车业务网站开发公司
  • 详解指针2
  • 第一章 :感知机(上)
  • 做网站都要会些什么设计网站建设合同书6
  • 网站开发工程师 能做什么响应式布局的概念
  • 反激开关电源
  • 长沙网站建设外贸0基础做电商从何下手
  • vs2015做网站做民宿需要和多家网站合作吗
  • 集团型网站建设室内设计平面图简单
  • 比利时网站后缀用php做的网站前后台模板
  • 视频网站如何做微信营销长春火车站和高铁站是一个站吗
  • steamdeck 龙神Ryujinx模拟器输入控制器无效
  • 彩票网站网站建设路由器上建网站
  • 网站建设如何推广业务如何备份wordpress网页
  • linux学习笔记(16)进程间通信——管道