news 2026/7/7 13:14:28

基于单片机存储柜(4个柜子,LCD1602,矩阵键盘)系统Proteus仿真(含全部资料)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机存储柜(4个柜子,LCD1602,矩阵键盘)系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:↓↓↓

通过网盘分享的文件:资料分享
链接:百度网盘 请输入提取码提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

其中有10个数字按键(0-9)
存包-按下此按键,牛成随机密码
取包—按下此按键,进行密码输入
清除一在输入密码过程中,按下此键,可以清空输入
确认-按下此键,进行密码验证


项目文件:

一、Proteus仿真源文件

​​

二、AD原理图文件

二、报告说明书

三、系统流程图

​​

四、器件清单

元件型号数量
单片机AT89C511
电容10uf1
电容30pf2
晶振12MHZ1
电阻10k1
按钮17
存储器24C021
LED红色4
电阻100欧4
电阻1k1
三极管PNP1
蜂鸣器有源1
显示器LCD16021
排阻10k1

五、Keil c语言程序源代码(部分)

#include "reg51.h" #include <stdlib.h> #include "i2c.h" #include "lcd1602.h" #define uchar unsigned char #define uint unsigned int sbit beep=P2^5;//蜂鸣器 uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管编码 uint time=0; uchar mode=0;//系统变量 uchar state[]={0,0,0,0};//柜子状态 uchar mima[]={0,0,0,0,0,0,0,0}; uchar duqu[]={0,0,0,0,0,0,0,0};//输入密码 uchar num=8;//临时编号 uchar beep_time=0;//蜂鸣器定时 uchar error=0; uchar time1=0; //======================================================== //生成随机密码 void mima_rand() { uchar i=0; for(i=0;i<8;i++) { mima[i]=(rand()%100+TL0)%10; } } //存储密码 j=0-7 void save(uchar j) { uchar i=0; for(i=0;i<8;i++) { At24c02Write(j*8+8+i,mima[i]); } for(i=0;i<4;i++)//状态存储 { At24c02Write(i,state[i]); } } //读取密码 void read(uchar j) { uchar i=0; for(i=0;i<8;i++) { mima[i]=At24c02Read(j*8+8+i); } } //======================================================== //显示柜子状态 void disp1() { uchar i=0; write_com(0x80+12); for(i=0;i<4;i++) { write_data(state[i]*36+0xdb); } } //显示随机密码 void disp2() { uchar i=0; write_com(0x80); for(i=0;i<8;i++) { write_data(mima[i]+0x30); } } //显示输入密码 void disp3() { uchar i=0; write_com(0xc0); for(i=0;i<8;i++) { write_data(duqu[i]+0x30); } } //======================================================== uchar key=0; uchar key_scan()//按键检测 { uchar i,j; i=0; j=0; P1=0x0f; if(P1!=0x0f) //检测有无按下 { delay_uint(1000); if(P1!=0x0f) { switch(P1)//检测行 { case 0x0e:i=3;break; case 0x0d:i=2;break; case 0x0b:i=1;break; case 0x07:i=0; } P1=0xf0; switch(P1)//检测列 { case 0xe0:j=13;break; case 0xd0:j=9;break; case 0xb0:j=5;break; case 0x70:j=1; } } } if(key!=i+j) { key=i+j; return key; } else return 0; } void main()//主函数 { uchar i=0,j,k,m; init_1602(); for(i=0;i<4;i++)//初始化状态 { state[i]=At24c02Read(i); } if(state[0]>1) { for(i=0;i<4;i++)//初始化状态 { state[i]=0; At24c02Write(i,0); } } read(0);//密码1检查 if(mima[0]>9) { for(j=0;j<8;j++) mima[j]=0; save(0); } read(1);//密码2检查 if(mima[0]>9) { for(j=0;j<8;j++) mima[j]=0; save(1); } read(2);//密码3检查 if(mima[0]>9) { for(j=0;j<8;j++) mima[j]=0; save(2); } read(3);//密码4检查 if(mima[0]>9) { for(j=0;j<8;j++) mima[j]=0; save(3); } disp1(); TMOD|=0X01;//初始化定时器0 TH0=0X3C; TL0=0XB0; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器 while(1) { i=key_scan();//按键检测 if(mode==0)//等待模式 { P3=0xff; if(i==13)//存包 { mima_rand();//随机密码 for(j=0;j<8;j++) duqu[j]=0; num=4; for(j=0;j<4;j++) //查询空箱子 { if(state[j]==0) { num=j; break; } } if(num<4)//有空柜子 { mode=1; P3=~(1<<num);//led } else //无空柜子 { beep_time=20; P3=0xff; } } if(i==14)// 取包 { for(j=0;j<8;j++) duqu[j]=253; mode=5; time=1200; } } if(mode==1)//输入密码模式,存包 { if(i==15)//清除 { for(j=0;j<8;j++) duqu[j]=0; } if(i==12)//退出 { mode=0; for(j=0;j<8;j++)//清零 duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; state[num]=0; num=4; } if((i>0)&&(i<11))//输入数字 { duqu[0]=duqu[1]; duqu[1]=duqu[2]; duqu[2]=duqu[3]; duqu[3]=duqu[4]; duqu[4]=duqu[5]; duqu[5]=duqu[6]; duqu[6]=duqu[7]; duqu[7]=i-1; beep_time=10; } if(i==16)//OK { k=0; for(j=0;j<8;j++) { if(mima[j]==duqu[j]) k++; } if(k==8)//密码正确 { mode=2; error=0; save(num);//保存 for(j=0;j<8;j++)//清零 duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; } else //密码错误 { if(error<3) { error++; beep_time=20; } else { mode=0; beep_time=100; } for(j=0;j<8;j++)//清零 duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; } } } //+++++++++++++++++++++++++++++++++++++++++ if(mode==5)//拿取 { disp3(); if(i==15)//清除 { for(j=0;j<8;j++) duqu[j]=253; P3=0xff; } if(i==12)//退出 { mode=0; for(j=0;j<8;j++)//清零 duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; state[num]=0; num=4; } if((i>0)&&(i<11))//输入数字 { duqu[0]=duqu[1]; duqu[1]=duqu[2]; duqu[5]=duqu[6]; duqu[6]=duqu[7]; duqu[7]=i-1; beep_time=10; } if(i==16)//OK { for(m=0;m<4;m++) { read(m); k=0; for(j=0;j<8;j++) { if(mima[j]==duqu[j]) k++; } if(k==8)//密码对得上 { break; } } if((m<4)&&(state[m]==1))//密码正确,开柜子 { P3=~(1<<m);//led mode=6; time=100; beep_time=8; error=0; state[m]=0; save(m); for(j=0;j<8;j++) duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; } else //密码错误 { if(error<3) { error++; beep_time=60; } else { mode=0; beep_time=40; } for(j=0;j<8;j++)//清零 duqu[j]=0; for(j=0;j<8;j++) mima[j]=0; } k=8; } } } } //定时器中断 void Timer0() interrupt 1 { if(time>0)//倒计时 time--; if(time1<10)//0.5s time1++; else { time1=0; if((num<4)&&(mode==1)) state[num]=1; if(mode==2)//闪烁提示 { if(P3==0xff) P3=~(1<<num); else P3=0xff; if(error<7) error++; else { error=0; P3=0xff; mode=0; state[num]=1; } } //显示 disp1(); if((mode==6)||(mode==2)) { write_string(2,12,"OK! "); if(time==0) mode=0; } else { write_string(2,12," "); } } { beep=1; } TH0=0X3C; TL0=0XB0; }

