【TB作品】数码管独立按键密码锁,ATMEGA16单片机,Proteus仿真 atmega16数码管独立按键密码锁
文章目录
- 基于ATmega16的数码管独立按键密码锁设计实验报告
- 实验背景
- 硬件介绍
- 主要元器件
- 电路连接
- 设计原理
- 硬件设计
- 软件设计
- 程序原理
- 延时函数
- 独立按键检测
- 密码显示
- 主函数
- 资源代码
基于ATmega16的数码管独立按键密码锁设计实验报告
实验背景
本实验旨在设计并实现一个基于ATmega16单片机的数码管独立按键密码锁系统。该系统能够接受用户输入的密码,并与预设的系统密码进行比对,若匹配成功则点亮绿色LED灯,否则点亮红色LED灯。此设计广泛应用于电子门锁等安全系统中。
硬件介绍
主要元器件
- ATmega16单片机:核心控制器,负责按键扫描、密码存储及比较、LED灯和数码管显示控制等。
- 独立按键:用于用户输入密码。
- 共阴极数码管:用于显示用户输入的密码。
- LED灯:绿色和红色LED分别用于指示密码输入正确与否。
- 电阻、电容:用于限流和滤波。
电路连接
- 独立按键:连接至单片机的PINA和PINB引脚,用于检测按键输入。
- 数码管:连接至单片机的PORTC和PORTD引脚,通过动态扫描方式显示用户输入的密码。
- LED灯:分别连接至单片机的PORTA引脚,通过控制高低电平实现亮灭。
- 电源:为整个系统提供稳定的电源供给。
设计原理
硬件设计
- 独立按键检测:采用独立按键,通过PINA和PINB端口检测按键状态。每个按键对应一个独立的引脚,当按键按下时,检测到低电平,从而获取按键值。
- 数码管显示:采用动态扫描方式,逐个显示数码管的内容。通过控制PORTD和PORTC实现数码管的选择和段码显示。
- LED指示:通过控制PORTA的高低电平来实现绿色和红色LED灯的亮灭,指示密码输入的正确与否。
软件设计
程序采用C语言编写,主要包括以下几个模块:
- 延时函数:通过简单的循环实现延时,以配合数码管动态扫描的刷新。
- 按键检测:扫描独立按键,获取用户按键输入的值。
- 密码显示:将用户输入的密码通过数码管显示出来。
- 密码比较:将用户输入的密码与预设密码进行比对,控制LED灯的显示状态。
程序原理
延时函数
void delay_nms(int time) {int i;for (; time > 0; time--) {for (i = 0; i < 1000; i++);}
}
延时函数通过简单的循环实现,以配合数码管的动态扫描。
独立按键检测
int getKeyBoardValue(void) {if ((PINB & 0x01) == 0) return 0;else if ((PINB & 0x02) == 0) return 1;else if ((PINB & 0x04) == 0) return 2;else if ((PINB & 0x08) == 0) return 3;else if ((PINB & 0x10) == 0) return 4;else if ((PINB & 0x20) == 0) return 5;else if ((PINB & 0x40) == 0) return 6;else if ((PINB & 0x80) == 0) return 7;else if ((PINA & 0x08) == 0) return 8;else if ((PINA & 0x10) == 0) return 9;else if ((PINA & 0x20) == 0) return 10;else if ((PINA & 0x40) == 0) return 11;else if ((PINA & 0x80) == 0) return 12;return 20;
}
通过检测PINA和PINB引脚的电平状态,判断哪个键被按下。
密码显示
void display_pwd(char *pwdptr, unsigned char length) {int i = 0;for (i = 0; i < length; i++) {LedOut[i] = Disp_Tab[pwdptr[i] - '0'];}for (i = length; i < 6; i++) {LedOut[i] = Disp_Tab[11];}
}
将用户输入的密码通过数码管显示出来,未输入的位显示为空白。
主函数
void main(void) {char cnt_seg = 0;int keyTemp = 0;char SYSTEM_PASSWORD[7] = "123456";char in_buffer[7] = {0, 0, 0, 0, 0, 0, 0};char input_nuber = 0;char key_press_flag = 0;while (1) {keyTemp = getKeyBoardValue();if ((keyTemp != 20) && (key_press_flag == 0)) {key_press_flag = 1;if (keyTemp <= 9) keyTemp += '0';if ((keyTemp >= '0') && (keyTemp <= '9') && (input_nuber < 6)) {in_buffer[input_nuber++] = keyTemp;}if ((keyTemp == 11) && input_nuber) {input_nuber--;in_buffer[input_nuber] = 0;}if (keyTemp == 12) {input_nuber = 0;memset(in_buffer, 0, sizeof(in_buffer));PORTA |= 0x01;PORTA |= 0x02;}if ((keyTemp == 10) && (input_nuber == 6)) {if (memcmp(in_buffer, SYSTEM_PASSWORD, 6) == 0) {PORTA &= ~0x02;PORTA |= 0x01;} else {PORTA &= ~0x01;PORTA |= 0x02;}memset(LedOut, Disp_Tab[11], sizeof(LedOut));input_nuber = 0;memset(in_buffer, 0, sizeof(in_buffer));}display_pwd(in_buffer, input_nuber);}if (getKeyBoardValue() == 20) {key_press_flag = 0;}cnt_seg++;if (cnt_seg > 5) {cnt_seg = 0;}delay_nms(2);}
}
主函数负责初始化各端口,循环检测按键输入,处理用户输入的密码,并通过数码管显示和LED指示密码验证结果。
资源代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
相关文章:

