APP下载

基于单片机的线上教学时间显示系统设计

2023-06-09何小映

电子制作 2023年8期
关键词:进度条矩阵式流程图

何小映

(西安航空学院 电子工程学院,陕西西安,710077)

0 引言

2019 年底,爆发了新冠疫情,受此影响,疫情地区的学校授课转为线上[1],与线下授课不同,线上授课学生和教师大部分分散在不同地点,不像在学校,大家集中在一起上课,有计时系统计时,到时自动打铃[2]。网课期间,师生只能自己记下学校作息时间,自己通过看手机等计时工具,自己提醒自己造成一定的困扰。针对这一问题,设计了作息时间显示系统。

1 系统整体结构

该系统包括时钟模块、矩阵式键盘、单片机、液晶显示器,系统的整体结构如图1所示。

图1 系统整体结构图

时间由时钟模块提供,矩阵式键盘用来输入时间和日期、星期的初始值,作息时间将会在液晶显示器LCD12864B 上相应的位置进行显示。

2 系统硬件部分

■2.1 时钟模块

时钟模块主要由DS1302、晶振组成、纽扣电池,DS1302 是美国DALLAS 公司的产品,具有涓细电流充电能力,采用串行方式传输数据。晶振频率为32.768kHz,是一种高性能、低功耗、带RAM的实时时钟[3]。具有年、月、日、星期、时、分、秒寄存器,具有闰年补偿功能,工作电压为2.0V ~5.5V[4]。采用三线接口与单片机进行通信,单片机可以给它不同的寄存器写入数据,也可以从它不同的寄存器读取数据,其接口如图2所示。

图2 DS1302 接口

其中,VCC1 为后备电源,等于系统电源5V,VCC2 为主电源,等于3.6V,当系统上电时,因为Vcc1>Vcc2,由Vcc1 供电,当系统断电时,由VCC2 供电[5],DS1302 继续计时。/RST 是复位/片选线,SCLK 为时钟输入端,I/O 为双向串行数据输入输出端。

■2.2 矩阵式键盘

DS1302的矫正日期、星期、时间值的输入采用矩阵式键盘实现[6],由4×4 键盘构成[7],电路如图3所示。

图3 矩阵式键盘

行线连接到P2.0~P2.3,列线连接到P2.4~P2.7,一共有0~9 共10个数字键,另有四个功能键,分别表示左移、右移、确认、退出,括号中为该键的键值(16 进制)。按键的分析采用行列反转法,P2口先输出0xF0,再读取P2口的值,读取的值保留高四位,然后P2口输出0X0F,再次读取P2口的值并保留低四位,所得结果与前次保留的结果进行或运算,就能得出每个键分别按下时的键值,再根据键值就可以判断该键的类型,如果是数字键,则此值即为要设置的时间参数的高位或低位(由程序进行判断)。如果是功能键,就执行相应的功能。

■2.3 液晶显示器

显示器采用LCD12864B, 该显示器的控制器为ST7920,可以显示常用汉字,数字,英文字符及图形,与单片机的接口电路如图4所示[8]。

图4 LCD12864B 与单片机接口

图中GND为电源负极,接地。VCC 为电源正极,接+5V,VO 为对比度调节端,接电位器。RS=1 时,表示传输的是数据,RS=0 时,表示传输的是控制指令。R/W=1时,单片机从LCD12864 读出数据,R/W=0 时,单片机写入数据到LCD12864B,E 为使能端,D0~D7 为8位数据,PSB=1 时,采用并行模式,PSB=0 时,采用串行模式,/RESET 为复位端,低电平有效。Vout 为模块驱动电压输出端,A 为背光电源正极,接+5V,K 为背光电源负极,接地。

■2.4 改值请求电路

当显示的日期时间与当前日期时间不一致时,需要进行矫正,矫正请求方式采用单片机外部中断0,接口电路如图5所示。

图5 时间日期矫正请求

在主程序中,设置EA=1,允许总中断。EX0=1,允许外部中断0 中断,当需要矫正日期时间时,按图5 中的按键,程序进入外部中断0 中断函数,进行初始值设置。

硬件整体电路图如图6所示。

图6

3 系统软件部分

软件包括主函数和中断处理函数及其他函数。采用C51语言编写。

■3.1 主函数程序设计

主函数程序流程图如图7所示。

图7 主函数程序流程图