六、全套资料包含

​​

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 18:36:53

(甲基化研究必备技能)R语言实现CpG位点注释与功能富集分析全流程解析

第一章&#xff1a;甲基化研究必备技能概述DNA甲基化是表观遗传学中的核心机制之一&#xff0c;涉及基因表达调控、细胞分化及疾病发生等多个生物学过程。掌握甲基化研究的关键技术&#xff0c;是开展相关科研工作的基础。研究人员不仅需要理解其生物学意义&#xff0c;还需熟练…

作者头像 李华
网站建设 2026/7/7 10:27:55

SQL Server Management Studio (SSMS) 22.1 - 微软数据库管理工具

SQL Server Management Studio (SSMS) 22.1 - 微软数据库管理工具 integrated environment for managing SQL Server & any Azure SQL infrastructure 请访问原文链接&#xff1a;https://sysin.org/blog/ssms/ 查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

作者头像 李华
网站建设 2026/7/7 6:23:03

12、MobX特殊API与实用工具深度解析

MobX特殊API与实用工具深度解析 1. 特殊API:observe()与intercept() 在处理可观察对象的变化时, intercept() 和 observe() 是两个重要的工具。 intercept() 用于在变化应用到可观察对象之前进行拦截和修改,以下是一个处理主题变化的示例代码: // 处理主题变化的…

作者头像 李华
网站建设 2026/7/7 18:41:00

Wan2.2-T2V-A14B模型对输入文本长度的容忍度测试

Wan2.2-T2V-A14B模型对输入文本长度的容忍度测试 在专业视频生成系统日益走向智能化的今天&#xff0c;一个核心挑战逐渐浮现&#xff1a;如何让AI真正“读懂”复杂的创意描述&#xff1f;尤其是在影视预演、广告制作这类高要求场景中&#xff0c;用户往往需要输入包含多个角色…

作者头像 李华
网站建设 2026/7/7 18:42:50

行业动态:全新技术突破引领未来发展新趋势

在当今快速发展的科技时代&#xff0c;各行各业都在不断寻求创新与突破。近期&#xff0c;一项备受瞩目的技术成果横空出世&#xff0c;为相关领域带来了革命性的变化。这项技术不仅在理论层面实现了重大跨越&#xff0c;更在实际应用中展现出巨大的潜力&#xff0c;有望重塑行…

作者头像 李华
网站建设 2026/7/7 2:43:25

GLM-4.5系列开源模型发布:重新定义智能体基座的技术边界与商业价值

在人工智能技术迅猛发展的今天&#xff0c;智能体应用正成为连接AI能力与产业需求的核心载体。近日&#xff0c;由zai-org团队研发的GLM-4.5系列模型正式开源&#xff0c;凭借创新的混合推理架构与极致的参数效率&#xff0c;为智能体开发提供了全新的技术基座。该系列包含GLM-…

作者头像 李华