【TB作品】数码管独立按键密码锁,ATMEGA16单片机,Proteus仿真 atmega16数码管独立按键密码锁
文章目录 基于ATmega16的数码管独立按键密码锁设计实验报告实验背景硬件介绍主要元器件电路连接 设计原理硬件设计软件设计 程序原理延时函数独立按键检测密码显示主函数 资源代码 基于ATmega16的数码管独立按键密码锁设计实验报告 实验背景 本实验旨在设计并实现一个基于ATm…...

数据库主从复制
目录 一.主从复制架构 二.主从复制原理 三.实现主从复制配置 1.新建主从复制 2.实战遇到问题 3.复制错误解决方法 4.级联 主从复制 5.半同步复制 MySQL数据库的主从复制(Master-Slave Replication)是一种常见的数据库复制架构,用于提…...

昇思25天学习打卡营第13天|BERT
一、简介: BERT全称是来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Transformers),它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自…...

跨平台书签管理器 - Raindrop
传统的浏览器书签功能虽然方便,但在管理和分类上存在诸多局限。今天,我要向大家推荐一款功能强大的跨平台书签管理-Raindrop https://raindrop.io/ 📢 主要功能: 智能分类和标签管理 强大的搜索功能 跨平台支持 分享与协作 卡片式…...

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)
S-G滤波器又称S-G卷积平滑器,它是一种特殊的低通滤波器,用来平滑噪声数据。该滤波器被广泛地运用于信号去噪,采用在时域内基于多项式最小二乘法及窗口移动实现最佳拟合的方法。与通常的滤波器要经过时域-频域-时域变换…...
c++ 可以再头文件种直接给成员变量赋值吗
在C中,你通常不能在头文件中直接给类的成员变量赋值,因为这会导致每个包含该头文件的源文件中都尝试进行赋值,从而引发多重定义错误。然而,你可以在类的构造函数中初始化成员变量,或者在类声明中使用初始化列表或默认成…...

