2024-09-01
售卖作品
00

目录

实验报告:基于ATmega48的开机登录程序设计
一、实验目的
二、实验器材
三、硬件连接
四、设计原理
1. 程序启动流程
2. 程序功能模块
五、程序原理
六、实验总结
资源代码

使用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中的密码。

五、程序原理

c
// 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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!