收藏 分销(赏)

多功能计时器 的设计.doc

上传人:xrp****65 文档编号:8993388 上传时间:2025-03-10 格式:DOC 页数:21 大小:295.50KB
下载 相关 举报
多功能计时器 的设计.doc_第1页
第1页 / 共21页
多功能计时器 的设计.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述
一.设计要求: (1) 任务 设计并制作一个可以完成足球、篮球比赛及其他用处途的多用计时装置。 (2) 设计要求 1) 基本要求 ① LED数码管显示计时结果; ② 适用于足球、篮球各种倒计时要求; ③ 根据比赛要求设置相应的按键; ④ 电源由外部提供,+5V; ⑤ 计时时间到报警。 2)发挥要求 ① 改用LCD显示; ② 增加其他计时功能; ③ 由6V电池供电(稳压电源提供); ④ 时间到乐曲报警; ⑤ 整体电路效率>60%; ⑥ 计时精度1s/h。 二.系统实现: 本系统由软件与硬件仿真电路两部分组成,通过keil与protues联调实现足球、篮球计时的各种要求。系统由LCD1602显示,七个按键控制开始暂停选择等功能。 2.1硬件仿真电路图 2.2系统设计程序总流程图 开始 初始化 篮球赛? 足球赛? 篮球赛计时界面 开始? Y 功能选择界面 HOU=1? LCD显示上半场 LCD显示下半场 开始? 计时并显示 计时并显示 N Y Y 24秒复位? EXT=24 暂停? 开始? 24秒复位? EXT=24 时间到? HOU+1 时间到? HOU+1 暂停 开始? 暂停 开始? Y Y Y Y 暂停? 开始? Y Y Y Y Y Y Y Y N N N N N N N N N N N N N N 三.主要硬件部分设计与选型 3.1 LCD1602显示器 为了获得更好的效果本设计并没有采用常见的LED,而是采用了型号为LM016L的 LCD。LCD有LED数码显示更好的更的直观效果,也更加经久耐用。液晶显示模块体积小功耗低、显示内容丰富,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件之一了。本LCD是2行16列液晶 可显示2行16列英文字符,有8位数据总线D0-D7,RS,R/W,EN三个控制端口(共14线),工作电压为5V。没背光,和常用的1602B功能和引脚一样(除了调背光的二个线脚). 该模块也可以只用D4-D7作为四位数据分两次传送。这样的话可以节省MCU的I/O口资源。 引脚说明: VDD:电源正极,4.5-5.5V,通常使用5V电压。 VL:LCD对比度调节端,电压调节范围为0-5V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地。 RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平。 R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据。 E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。 D0-D7:8位数据总线,三态双向。如果MCU的I/O口资源紧张的话,该模块也可以只使用4位数据线D4-D7接口传送数据。BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右。 BLK: LED背光地端。 1602液晶模块内部的控制器共有11条控制指令,如表3.2所示: 序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 1 清显示 0 0 0 0 0 0 0 0 0 1 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 置输入模式 0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制 0 0 0 0 0 0 1 D C B 5 光标或字符移位 0 0 0 0 0 1 S/C R/L * * 6 置功能 0 0 0 0 1 DL N F * * 7 置字符发生存贮器地址 0 0 0 1 字符发生存贮器地址 8 置数据存贮器地址 0 0 1 显示数据存贮器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或DDRAM) 1 0 要写的数据内容 11 从CGRAM或DDRAM读数 1 1 读出的数据内容 表3.2:控制命令表 1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。 与HD44780相兼容的芯片时序表如下: 读状态 输入 RS=L,R/W=H,E=H 输出 D0—D7=状态字 写指令 输入 RS=L,R/W=L,D0—D7=指令码,E=高脉冲 输出 无 读数据 输入 RS=H,R/W=H,E=H 输出 D0—D7=数据 写数据 输入 RS=H,R/W=L,D0—D7=数据,E=高脉冲 输出 无 表3.3:基本操作时序表 对于温度显示模块的编写也要了解其时序图,通过时序图,编写相关的驱动程序,实现其相关读写操作,此外,要想要让其显示正确的命令,还要注意其内部相关控制指令。在本设计中主要用的是写入指令的子程序。 LCD1602的读写时序图 四、主要功能模块程序设计 这里只介绍LCD1602显示程序 本系统使用LCD1602实现显示,只要参照LCD1602的使用手册进行初始化和程序编写就可以显示,即在程序编写中添加LCD1602的驱动程序。这里的驱动程序主要包括:初始化函数、设置显示坐标、写字符函数及写字符串函数。LCD1602的部分读写控制时序程序如下所示: (1) 写命令函数:向寄存器写入控制字 参数:A--控制字 W_CMD: ACALL WAIT; //侧忙碌状态 CLR RW; //写命令时,R/W为低电平 CLR RS; //写入指令。RS为低电平 SETB E; //置高使能线 . MOV LCD, A; // 接收命令字并送到数据总线上 CLR E: //在使能线的下降沿写入数据 RET (2)写数据函数:向寄存器写入数据 参数:A--待要显示数据 W_DATA: ACALL WAIT //侧忙碌状态 SETB RS //写数据时,RS为高电平 CLR RW //写入数据。RW为低电平 SETB E //置高使能线 MOV LCD, A // 接收数据并送到数据总线上 CLR E //在使能线的下降沿写入数据 RET 五、功能演示 1、开始界面,此时通过按键选择功能,有篮球赛计时和足球赛计时 2、选择篮球赛后出现下面界面,篮球赛是倒计时。Period:01表示第一小节,12:00表示本节剩余分秒时间,10表示24秒计时时间 3、按下开始按键。开始倒计时,计时时可以随时暂停,计时和暂停过程中都可以进行24秒复位。 4、第一小节时间结束,时间停止,并且蜂鸣器发出报警声音 5、再按下开始按钮,则进行第二小节计时,第一行小节标志换为02 6、选择足球赛计时功能后显示下面界面,足球赛是正计时。第一行显示比赛是上半场还是下半场,第二行比赛进行的时间,由于足球赛具有伤停补时时间,而且时间不确定,所以设计extra:0x。比赛工程中可用按键extra+extra-进行调节。 7、按下开始键后开始计时。中间可以暂停开始 8、加时0分钟,45分钟时自动暂停。加时1分钟,46分钟时自动暂停。并报警 9、按开始键进行下半场计时。第一行显示Second half 六、程序实现 RS EQU P3.0 ;写入数据(1)或指令(0)选择端 RW EQU P3.1 ;读(1)写(0)控制 E EQU P3.2; ;使能 LCD EQU P2 ;LCD数据口 BF EQU P2.7 ;忙标志 BA_FO BIT 30H ;选择功能标志位,1为篮球赛,0为足球赛 EXT EQU 31H ;加时赛储存地址 HOU EQU 34H ;节数,上下半场储存地址 MIN EQU 35H ;分钟储存地址 SEC EQU 36H ;秒储存地址 COUNT EQU 3CB0H ;T0初值 COUNT1 EQU 20 ;20*50Ms=1S COUNT2 EQU 37H DATA_1 EQU 38H ;写数据数据首地址 CMD_1 EQU 39H ;写指令指令首地址 SECCOUN EQU 10H ;存放20的地址 LEDBUF EQU 40H ;显示数据(数字)首地址 LCDBUF EQU 4AH ;显示数据(字符)首地址 ORG 0000H LJMP MAIN ORG 000BH ;T0中断入口 LJMP STIME ;调用定时器T0中断服务子程序 MAIN: MOV SP,#60H ;装入固定点显示字母或符号 MOV LCDBUF+0,#0 MOV LCDBUF+1,#1 MOV LCDBUF+2,#2 MOV LCDBUF+3,#3 MOV LCDBUF+4,#4 MOV LCDBUF+5,#5 MOV LCDBUF+6,#6 MOV LCDBUF+7,#7 MOV LCDBUF+8,#8 MOV LCDBUF+9,#9 MOV LCDBUF+10,#10 MOV LCDBUF+11,#11 MOV LCDBUF+12,#12 MOV LCDBUF+13,#13 MOV LCDBUF+14,#14 MOV LCDBUF+15,#15 MOV P1,#0FFH ;P1口输出至高电平 SETB P3.5 ;蜂鸣器口 ;---------LCD1602初始化------------------- MOV A, #00000001B ;发送清屏操作指令; CALL W_CMD ;调写入指令子程序 MOV A, #00001100B ;发送显示开/关控制 ACALL W_CMD ;指令,无光标,无闪烁 MOV A, #00011100B ;发送光标移动指令 ACALL W_CMD ;光标和字一起移动,光标自动右移 MOV A, #00111100B ;发送功能设置指令 CALL W_CMD ;8位DB,双行,5x7字符 MOV A,HOU ;判断第几小节(上下半场 CJNE A,#01,LOP ;非01跳转lop判断hou为00还是别的 LOP:JNC DINGSHI ;进位标志为1说明HOU>1比赛小节结束,不显示功能选择界面 MOV HOU,#01 ;进位标志为0说明HOU<01,为00,比赛刚开始HOU=1并显示功能选择界面 ;---------LCD1602初始化结束--------------------- HUAN: MOV DATA_1,#LCDBUF MOV COUNT2,#16 ;显示字符数为16个 MOV CMD_1,#10000001B ; 显示从第一行第一个开始 MOV DPTR, #TAB1 ;装入查表地址, LCALL DISPLAYLCD ;调用显示子程序 MOV DATA_1,#LCDBUF MOV COUNT2,#16 MOV CMD_1,#11000001B MOV DPTR, #TAB2 ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 CE:JNB P1.0,BA ;功能选择判断,P1.0按下为低电平,选择篮球赛计时 JNB P1.1,FO ;功能选择判断,P1.1按下为低电平,选择足球计时 SJMP CE BA:SETB BA_FO ;选择的篮球赛标志位置1 SJMP DINGSHI FO:CLR BA_FO ;选择的足球赛标志位置0 ;---------T0定时初始化-------------------------- DINGSHI:MOV A, #00000001B ;清屏 CALL W_CMD MOV LEDBUF+5,#10 MOV TMOD,#01H ;设置T0定时,模式1 MOV TH0,#HIGH(COUNT) ;装入高4位初始值 MOV TL0,#LOW(COUNT) ;装入低4位初始值 SETB EA ;开中断 SETB ET0 ;开T0中断允许位,此时没有启动中断, MOV SECCOUN,#COUNT1 ;把数值20放到10H单元中 ;---------T0定时初始化结束------------------------ JNB BA_FO,FOOT ;查看标志位,选择功能显示 BASKE: ;篮球赛计时显示 MOV MIN,#12 ;初始化定时时间,分 MOV SEC,#00 ;秒 MOV EXT,#24 ;24秒倒计时 MOV DATA_1,#LCDBUF ;第一行显示Period:(小节数) MOV COUNT2,#7 MOV CMD_1,#10000001B MOV DPTR, #TAB5 ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 JMP2DIS: JB P1.4,JMP2DIS1 ;按键p1.4则进行24秒复位 JNB P1.4,$ MOV EXT,#24 JMP2DIS1:LCALL MOVBUF1 ;数据处理 MOV DATA_1,#LEDBUF ;第一行第八九个空显示节数 MOV COUNT2,#2 MOV CMD_1,#10001000B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 MOV DATA_1,#LEDBUF+3 ;第二行从第一个空开始显示分秒数 MOV COUNT2,#5 MOV CMD_1,#11000001B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 MOV DATA_1,#LEDBUF+8 ;第二行第十十一个空显示24秒倒计时 MOV COUNT2,#2 MOV CMD_1,#11001010B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 JB TR0,JMP2DIS ;计时已开始则返回循环显示 JB P1.3,$ ;计时开始按键等待 LCALL BUZZER SETB TR0 ;启动计时 LJMP JMP2DIS FOOT: MOV MIN,#00 MOV SEC,#00 MOV EXT,#00 MOV A,HOU ;判断上下半场 CJNE A,#1,XIA MOV DATA_1,#LCDBUF ;是上半场则第一行显示First half MOV COUNT2,#10 MOV CMD_1,#10000001B MOV DPTR, #TAB6 ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 AJMP extra XIA: MOV DATA_1,#LCDBUF ;是下半场则第一行显示Second half MOV COUNT2,#11 MOV CMD_1,#10000001B MOV DPTR, #TAB7 ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 extra:MOV DATA_1,#LCDBUF ;第二行第八个空开始显示extra:(加时时间) MOV COUNT2,#6 MOV CMD_1,#11001000B MOV DPTR, #TAB8 ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 FOOT1: JB P1.7,JIAN ;加时时间设置,P1.6减1,P1.7加1 JNB P1.7,$ INC EXT JIAN:JB P1.6,FOOT2 JNB P1.6,$ DEC EXT FOOT2: LCALL MOVBUF1 ;数据处理 MOV DATA_1,#LEDBUF+3 ;显示分秒计时 MOV COUNT2,#5 MOV CMD_1,#11000001B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 MOV DATA_1,#LEDBUF+8 ;显示24秒计时 MOV COUNT2,#2 MOV CMD_1,#11001110B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 JB TR0,FOOT1 JB P1.3,$ ACALL BUZZER SETB TR0 ;启动计时 LJMP FOOT1 BUZZER: CLR P3.5 ;蜂鸣器子程序 LCALL T100MSD SETB P3.5 RET MOVBUF1: ;数据处理子程序 PUSH ACC MOV A,HOU MOV B,#10 DIV AB MOV LEDBUF,A MOV LEDBUF+1,B MOV A,MIN MOV B,#10 DIV AB MOV LEDBUF+3,A MOV LEDBUF+4,B MOV A,SEC MOV B,#10 DIV AB MOV LEDBUF+6,A MOV LEDBUF+7,B MOV A,EXT MOV B,#10 DIV AB MOV LEDBUF+8,A MOV LEDBUF+9,B POP ACC RET ;-------------定时器T0中断服务子程序---------- STIME: MOV TH0,#HIGH(COUNT) ;重新装入高4位初始值 MOV TL0,#LOW(COUNT) ;重新装入低4位初始值 DJNZ SECCOUN,TIMEEND3 ;判断是否够1秒(20*50us=1S) MOV SECCOUN,#COUNT1 ;重新装入20 PUSH ACC ;堆栈 JNB BA_FO,FOOTSEC SEC1CHA:MOV A,EXT DEC A MOV EXT,A CJNE A,#-1,SECCHA MOV EXT,#24 SECCHA: MOV A,SEC ;"秒"处理 DEC A MOV SEC,A CJNE A,#-1,TIMEEND2 ;判断是否够60秒 MOV SEC,#59 ;够60秒后,秒位清0 MINCHA: MOV A,MIN ;"分"处理 DEC A MOV MIN,A CJNE A,#-1,TIMEEND2 HOUCHA: MOV A,HOU INC A MOV HOU,A AJMP STOP0 ;节数有进位则表示一小节节数,暂停。 TIMEEND2:POP ACC TIMEEND3:JNB P1.2,STOP ;判断是否按下P1.2,按下则暂停 RETI FOOTSEC:INC SEC MOV A,SEC CJNE A,#60,TIMEEND1 ;判断是否够60秒 MOV SEC,#00 ;够60秒后,秒位清0 FOOTMIN:INC MIN MOV A,MIN CJNE A,#45,EXTR ;计时45+EXT分钟 MOV A,EXT CJNE A,#0,TIMEEND1 SJMP FOOTHOU EXTR: JC TIMEEND1 DEC EXT CJNE A,#0,FOOTHOU SJMP TIMEEND1 FOOTHOU:MOV A,HOU ;上半场结束,HOU加1, INC A MOV HOU,A LCALL MOVBUF1 ;显示当前时间,否则时间停留在上一个显示59秒,非00秒 MOV DATA_1,#LEDBUF+3 MOV COUNT2,#5 MOV CMD_1,#11000001B MOV DPTR, #TAB ;装入查表地址 LCALL DISPLAYLCD ;调用显示子程序 MOV MIN,#00 AJMP STOP0 TIMEEND1:POP ACC ;弹出堆栈 TIMEEND:JNB P1.2,STOP ;按下P1.2则暂停 RETI ;-------------计时停止子程序------------- STOP0: CLR TR0 LCALL BUZZER LCALL T500MSD LCALL BUZZER LCALL T500MSD LCALL BUZZER LCALL T500MSD STOP: LCALL BUZZER STOP1: JNB BA_FO,STOP2 ;足球赛,不执行下面程序 JB P1.4,STOP2 ;篮球赛复位24秒计时 MOV EXT,#24 STOP2: JB P1.3,STOP1 ;P1.3按下则暂停结束,开始计时 LCALL BUZZER RETI ;------------------LCD1602显示子程序------------------ DISPLAYLCD: MOV R0,DATA_1 ;显示首地址 MOV R1,COUNT2 MOV R2,CMD_1 ;发送第一行DDRAM地址设置指令 MOV A,R2 ACALL W_CMD LOOP1: MOV A, @R0 MOVC A, @A+DPTR ;查表 ACALL W_DATA ;调用LCD显示字子程序 INC R0 ;显示下一个字 JNB PSW.5,TG TG: DJNZ R1,LOOP1 CLR PSW.5 LOOP: MOV A, #00001100B ;发送显示开/关控制 ACALL W_CMD ;指令,无光标,无闪烁 LJMP EXIT ;跳出LCD1602显示子程序 WAIT: MOV LCD, #0FFH ;令P2作输入口使用 CLR RS SETB RW CLR E NOP SETB E JB BF, WAIT ;判断LCD忙标志 RET W_CMD: ;入口参数A ACALL WAIT MOV LCD, A CLR RS CLR RW SETB E NOP CLR E RET W_DATA: ;入口参数A ACALL WAIT MOV LCD, A SETB RS CLR RW SETB E NOP CLR E RET EXIT: RET ;------------------LCD1602显示子程序结束------------------ DELAY: MOV R6,#00H ;延时子程序 MOV R7,#00H DELAY1: NOP DJNZ R7,DELAY1 DJNZ R6,DELAY1 RET ;******************************** ;**********延时子程序************ ;******************************** T10MSD: SETB RS0 MOV R4, #12 TM:MOV R3, #128 TM6:DJNZ R3, TM6 DJNZ R4, TM CLR RS0 RET T100MSD: MOV R3, #200 D11:MOV R4, #125 D12:DJNZ R4, D12 DJNZ R3, D11 RET T500MSD: LCALL T100MSD LCALL T100MSD LCALL T100MSD LCALL T100MSD LCALL T100MSD NOP RET TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH TAB1:DB 77H,65H,6cH,63H,6fH,6dH,65H,20H,74H,6fH,20H,75H,73H,65H,20H,20H ;Welcome to use TAB2:DB 53H,65H,6cH,65H,63H,74H,20H,6dH,6fH,64H,65H,20H,20H,20H,20H,20H ;Select mode TAB5:DB 50H,65H,72H,69H,6fH,64H,3AH ;Period: TAB6:DB 46H,69H,72H,73H,74H,20H,68H,61H,6cH,66H ;First half TAB7:DB 53H,65H,63H,6fH,6eH,64H,20H,68H,61H,6cH,66H ;Second half TAB8:DB 65H,78H,74H,72H,61H,3AH ;extra: END
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服