47.HOOK引擎优化支持CALL与JMP位置做HOOK
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 上一个内容:46.修复HOOK对代码造成的破坏 以 46.修复HOOK对代码造成的破坏 它的代码为基础进行修改 优化的是让引擎支持从短跳JMP(E9&…...
liunx上修改Firefox版本号
在Linux上修改Firefox的版本号并不直接推荐也不鼓励,因为这可能会影响到浏览器的安全性、兼容性和自动更新功能。但如果你因为某些特殊测试场景确实需要修改其显示的版本号(请注意,这样做可能会引发不可预料的问题),可…...
bug——多重定义
bug——多重定义 你的问题是在C代码中遇到了"reference to data is ambiguous"的错误。这个错误通常发生在你尝试引用一个具有多重定义的变量时。 在你的代码中,你定义了一个全局变量data,同时,C标准库中也有一个名为data的函数模板…...
将堆内存的最小值(Xms)与最大值(Xmx)设置为相同的配置,可以防止JVM在运行过程中根据需要动态调整堆内存大小
将堆内存的最小值(Xms)与最大值(Xmx)设置为相同的配置,可以防止JVM在运行过程中根据需要动态调整堆内存大小,从而避免因内存分配策略变化引起的性能波动,也就是所谓的"内存震荡"&…...

安装 tesseract
安装 tesseract 1. Ubuntu-24.04 安装 tesseract2. Ubuntu-24.04 安装支持语言3. Windows 安装 tesseract4. Oracle Linux 8 安装 tesseract 1. Ubuntu-24.04 安装 tesseract sudo apt install tesseract-ocr sudo apt install libtesseract-devreference: https://tesseract-…...

为适配kubelet:v0.4 安装指定版本的docker
系统版本信息 cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) iso 文件下载地址 https://vault.centos.org/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso0.4 版本的kubelet 报错信息记录 E0603 19:00:38.273720 44142 kubelet.go:734] Error synci…...
vivado CLOCK_REGION、CLOCK_ROOT
时钟区域 CLOCK_REGION属性用于将时钟缓冲区分配给 UltraScale设备,同时让Vivado放置程序将时钟缓冲区分配给最佳站点 在该区域内。 重要提示:对于UltraScale设备,不建议将时钟缓冲区固定到特定站点,因为 你可以在时钟上规划一个7…...

alphazero学习
AlphaGoZero是AlphaGo算法的升级版本。不需要像训练AlphaGo那样,不需要用人类棋局这些先验知识训练,用MCTS自我博弈产生实时动态产生训练样本。用MCTS来创建训练集,然后训练nnet建模的策略网络和价值网络。就是用MCTSPlayer产生的数据来训练和…...

剖析DeFi交易产品之UniswapV3:交易路由合约
本文首发于公众号:Keegan小钢 SwapRouter 合约封装了面向用户的交易接口,但不再像 UniswapV2Router 一样根据不同交易场景拆分为了那么多函数,UniswapV3 的 SwapRouter 核心就只有 4 个交易函数: exactInputSingle:指…...

Agent下载安装步骤
目录 一. 环境准备 二. 部署安装 三. Server端Web页面添加agent客户端 一. 环境准备 准备一台虚拟机,关闭防火墙和selinux,进行时间同步。 版本主机名IP系统zabbix6.4-agentweb1192.168.226.29Rocky_linux9.4 修改主机名 [rootlocalhost ~]# hostna…...

2024年AI技术深入研究
2024年AI技术持续快速发展,应用领域广泛,产业发展迅速,市场趋势积极,学术研究深入。 AI技术进展大模型发展 2024年,智谱AI正在研发对标OpenAI Sora的高质量文生视频模型,预计最快年内发布。智谱AI的进展显示了国内AI大模型领域的快速发展,以及与国际领先技术的竞争态势…...

Apache Seata分布式事务启用Nacos做配置中心
本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Seata分布式事务启用Nacos做配置中心 Seata分布式事务启用Nacos做配置中心 项目地址 本文作…...

Emacs之解决:java-mode占用C-c C-c问题(一百四十六)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

go语言day10 接口interface 类型断言 type关键字
接口: 空接口类型: 要实现一个接口,就要实现该接口中的所有方法。因为空接口中没有方法,所以自然所有类型都实现了空接口。那么就可以使用空接口类型变量去接受所有类型对象。 类比java,有点像Object类型的概念&#x…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...