【TB作品】基于ATmega48的开机登录程序设计

使用Proteus仿真软件设计一个开机登录程序,单片机选用ATmegga48.
基础要求:
1.程序启动后在LCD1602液晶屏上提示用户通过独立按键输入密码(6位)。
2.密码输入错误则在屏幕上提示密码错误,密码输入正确则在屏幕上提示密
码正确后等待约3秒后进入主界面,在屏幕中央显示HelloWorld。
附加任务:在原题基础上
1.LCD1602改用LCD12864液晶屏显示,独立按键改用4x4巨阵键盘。
2.首次开机可直接设置新密码,非首次开机提示用户输入密码,尽量使用内
部EEPROM。
3.进入主界面后用几个按键来实现修改之前保存的密码,修改E时屏幕上有光
标和相关提示。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实验报告:基于ATmega48的开机登录程序设计

一、实验目的

设计并实现一个基于ATmega48单片机的开机登录程序,通过Proteus仿真软件进行仿真,使用LCD12864液晶屏和4x4矩阵键盘,实现密码输入和验证功能,初次开机可以设置新密码,后续可以通过按键修改密码。

二、实验器材

  1. ATmega48单片机
  2. LCD12864液晶屏
  3. 4x4矩阵键盘
  4. Proteus仿真软件
  5. 按键和其他必要的电子元件

三、硬件连接

  1. LCD12864液晶屏连接:
    • 数据线连接到单片机的PORTB
    • 控制线(E、RS、RW、复位等)连接到PORTC的相应引脚
  2. 4x4矩阵键盘连接:
    • 行和列引脚分别连接到单片机的PORTD的输入输出引脚

四、设计原理

1. 程序启动流程

  • 程序启动后,在LCD12864液晶屏上提示用户输入密码(6位)。
  • 初次开机允许用户设置新密码,密码保存在内部EEPROM中。
  • 用户输入密码后,程序进行验证,若密码正确,显示“Hello World”欢迎界面;若密码错误,提示用户重新输入。
  • 进入主界面后,用户可以通过特定按键修改之前保存的密码。

2. 程序功能模块

  1. LCD12864液晶屏的初始化与控制
    • 液晶屏初始化函数F12864_init(),设定文本和图形显示区地址、光标形状和显示方式等。
    • 液晶屏显示控制函数,包括写命令、写数据、清屏等功能。
  2. EEPROM读写操作
    • 通过内部EEPROM保存和读取密码,EEPROM_read()和EEPROM_write()函数实现读写操作。
  3. 密码输入与验证
    • 用户通过矩阵键盘输入密码,程序实时显示输入的密码。
    • 初次开机时,允许用户设置新密码,并保存在EEPROM中。
    • 非初次开机时,读取EEPROM中的密码进行验证。
  4. 按键扫描
    • 矩阵键盘按键扫描函数get_key()实现按键识别。
  5. 修改密码
    • 进入主界面后,用户可以通过按键进入修改密码模式,按步骤输入旧密码和新密码进行修改,并更新EEPROM中的密码。

五、程序原理

// LCD12864初始化函数
void F12864_init(void) {// 数据方向设置DDRB = 0xFF;DDRC = 0xFF;// 复位REST_0;delay_nms(20);REST_1;// 设置文本显示区首地址、宽度和图形显示区首地址、宽度write_ddc(0x40, 0x00, 0x00);write_ddc(0x41, 128 / 8, 0x00);write_ddc(0x42, 0x00, 0x08);write_ddc(0x43, 128 / 8, 0x00);// 光标形状、显示方式和显示开关设置write_commond(0xA0);write_commond(0x80);write_commond(0x98);write_commond(0x9F);
}// 读取EEPROM中的密码
void read_pwd(void) {for (char i = 0; i < 6; i++) {SYSTEM_PASSWORD[i] = EEPROM_read(0x0040 + i);}
}// 写入密码到EEPROM
void write_pwd(void) {for (char i = 0; i < 6; i++) {EEPROM_write(0x0040 + i, SYSTEM_PASSWORD[i]);}
}// 主程序
void main(void) {// 初始化F12864_init();F12864_clear();// 判断是否为首次开机if (get_vaild_pwd() == 0) {// 设置新密码流程set_new_password();} else {// 读取密码并进行验证read_pwd();verify_password();}// 进入主界面,允许用户修改密码enter_main_interface();
}// 延时函数
void delay_nms(unsigned int time) {for (; time > 0; time--) {for (int i = 0; i < 500; i++);}
}

