【51单片机】【protues仿真】 基于51单片机储物箱系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD12864液晶显示存储状态

2、矩阵按键输入进行存取​

3、管理员可以进行直接取物和修改管理员密码

4、指示灯和蜂鸣器进行显示

5、掉电存储功能

二、使用步骤

基于51单片机的储物箱系统设计通常包含密码锁控制、状态显示、柜门开关指示灯等核心功能。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、24c02芯片

4、蜂鸣器模块

5、继电器模块

6、LCD12864显示模块

四、软件设计

#include <STC89C5xRC.H>

#include <intrins.h>

#include "LCD12864_No_font_library.h"

#include "zi_ku.h"

#include "24C02.h"

uchar system_time=0;

bit s0=0;

uchar beep_time=0; //蜂鸣器端口定义

sbit beep=P0^5; //蜂鸣器端口定义

uchar key_back=16; //按键返回值变量

uchar ms=0; //按键返回值变量

bit key_flag=0;

uchar Box_number=0;

uchar xdata password[6] ={0,0,0,0,0,0}; //存储密码的数组

uchar xdata password_flsh[6]={0,0,0,0,0,0}; //存储密码的数组

uchar password_count=0; //存储密码的数组计数变量

uchar xdata Password_flsh2[6]; //这个存储的是,要修的密码密码的时候,再次输入的密码

bit Modify=0; //这个标志位是修改密码用的

uchar Box_state[8];

uchar Surplus=0;

uchar admin[6];

uchar state=0;

uchar state_clear=0;

bit clear_flag=1;

sbit led0=P3^0;

sbit led1=P3^1;

sbit led2=P3^2;

sbit led3=P3^3;

sbit led4=P3^4;

sbit led5=P3^5;

sbit led6=P3^6;

sbit led7=P3^7;

uchar led0_time=0;

uchar led1_time=0;

uchar led2_time=0;

uchar led3_time=0;

uchar led4_time=0;

uchar led5_time=0;

uchar led6_time=0;

uchar led7_time=0;

void Uart1Data(uchar dat) //串口数据发送

{

SBUF=dat;

while(!TI);

TI=0;

}

void delay(unsigned int T)

{

while(T--);

}

void memory_Pass(uchar dat1,dat2,dat3,dat4,dat5,dat6,Num) //保存密码

{

unsigned char tab[6];

tab[0]=dat1;

tab[1]=dat2;

tab[2]=dat3;

tab[3]=dat4;

tab[4]=dat5;

tab[5]=dat6;

Write_dat_24C02(tab,Num*6,6);

}

void read_Pass(Num) //读取密码

{

Read_dat_24C02(password_flsh,Num*6,6);

}

void memory_Box() //保存箱子状态

{

Write_dat_24C02(Box_state,100,8);

}

void read_memory_Box() //读箱子状态

{

Read_dat_24C02(Box_state,100,8);

}

void memory_admin() //保存箱子状态

{

Write_dat_24C02(admin,120,6);

}

void read_memory_admin() //读箱子状态

{

Read_dat_24C02(admin,120,6);

}

void main()

{

Time0_int();

// Uart_int();

EA=1;

LCD_initialize();

LCD_clear();

read_memory_Box();

read_memory_admin();

while(1)

{

key_back_dispose();

dispaly();

key_dispose();

}

}

void time0() interrupt 1

{

TH0=0x3C;

TL0=0xb0;

ms++;

led_dispose();

if(beep_time!=0)

{

if(beep_time!=0)

{

beep_time--;

beep=~beep;

}

}else beep=1;

if(ms%10==0) s0=~s0;

if(ms>=20)

{

ms=0;

if(system_time!=0) system_time--;

else

{

if(state==15||state==14)

{

system_time=10; state=8;

}

else state=0;

}

}

}

//void uart() interrupt 4

// {

// if(RI)

// {

// RI=0;

// }

// }

五、实验现象

演示视频: