一、系统功能
在STM32主控系统中,我们实现了一个4×4的键盘矩阵界面,用于学生学号的便捷输入。用户只需按下对应的数字键,LCD1602液晶显示屏便会即时显示输入的数值。一旦用户连续输入了8位数字,通过按下“确认”键,输入的学号将被锁定在屏幕上,方便后续的操作和确认。除此之外,系统还融入了一个实用的“计时”功能。当用户按下“计时”按钮时,系统会迅速捕获当前的时间信息,并在LCD1602屏幕上显示出来,为用户提供即时的时间参考。当然,考虑到用户可能需要重新输入学号,我们也特别设计了一个“删除”按钮。用户只需轻按此按钮,屏幕上的当前学号便会被清空,为用户再次通过4×4键盘矩阵输入新的学号提供了方便。整个系统不仅提供了流畅的数字输入和确认功能,还具备时间显示和学号重置的便捷性,为用户带来了极大的便利。
二、系统设计原理
矩阵键盘是一种基于行列交叉检测原理的输入设备,它利用多行多列的按键布局,每个按键位于行与列的交叉点上。在初始状态下,所有的行线和列线都维持在高电平。当用户按下某个按键时,该按键会连接其所在的行和列,导致该行的电平降低,而对应列的电平升高。
矩阵键盘的扫描过程大致如下:
初始化:首先,系统将所有行线设置为高电平,并将所有列线配置为输入模式,以便监测电平变化。
行扫描:随后,系统开始逐行扫描,每次将一行设置为低电平,而其他行保持高电平。
列检测:在某一行被设置为低电平的同时,系统会检查所有列线的电平状态。如果检测到某个列线从高电平变为低电平,则表示该行与该列交叉点上的按键被按下。
记录信息:一旦检测到按键按下,系统会记录下该行和列的信息,并将该行重新设置为高电平,以便进行下一行的扫描。
重复扫描:这个过程会重复进行,直到所有行都被扫描过。
按键识别:通过分析哪些行和列被激活,系统可以确定具体是哪个按键被按下,并将其转换为相应的按键代码,供系统进一步处理。
DS1302实时时钟模块的工作原理基于其时钟计数和数据存储功能。该模块通过外接晶振产生稳定的时钟脉冲信号,这些信号经过内部电路的分频处理,形成不同频率的计数信号,用于实时更新时钟/日历寄存器的值。
在数据存储方面,DS1302内部集成了RAM,用于存储当前的年、月、日、时、分、秒等时间信息。通过一套复杂的控制逻辑,DS1302能够实现对这些数据的读写操作,确保时间的准确记录和读取。
简而言之,DS1302实时时钟模块通过外接晶振产生稳定的时钟信号,并经过分频和计数处理来更新时钟/日历信息,然后将这些信息存储在内部RAM中,为用户提供可靠的实时时间服务。
数码管是一种常用的电子显示器件,它通过内部的LED(发光二极管)阵列来显示数字或字符。这些LED按照特定的模式排列,每个LED段代表数字或字符的特定部分(如a、b、c、d、e、f、g)。数码管有两种常见的连接方式:共阴极和共阳极,这两种方式决定了LED的点亮方式。
为了显示特定的数字或字符,数码管的每个LED段(a至g)都可以被单独控制。例如,要显示数字“2”,控制系统会激活a、b、c、d、e这五个LED段,并关闭f和g段。通过精确控制这些LED段的亮灭组合,数码管能够清晰地显示从0到9的数字以及某些特定的字符或符号。这种灵活的控制方式使得数码管在多种电子设备中得到了广泛应用。
三、系统硬件设计
四、系统软件设计
//时间显示 if(time==1){ for(j=0;j<8;j++){ GPIOB->ODR=0x0001</选择哪个数码管显示 switch(j){ case 0:GPIOA->ODR=number[day/10];break; case 1:GPIOA->ODR=number2[day%10];break; case 2:GPIOA->ODR=number[shi/10];break; case 3:GPIOA->ODR=number2[shi%10];break; case 4:GPIOA->ODR=number[fen/10];break; case 5:GPIOA->ODR=number2[fen%10];break; case 6:GPIOA->ODR=number[miao/10];break; case 7:GPIOA->ODR=number[miao%10];break; } HAL_Delay(1); } } else{//显示数码管 Numbertwo=Number; for(j=0;jGPIOB->ODR=(0x0080>>(8-show_set))>>j;//选择哪个数码管显示 GPIOA->ODR=number[Numbertwo%10];//数码管引脚 Numbertwo=Numbertwo/10; HAL_Delay(1); } }
五、结果展示