使用Proteus仿真软件设计一个开机登录程序,单片机选用ATmegga48.
基础要求:
1.程序启动后在LCD1602液晶屏上提示用户通过独立按键输入密码(6位)。
2.密码输入错误则在屏幕上提示密码错误,密码输入正确则在屏幕上提示密
码正确后等待约3秒后进入主界面,在屏幕中央显示HelloWorld。
附加任务:在原题基础上
1.LCD1602改用LCD12864液晶屏显示,独立按键改用4x4巨阵键盘。
2.首次开机可直接设置新密码,非首次开机提示用户输入密码,尽量使用内
部EEPROM。
3.进入主界面后用几个按键来实现修改之前保存的密码,修改E时屏幕上有光
标和相关提示。
设计并实现一个基于ATmega48单片机的开机登录程序,通过Proteus仿真软件进行仿真,使用LCD12864液晶屏和4x4矩阵键盘,实现密码输入和验证功能,初次开机可以设置新密码,后续可以通过按键修改密码。
ATmega48单片机
LCD12864液晶屏
4x4矩阵键盘
Proteus仿真软件
按键和其他必要的电子元件
LCD12864液晶屏连接:
数据线连接到单片机的PORTB
控制线(E、RS、RW、复位等)连接到PORTC的相应引脚
4x4矩阵键盘连接:
程序启动后,在LCD12864液晶屏上提示用户输入密码(6位)。
初次开机允许用户设置新密码,密码保存在内部EEPROM中。
用户输入密码后,程序进行验证,若密码正确,显示“Hello World”欢迎界面;若密码错误,提示用户重新输入。
进入主界面后,用户可以通过特定按键修改之前保存的密码。
LCD12864液晶屏的初始化与控制
液晶屏初始化函数F12864_init()
,设定文本和图形显示区地址、光标形状和显示方式等。
液晶屏显示控制函数,包括写命令、写数据、清屏等功能。
EEPROM读写操作
密码输入与验证
用户通过矩阵键盘输入密码,程序实时显示输入的密码。
初次开机时,允许用户设置新密码,并保存在EEPROM中。
非初次开机时,读取EEPROM中的密码进行验证。
按键扫描
get_key()
实现按键识别。修改密码
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
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!