六、实验总结

通过本次实验,我们熟悉了ATmega48单片机的基本操作,掌握了LCD12864液晶屏的驱动方法和EEPROM的读写操作。通过Proteus仿真,验证了设计的开机登录程序功能的实现。通过合理的模块化设计,使得程序结构清晰、功能完善,为后续类似设计提供了参考和借鉴。

资源代码

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下编译ffmpeg 最详细教程

1 Ffmpeg下载地址&#xff1a;FFmpeg 使用命令下载 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 下载完成后会发现如下目录&#xff1a; 2 msys2下载地址&#xff1a;MSYS2 解压好后&#xff0c;选择一个非空路径安装&#xff0c;安装好后路径如下&#xff1a; 为…

自己动手实现语音识别

声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移。 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布,建立音频内容和文本的对应关系,以此作为模型训练的基础。 语音mfc…

ROS——坐标系管理、监听与广播、常用可视化工具

坐标系管理 TF功能包 小海龟追踪实验 ros版本(20.04)的tf安装命令: sudo apt-get install ros-noetic-turtle-tf 解决因python版本出现的无法生成跟随海龟&#xff1a; sudo ln -s /usr/bin/python3 /usr/bin/python ( -s 软链接,符号链接) ln命令&#xff08;英文全拼&#…

ForkJoinPool 简介

引言 在现代并行编程中&#xff0c;处理大规模任务时将任务分割成更小的子任务并行执行是一种常见的策略。Java 提供了 Fork/Join 框架来支持这一模式&#xff0c;其中 ForkJoinPool 是其核心组件。本文将详细介绍 ForkJoinPool 的概念、使用方法和实际应用。 1. ForkJoinPoo…

grpc-go服务端接口添加

【1】新建一个目录whgserviceproto&#xff0c;目录下新建一个proto包&#xff1a;whgserviceproto.proto &#xff08;注意目录和包名称保持一致&#xff09; //协议为proto3 syntax "proto3"; // 指定生成的Go代码在你项目中的导入路径 option go_package"…

代理模式详解、RESTFul风格、Spring IOC

Day49 代理模式proxy 概念&#xff1a; 代理(Proxy)是一种设计模式&#xff0c;提供了对目标对象另外的访问方式&#xff0c;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 代理模式分为静态代理和动态代理…

在Spring Boot项目中使用Leyden

Spring Boot 服务的 RAM 消耗减少多达 30% &#xff0c;为研究Spring Boot而量身定制的 Alpaquita 容器。Buidpacks也可用&#xff01; 重要提示&#xff1a;Project Leyden EA 版本基于实验代码&#xff0c;不适用于生产用途。此外&#xff0c;EA 版本中的某些功能可能会更改…

开源数据科学平台Anaconda简介

开源数据科学平台Anaconda简介 零、时光宝盒 最近&#xff0c;某金融行业女性选择以跳楼的形式结束自己的生命&#xff0c;这件不幸的事情成了热门话题&#xff0c;各种猜测的都有&#xff0c;有些人评论的话真的很过分。我想起前段时间看到的&#xff0c;有个女学生跳江&#…

【论文解读】AGENTLESS:揭开基于LLM的软件工程代理的神秘面纱,重塑软件工程自动化新基线

&#x1f4dc; 文献卡 英文题目: Agentless: Demystifying LLM-based Software Engineering Agents;作者: Chunqiu Steven Xia; Yinlin Deng; Soren Dunn; Lingming ZhangDOI: 10.48550/arXiv.2407.01489摘要翻译: 大型语言模型&#xff08;LLM&#xff09;的最新进展显著推进…

