做生鲜管理系统的网站,wordpress怎样实现前台编辑,百度端口开户推广,桐乡哪里有做网站的文章目录 基于ATmega16的数码管独立按键密码锁设计实验报告实验背景硬件介绍主要元器件电路连接 设计原理硬件设计软件设计 程序原理延时函数独立按键检测密码显示主函数 资源代码 基于ATmega16的数码管独立按键密码锁设计实验报告
实验背景
本实验旨在设计并实现一个基于ATm… 文章目录 基于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?tabBB08J2