【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单片机智能路灯控制系统仿真

相关推荐
炸膛坦客8 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
AI的探索之旅15 小时前
AI辅助原理图评审:电源去耦、BOOT引脚、VCAP——19项逐一核查,遗漏?不存在的
人工智能·vscode·嵌入式硬件
茯苓gao15 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
程序员Rock15 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
GeekArch15 小时前
第24讲:Vibe模式代码风格控制——适配Keil/STM32工程规范
人工智能·stm32·单片机·嵌入式硬件·mcu·决策树·ai编程
Freedom_my16 小时前
STM32项目3
stm32·单片机·嵌入式硬件
国科安芯17 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小李不困还能学18 小时前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
CedarQR18 小时前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json