电子跑表 课程设计.doc_第1页
电子跑表 课程设计.doc_第2页
电子跑表 课程设计.doc_第3页
电子跑表 课程设计.doc_第4页
电子跑表 课程设计.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 书系别 专业 班级 题目 电子跑表 教师 学生 年 月 号 一、 设计任务:1.电子表,具有十分、分、十秒和秒的计时功能,并可以在数码管上显示。2电子表具有启动键、停止键、复位键,而且可以随时通过键盘进行各位时间的设置。二、 设计原理:本程序的主要设计原理是用主程序完成键盘按键的扫描,实现计时结果的数码管显示,实现秒与分之间的转换。通过判断键盘按键调用相应功能程序段以实现相应功能,即实现了启动、暂停、复位功能,以及通过键盘进行十分、分、十秒、秒时间的手动设置功能。1.8254的初始化字 由此,本设计中的8254的初始化为:mov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式3 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,00h ;18432分频 out dx,al mov al,54h out dx,al2.8255的初始化字由此,本设计中的8255的初始化为:mov dx,my8255_mode ;初始化8255工作方式 mov al,81h ;方式0,a口、b口输出,c口低4位输入 out dx,al三、 电子表软件流程图1.主程序流程图开 始程 序 初 始 化判断小键盘是否有键按下 n y若按键值为8、9、0a、0b、0c、0d、0e、0f,则要转至时间设置处理程序若按键值为1,则要转至stopkeytag处理程序若按键值为2,则要转至clearkeytag处理程序若按键值为3,则要转至startisruning处理程序 pc机上面是不是有键按下调 用 子 程 序 n y返回dos结 束2.电子表处理程序开 始sec秒加1sec秒是否到10? n ysec秒清零,tensec十秒加1tensec十秒是否到6? n ytensec十秒清零,mint个位分加1mint个位分是否到10? n ymint个位分清零,tenmint十位分加1tenmint十位分到6? n ytenmint十位秒分清零调用led动态显示程序结 束四、 电子表硬件接线图abcde 键 盘f 及 数g 码 管dp 显 示 单 元x1x2x3x4y1y2y3y4d7 pb0d6 pb1d5 pb2d4 pb3d3 pb4d2 pb5d1 pb6d0 8255 pb7 单 元a1 pa0a0 pa1 pa2wr pa3rdcs pc0 pc1pc2pc3 xd7 xd6 xd5 xd4 xd3 xd2 xd1 xd0系 xa3 xa2 xiow xior ioy0 ioy1 intr clk统 d7d6d5d4d3d2 8254d1 单 元d0a1a2wrrdcsout0clk0 总 线 五电子表软件代码;*根据check配置信息修改下列符号值*ioy0 equ 0e000h ;片选ioy0对应的端口始地址ioy1 equ 0e040h;*my8255_a equ ioy0+00h*4 ;8255的a口地址my8255_b equ ioy0+01h*4 ;8255的b口地址my8255_c equ ioy0+02h*4 ;8255的c口地址my8255_mode equ ioy0+03h*4 ;8255的控制寄存器地址my8254_count0 equ ioy1+00h*4 ;8254计数器0端口地址my8254_count1 equ ioy1+01h*4 ;8254计数器1端口地址my8254_count2 equ ioy1+02h*4 ;8254计数器2端口地址my8254_mode equ ioy1+03h*4 ;8254控制寄存器端口地址stack1 segment stack dw 256 dup(?)stack1 endsdata segmentdtable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,77h,7ch,39h,5eh,79h,71h ;键值表,0f对应的7段数码管的段位值timetable db 0,0,0,0startkey db 3 ;启动键stopkey db 1 ;停止键clearkey db 2 ;清0键settmaddkey db 8 ;设置十位分钟加setmaddkey db 9 ;设置个位分钟加settsaddkey db 0ah ;设置十位秒加setsaddkey db 0bh ;设置个位秒加settmsubkey db 0ch ;设置十位分钟减setmsubkey db 0dh ;设置个位分钟减settssubkey db 0eh ;设置十位秒减setssubkey db 0fh ;设置个位秒减status db 0 ;8254out端口状态键isruning db 0 wthousand db 0wsec db 0wmsec db 0tensec db 0sec db 0mint db 0tenmint db 0data ends code segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov es,ax mov dx,my8254_mode ;初始化8254工作方式 mov al,36h ;计数器0,方式3 out dx,al mov dx,my8254_count0 ;装入计数初值 mov al,00h ;18432分频 out dx,al mov al,54h out dx,al mov dx,my8255_mode ;初始化8255工作方式 mov al,81h ;方式0,a口、b口输出,c口低4位输入 out dx,albegin: call dis ;显示刷新 call clear ;清屏 call ccscan ;扫描按键 jz nokeydown ;有键按下则跳置getkey1 jmp getkey1 nokeydown: mov ah,1 ;判断pc键盘是否有按键按下 int 16h jz keyscanend ;无按键则跳回继续循环,有则退出 jmp quit keyscanend: cmp isruning,1 jne begin timestart:mov al,11100010b ;设置回读命令mov dx,my8254_modeout dx,al mov dx,my8254_count0 ;读0端口状态控制字in al,dxcmp status,1jne notstatustest al,80hjz changewmsecjmp beginnotstatus:test al,80hjnz changewmsecjmp beginchangewmsec:test al,80hjz changestatusmov status,1jmp haschangechangestatus:mov status,0haschange:inc wmseccmp wmsec,0ah ;百分秒到10,十分秒加1 jne changesecmov wmsec,0inc wseccmp wsec,0ah ;十分秒秒到10,个位秒加1jne changesecmov wsec,0inc seccmp sec,0ah ;个位秒秒到10,十位秒加1jne changesecmov sec,0inc tenseccmp tensec,06h ;十位秒到6,清零jne changesecmov tensec,0inc mintcmp mint,0ah ;分钟个位到10,十位加1jnz changesecmov mint,0inc tenmintcmp tenmint,06h ;十位分到6,清零jne changesecmov tenmint,0changesec:mov si,0;存储时间mov al,tenmint;十位分mov timetablesi,alinc simov al,mint;个位分mov timetablesi,alinc simov al,tensec;十位秒mov timetablesi,alinc simov al,sec;个位秒mov timetablesi,alinc simov timetablesi,0inc sijmp begin quit: mov ax,4c00h ;返回到dos int 21hgetkey1:call dis ;显示刷新 call dally call dally call clear ;清屏 call ccscan ;再次扫描按键 jnz getkey2 ;有键按下则跳置getkey2 jmp begin ;否则跳回开始继续循环getkey2:mov ch,0feh mov cl,00h ;设置当前检测的是第几列colum: mov al,ch ;选取一列,将x1x4中一个置0 mov dx,my8255_a out dx,al mov dx,my8255_c ;读y1y4,用于判断是哪一行按键闭合 in al,dxl1: test al,01h ;是否为第1行 jnz l2 ;不是则继续判断 mov al,00h ;设置第1行第1列的对应的键值 jmp kcodel2: test al,02h ;是否为第2行 jnz l3 ;不是则继续判断 mov al,04h ;设置第2行第1列的对应的键值 jmp kcodel3: test al,04h ;是否为第3行 jnz l4 ;不是则继续判断 mov al,08h ;设置第3行第1列的对应的键值 jmp kcodel4: test al,08h ;是否为第4行 jnz kk ;不是则继续判断 mov al,0ch ;设置第4行第1列的对应的键值mynext: push axkon: call dis ;显示刷新 call clear ;清屏 call ccscan ;扫描按键,判断按键是否弹起 jnz kon ;未弹起则继续循环等待弹起 pop axkcode: add al,cl ;将第1列的值加上当前列数,确定按键值 cmp al,startkey ; 判断是否为开始键 jne stopkeytag cmp isruning,0 jne startisruning mov isruning,1 startisruning: jmp timestart stopkeytag: ; 判断是否为停止键 cmp al,stopkey jne clearkeytag mov isruning,0 jmp startisruningclearkeytag: ; 判断是否为清零键 cmp al,clearkey jnz settmaddtag call clearclock jmp kerrkk:jmp nextsettmaddtag: ; 判断是否为十位分钟加设置键 cmp al,settmaddkey jnz setmaddtag call settmadd jmp kerrsetmaddtag: ; 判断是否为个位分钟加设置键 cmp al,setmaddkey jnz settsaddtag call setmadd jmp kerrsettsaddtag: ; 判断是否为十位秒加设置键 cmp al,settsaddkey jnz setsaddtag call settsadd jmp kerrsetsaddtag: ; 判断是否为个位秒加设置键 cmp al,setsaddkey jnz settmsubtag call setsadd jmp kerrsettmsubtag: ; 判断是否为十位分钟减设置键 cmp al,settmsubkey jnz setmsubtag call settmsub jmp kerrsetmsubtag: ; 判断是否为个位分钟减设置键 cmp al,setmsubkey jnz settssubtag call setmsub jmp kerrsettssubtag: ; 判断是否为十位秒减设置键 cmp al,setssubkey jnz setssubtag call settssub jmp kerrsetssubtag: ; 判断是否为个位秒减设置键 cmp al,setssubkey jnz kerr call setssub next: inc cl ;当前检测的列数递增 mov al,ch test al,08h ;检测是否扫描到第4列 jz kerr ;是则跳回到开始处 rol al,1 ;没检测到第4列则准备检测下一列 mov ch,al jmp columkerr: jmp beginccscan proc near ;扫描是否有按键闭合子程序 mov al,1h mov dx,my8255_a ;将4列全选通,x1x4置0 out dx,al mov dx,my8255_c in al,dx ;读y1y4 not al and al,0fh ;取出y1y4的反值 retccscan endpclear proc near ;清除数码管显示子程序 mov dx,my8255_b ;段位置0即可清除数码管显示 mov al,00h out dx,al retclear endpdis proc near ;显示键值子程序 push ax ;以缓冲区存放的键值为键值表偏移找到键值并显示 mov si,offset timetable mov cx,si add cx,1 add si,5 mov dl,0dfh mov al,dlagain: push dx mov dx,my8255_a out dx,al ;设置x1x4,选通一个数码管 mov al,si ;取出缓冲区中存放键值 mov bx,offset dtable and ax,00ffh add bx,ax mov bl,bx cmp si,cx jne comer or bl,80h comer: mov al,bl ;将键值作为偏移和键值基地址相加得到相应的键值 mov dx,my8255_b out dx,al ;写入数码管adp call dally dec si ;取下一个键值 pop dx mov al,dl test al,01h ;判断是否显示完? jz out1 ;显示完,返回 ror al,1 mov dl,al jmp again ;未显示完,跳回继续out1: pop ax retdis endpdally proc near ;软件延时子程序 push cx mov cx,00ffhd1: mov ax,00ffhd2: dec ax jnz d2 loop d1 pop cx retdally endp;设置十位分钟加子程序settmadd proc nearadd tenmint,1mov al,tenmintmov si,0mov timetablesi,alretsettmadd endp;设置个位分钟加子程序setmadd proc nearadd mint,1mov al,mintmov si,1mov timetablesi,alretsetmadd endp;设置十位秒加子程序settsadd proc nearadd tensec,1mov al,tensecmov si,2mov timetablesi,alretsettsadd endp;设置个位秒加子程序setsadd proc nearadd sec,1mov al,secmov si,3mov timetablesi,alretsetsadd endp;设置十位分钟减子程序settmsub proc nearsub tenmint,1mov al,tenmintmov si,0mov timetablesi,alretsettmsub endp;设置个位分钟减子程序setmsub proc nearsub mint,1mov al,mintmov si,1mov timetablesi,alretsetmsub endp;设置十位秒减子程序settssub proc nearsub tensec,1mov al,tensecmov si,2mov timetablesi,alretsettssub endp;设置个位秒减子程序setssub proc nearsub sec,1mov al,secmov si,3mov timetablesi,alretsetssub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论