任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂

2025-08-20
| 25页
| 56人阅读
| 0人下载
精品

内容正文:

任务二 制作行列矩阵式键盘电子密码锁 (1) 单片机技术及应用 同步精品课堂 高等教育出版社第 4 版 1 了解行列矩阵式键盘的工作原理和软件扫描法 掌握制作行列矩阵式键盘电子密码锁的流程和方法。 会使用 C51 函数进行编程,实现密码锁功能 行列矩阵式键盘的电路原理和软件扫描方法 行列矩阵式键盘电子密码锁的程序设计和实现 理解行列矩阵式键盘的扫描原理和键值获取方法 正确使用 C51 函数进行编程,实现密码输入和验证功能 在之前的学习中,我们制作了独立式键盘电子密码锁,但密码位数较少。这次我们将设计一个可以输入 6 位数字的行列矩阵式键盘电子密码锁,提高密码的复杂度和安全性。 让我们一起开启新的学习之旅吧。 任务二 制作行列矩阵式键盘电子密码锁 任务二要制作行列矩阵式键盘电子密码锁,可输入 6 位数字密码。在 4×4 行列矩阵式键盘中输入 6 位密码 “980417”,按下确认键后,若密码正确,LED 会被点亮,否则 LED 不亮。密码预置在单片机的 Flash ROM 中。 任务需求 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 行列矩阵式键盘电路原理图如图所示,其 I/O 口线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线被短接。 注意:单片机的 P1、P2 和 P3 口内部均有上拉电阻,因此行列矩阵式键盘与这些端口接口时一般不需要外接上拉电阻,为了保证电路稳定工作,可以外接 10kΩ 的上拉电阻。如果使用 P0 口做输入端口,则必须外接上拉电阻。 行列矩阵式键盘 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 ① 从 P1 口的高 4 位送出低电平,然后读取 P1 口数据,若送出去的数据与读取的数据一致,表示没有键被按下,若不一致则表示有键被按下。 ② 若有键被按下,然后逐列扫描,从 P1 高 4 位逐列送出低电平,然后逐行读取 P1 口低 4 位数据,若某一行为低电平,则表示该行某一个键被按下,此时读取 P1 口对应的数据,就可以获得键盘的键值。 行列矩阵式键盘软件扫描方法 任务二 制作行列矩阵式键盘电子密码锁——任务准备 工具及材料准备: 工作准备: ① 软件:Protel DXP 2004、Proteus 7.4、Keil uVision2、EasyPRO Programmer、流程图绘制软件。 ② 硬件:计算机 1 台、编程器 1 台、最小系统电路板 1 块、LED 灯控电路板 1 块、电池盒 1 个。 穿好工作服,戴好防静电手环,穿绝缘胶鞋。 清洁工作台面,清理工作区域,工具、仪器仪表摆放整齐有序。 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 C51 程序由一个主函数 main () 和若干个子函数构成。主函数可以调用其他函数,其他函数也可以相互调用,函数可以调用它本身,称为递归调用,但是其他函数不能调用主函数。 C51 函数 - 概述 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 从函数的形式来看,函数可以分为无参数函数和有参数函数。前者在被调用时没有参数传递,后者在被调用时有参数传递。 C51 函数 - 函数的定义 (1) 无参数函数定义格式 类型说明符定义了函数返回值的类型。如果函数没有返回值,需要用 “void” 作为类型说明符。如果没有类型说明符出现,函数返回值默认为整型值。 类型说明符 函数名(void) //void声明该函数无参数传递 { ...... } 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 (2)有参数函数定义格式 类型说明符 函数名(形式参数列表) //形式参数超过一个时,用“,”隔开 { ..... return(n); } 函数调用示意图 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 函数调用就是在一个函数体中使用另外一个已经定义的函数,前者为主调用函数,后者为被调用函数。函数调用的格式如下: C51 函数 - 函数调用 函数名(实参表); 有实参的函数调用中,如果有多个实参,要用“,”间隔开。实参与形参顺序对应,个数相同, 类型相同。 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 ① 如果被调用函数的函数定义在主调用函数之后,则需要在调用之前 (一般在程序头部) 对函数进行声明。上述程序段中的函数声明如下: C51 函数 - 函数声明 void delay(uint ms); // 函数声明 ② 如果程序中使用了 C51 标准库函数,则在程序的开头要用 #include 预处理语句将被调用的函数包含进来。 例如上述程序段中调用移位函数_crol_() 时,程序头部预处理如下: #include "INTRINS.H" //C51内置库函数,头文件中定义了移位函数 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 ③ 如果被调用的函数不是标准库函数,在本文件中也没有定义,而是在其他文件中定义的,调用时需要使用关键字 “extern” 进行函数原型说明。 例如上述程序段中如果延时函数的定义在另外一个文件中,则函数声明时需要进行如下说明: C51 函数 - 函数声明 extern void delay(uint ms); //函数声明 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 编程思路 1.初始化行列矩阵式键盘和 LED 灯的端口。 2.通过软件扫描方法获取键盘输入的 6 位密码。 3.将输入的密码与预置在单片机 Flash ROM 中的密码 “980417” 进行比较。 4.若密码正确,按下确认键后点亮 LED 灯;否则 LED 灯不亮。 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 编程实现 - 初始化部分 #include <reg51.h> #define KEY_PORT P1 #define LED_PORT P2 // 预置密码unsigned char password[] = {9, 8, 0, 4, 1, 7}; // 输入密码数组unsigned char input_password[6]; // 记录输入密码的位置 unsigned char input_index = 0; void init() {     // 初始化端口等操作     // ...} 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 编程实现 - 键盘扫描部分 unsigned char key_scan() {     // 行列矩阵式键盘扫描及键值获取     unsigned char row, col;     KEY_PORT = 0x0F;  // 高4位送低电平     if ((KEY_PORT & 0x0F) != 0x0F) { // 有键按下         delay(10); // 消抖         if ((KEY_PORT & 0x0F) != 0x0F) {             row = KEY_PORT & 0x0F;             KEY_PORT = 0xF0;             col = KEY_PORT & 0xF0;             return get_key_value(row, col); // 获取键值函数         }     }     return 0xFF; // 无键按下} 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 编程实现 - 密码记录部分 void record_password() {     unsigned char key = key_scan();     if (key != 0xFF && input_index < 6) {         input_password[input_index++] = key;     }} 编程实现 - 密码验证部分 bit check_password() {     unsigned char i;     for (i = 0; i < 6; i++) {         if (input_password[i] != password[i]) {             return 0; // 密码错误         }     }     return 1; // 密码正确} 任务二 制作行列矩阵式键盘电子密码锁- 知识准备 编程实现 - 键盘扫描部分 void main() {     init();     while (1) {         record_password();         if (input_index == 6 && key_scan() == CONFIRM_KEY) { // 确认键按下             if (check_password()) {                 LED_PORT = 0x01; // 点亮LED             } else {                 LED_PORT = 0x00; // 熄灭LED             }             input_index = 0; // 重置输入位置         }     }} 随堂检测1 行列矩阵式键盘的软件扫描方法第一步是什么? 答案:从 P1 口的高 4 位送出低电平,然后读取 P1 口数据,若送出去的数据与读取的数据一致,表示没有键被按下,若不一致则表示有键被按下。 C51 函数调用时,实参和形参有什么要求? 答案:实参与形参顺序对应,个数相同,类型相同。 随堂检测2 如果被调用函数的定义在主调用函数之后,应该怎么做? 答案:需要在调用之前 (一般在程序头部) 对函数进行声明。 在行列矩阵式键盘中,使用 P0 口做输入端口时需要注意什么? 答案:必须外接上拉电阻。 随堂检测3 简述行列矩阵式键盘的工作原理。 答案:行列矩阵式键盘的 I/O 口线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线被短接。判断是否有键被按下的方法是从 P1 口的高 4 位送出低电平,然后读取 P1 口数据,若送出去的数据与读取的数据一致,表示没有键被按下,若不一致则表示有键被按下。若有键被按下,然后逐列扫描,从 P1 高 4 位逐列送出低电平,然后逐行读取 P1 口低 4 位数据,若某一行为低电平,则表示该行某一个键被按下,此时读取 P1 口对应的数据,就可以获得键盘的键值。 1 分组讨论,讨论如何提高行列矩阵式键盘电子密码锁的安全性。分析在编程过程中可能遇到的问题及解决办法。 1. 知识准备 任务二 制作行列矩阵式键盘电子密码锁 (1) 2. C51 函数 概述 函数的定义 函数调用 函数声明 行列矩阵式键盘 行列矩阵式键盘软件扫描方法 初始化部分 键盘扫描部分 密码记录部分 密码验证部分 主函数部分 3. 编程实现 感谢观看 25 $$

资源预览图

任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
1
任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
2
任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
3
任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
4
任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
5
任务二 制作行列矩阵式键盘电子密码锁 (1)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。