进程的控制-ps和kill命令

ps 查看进程信息 部分参数&#xff1a; a : 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序 u: 以用户为主的格式来显示程序状况 x: 显示所有程序&#xff0c;不以 终端机来区分 kill 向指定的进程发送信号 kill 可将指定的信息送至程序。预设的信息为 SIG…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代&#xff0c;人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代&#xff0c;我们不应该单纯依赖工具本身&#xff0c;而是要理解如何将这些AI功能与行业相结合。 然而&#xff0c;上周OpenAI宣布禁止对中国提供API服务&#xff0c;有一些用户…

常用 各国语言简写

zh-CN 华 -中国 zh-TW 华 -台湾 zh-CHS 华 (单一化) zh-SG 华 -新加坡 zh-CHT 华 (传统的) zh-HK 华 - 香港的 SAR zh-MO 华 - 澳门的 SAR en 英国 en-US 英国 - 美国 en-AU 英国 -澳洲 en-BZ 英国 -伯利兹 en-CA 英…

六、数据可视化—flask框架入门(爬虫及数据可视化)

六、数据可视化—flask框架入门&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;数据可视化简介2&#xff0c;flask&#xff08;1&#xff09;创建flask项目&#xff08;2&#xff09;开启debug模式&#xff08;3&#xff09;通过访问路径传递参数&#xff08;4&#x…

图的应用之最短路径

引入 应用 算法思想 Dijistra算法 用于解决单个顶点间的最短路径问题 将顶点看成两部分&#xff1a; 最短路径顶点集合A与尚未确定最短路径顶点集合B。 先将顶点按最短路径由小到大依次加入到A中&#xff0c;选择由源点到A中最短的顶点&#xff0c;并记录距离与顶点&#xf…

uni-app-H5页面调用设备摄像头扫描二维码

应用场景&#xff1a;APK里面webView&#xff0c;访问用uniapp写的H5页面&#xff0c;需要调用设备摄像头扫描二维码 首先下载导入扫描插件&#xff1a;H5调用摄像头识别二维码&#xff08;原生H5调用&#xff0c;不需要任何sdk&#xff0c;本地扫描识别&#xff0c;不需要后端…

身体(body)的觉醒:如果你贪婪,给你整个宇宙都不够

佛&#xff0c;是一个梵文的汉语音译词&#xff0c;指觉醒者。 何谓觉醒&#xff1f;什么的觉醒&#xff1f;其实很简单&#xff0c;就是身体的觉醒。 佛的另一个名字&#xff0c;叫菩提&#xff0c;佛就是菩提&#xff0c;菩提老祖&#xff0c;就是佛祖。 一、body&#xff…

Webpack: 构建优化

概述 前面章节我们已经详细探讨 Webpack 中如何借助若干工具分析构建性能&#xff0c;以及如何使用缓存与多进程能力提升构建性能的基本方法与实现原理&#xff0c;这两种方法都能通过简单的配置&#xff0c;极大提升大型项目的编译效率。 除此之外&#xff0c;还可以通过一些…

Lambda架构

1.Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出&#xff0c;其设计目的在于提供一个能满足大数据系统关键特性的架构&#xff0c;包括高容错、低延迟、可扩展等。其整合离线计算与实时计算&#xff0c;融合不可变性、读写分离和复杂性隔离等原则&…

3.js - 裁剪平面(clipIntersection:交集、并集)

看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …

深度解析Ubuntu版本升级:LTS版本升级指南

深度解析Ubuntu版本升级&#xff1a;Ubuntu版本生命周期及LTS版本升级指南 Ubuntu是全球最受欢迎的Linux发行版之一&#xff0c;其版本升级与维护策略直接影响了无数用户的开发和生产环境。Canonical公司为Ubuntu制定了明确的生命周期和发布节奏&#xff0c;使得社区、企业和开…