图中xjc 表示节次,因为每节课的时间区间是固定的,比如第一节课是08:30-09:15,如果当前时间是08:40, 则xjc=1。 如 果xjc!=0,表示当前为上课时间,则显示该节课所处的节次、起始时间、进度条、截止时间。

上课期间,使用进度条可以显示当前上课时间进度,此时需要将显示模式切换为扩展模式,用来显示图形,进度条显示在第四行中间位置,占6个字节位置,一行48个点,共16 行,当给某点送“1”时点亮该点,送“0”时该点熄灭,通过点亮、熄灭某些点就能显示进度条。一节课45 分钟,一行多出3个点,所以第一分钟每行点亮最左边3个点,后面每1 分钟每行就向右多点亮一个点,进度条显示程序流程如图8所示。

图8 进度条显示流程图

图8中,thl 为每行需点亮的点数,计算方法是:当前时间的小时和分钟折合成分钟减去该节课的起始时间的小时和分钟折合成的分钟数再加3,例如第一节课时间是08:30-09:15,如果当前时间是09:10,则thl的值如公式(1)所示。

qcthl 为上次每行需点亮的点数,初始值为0,则thl>qcthl 成立,执行qcthl=thl 来控制进度条更新的频率,因为thl 每分钟更新一次,在一分钟之内qcthl=thl 始终成立,所以为进度条每分钟更新一次,另外,qcthl的值需要在休息时间程序段中再次清0,否则一节课结束,qcthl为最大值,后面上课时间的进度条不会显示。jsjdt(thl)函数计算进度条数组jdt[ ]的值,jdt[ ]数组共7个数,此处jdt[0]=0,jdt[1]=jdt[2]=jdt[3]=jdt[4]=jdt[5]=0xFF;jdt[6]=0xE0,共43个“1”,对应一行共43个点点亮,第一个值jdt[0]=0是因为进度条在08:30 后面显示,而显示图形时,1个列号包含两个字节,08:30 是5个字节,进度条从第二个列号开始显示,故第一字节被起始时间08:30的最后一个数字“0”占据,所以该字节所在的八个点为0,否则起始时间分值的个位会被占据无法正常显示。dis(48,2,7,16,jdt)表示将jdt[]数组中的点阵数据从第48 行,第2 列号开始显示出来,共16 行,7个字节数据,实际每行显示点阵的为6个字节,如前所述。

如果xjc=0,则当前为休息时间,先使qcthl=0(如前述),然后清屏第三四行内容,再在第四行显示“休息到XX:XX”,因为休息时间至少十分钟,所以由变量控制仅在休息时间的第一分钟清屏三、四行。

■3.2 矩阵式键盘处理程序

矩阵式键盘用来设置初始值,当日期、星期、时间不正确时需要进行矫正,此时按图5 中的按键,程序进入外部中断0 服务程序,该程序的流程图如图9所示。

图9 中断0 服务程序流程图

图9流程图中,sethang 确定要设置的两位数字的行地址,setlie 确定要设置的两位数字的列地址,12864B 一共有四行,第一行到第四行的地址分别为:0x80,0x90,0x88,0x98。本系统中要设置的参数位于第一二行,其中年、月、日、星期在第一行设置,sethang=0x80,对应的setlie 分别为:0x00,0x02,0x04,0x06,时、分、秒在第二行显示,sethang=0x90,对应的setlie=0x02,0x04,0x06,gbwz 变量表示七个要设置的变量,其值为0~6,分别对应年、月、日、星期、时、分、秒。szjax 变量是数字键按下标志位,当数字键按下时其值为1,certn 是确认键按下标志,只有先按下数字键,再按确认键时,certn的值才变化。由流程图可知,如果第一次就按功能键,不会影响闪动位置处的值。

4 结论

图10为第一节课前、课中、课后的时间信息显示。

从图10可以看出,该系统能够显示日期,星期,时间,当当前时间为上课时间,则显示当前节次及该节课起始时间、进度条、截止时间,如果当前为休息时间,则显示休息到下节课上课时间,满足了网课期间作息时间的提示要求。

图10 作息时间显示实例

猜你喜欢

进度条矩阵式流程图
“进度条”思维
电除尘矩阵式电磁振打器控制系统改进优化
为什么进度条到99%就不动了
为什么进度条到99%就不动了
为什么进度条到99%就不动了
专利申请审批流程图
专利申请审批流程图
基于Quasi-Z源矩阵式变换器电压传输比的研究
宁海县村级权力清单36条
安森美半导体最新矩阵式全LED前照灯方案