秒表程序汇编语言.docx
- 文档编号:12184520
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:12
- 大小:16.39KB
秒表程序汇编语言.docx
《秒表程序汇编语言.docx》由会员分享,可在线阅读,更多相关《秒表程序汇编语言.docx(12页珍藏版)》请在冰豆网上搜索。
秒表程序汇编语言
;定义计时单元地址
HOUREQU30H;存放小时变量
MINEQU31H;存放分钟变量
SECEQU32H;存放秒钟变量
DEDAEQU33H;存放10ms计数值
;按键端口状况值
K1_NEQU34H;存放按键当前端口状况值
K1_PEQU35H;存放按键上次端口状况值
K1_CEQU37H;存放按键计数单元
XEQU36H;LCD地址变量
;按键引脚定义
K1EQUP3.3;按键1引脚定义
K2EQUP3.4;按键2引脚定义
;LCD引脚定义
RSEQUP3.5;LCDRS引脚定义
RWEQUP3.6;LCDRW引脚定义
EEQUP3.7;LCDRS引脚定义
ORG0000H;程序由地址0开始执行
JMPMAIN
ORG0BH;定时器0中断地址设置
JMPT0_INT
;―――――――――――――主程序――――――――――――――MAIN:
;开始
MOVSP,#60H;堆栈指针指向60H
CLRE;E=0,禁止读/写LCM
ACALLSET_LCD;调LCD控制子程序
ACALLINIT;初始化变量
MOVK1_P,#01H;按键上次端口设置1
ACALLINIT_TIMER;初始化定时器
ACALLMEU;调用工作菜单子程序
LOOP:
ACALLCONV;时间计数处理
ACALLLOOP1;调用清零键子程序
ACALLKEY;判断是否有键按下
JZLOOP;无键按下转LOOP
MOVK1_P,K1_N;交换数据
ACALLKEY0;调用按键功能子程序
JMPLOOP;跳LOOP处循环
;初始变量清零子程序
INIT:
;初始变量清零
CLRA;A清为零
MOVK1_C,A;K1_C初始为0
MOVDEDA,A;DEDA初始为0
MOVSEC,A;SEC初始为0
MOVMIN,A;MIN初始为0
MOVHOUR,A;HOUR初始为0
MOVK1_N,A;K1_N初始为0
MOVK1_P,A;K1_P初始为0
CLRTR0;启动中断
RET
;定时器初始化设置子程序
INIT_TIMER:
;定时器初始化
MOVTMOD,#01H;定时器0模式1
MOVIE,#10000010B;开通中断
RET
;中断服务程序
T0_INT:
;定时器T0中断程序
PUSHACC;入栈保护
INCDEDA
MOVA,DEDA;10ms计数值加1CJNEA,#100,TT
MOVDEDA,#0
INCSEC;秒加1
MOVA,SEC
CJNEA,#60,TT
INCMIN;分加1
MOVSEC,#0
MOVA,MIN
CJNEA,#60,TT
INCHOUR;时加1
MOVMIN,#0
MOVA,HOUR
CJNEA,#24,TT
MOVDEDA,#0
MOVSEC,#0;秒、分、时单元清0MOVMIN,#0
MOVHOUR,#0
TT:
POPACC;出栈
RETI;中断程序返回
;判断键是否按下子程序
LOOP1:
JBK2,LOOP2;判清零键是否按下
JMPMAIN;跳转主程序处LOOP2:
RET
;判断K1键是否按下
KEY:
CLRA;A清零
MOVK1_N,A;A值送入K1_N
MOVC,K1;K1值送入C
RLCA;同进位标志左移一位
ORLK1_N,A;两个位作逻辑OR运算
MOVA,K1_N;K1_N值送入A
XRLA,K1_P;有键按下,A中内容不为零RET
;K1键第一次按功能子程序
KEY0:
MOVA,K1_P;K1_P值送入A
JBACC.0,KEY3;A的0位是1,转KEY3
INCK1_C;K1_C加1
MOVA,K1_C;K1_C值送入A
CJNEA,#01H,KEY1;K1键是否第一次按?
MOVDPTR,#MENU1;是,存入MENU1信息
MOVA,#1;设置第一行显示
CALLLCD_PRINT;调用显示字符子程序
SETBTR0;启动中断
RET
;K1键第二次按功能子程序
KEY1:
MOVA,K1_C;K1_C值送入A
CJNEA,#02H,KEY2;K1键是否第二次按?
MOVDPTR,#MENU2;是,存入MENU2信息MOVA,#1;设置第一行显示
CALLLCD_PRINT;调用显示字符子程序
CLRTR0;停止中断
RET;
;K1键第三次按功能子程序
KEY2:
MOVA,K1_C;K1_C值送入A
CJNEA,#03H,KEY3;K1键是否第三次按?
MOVDPTR,#MENU3;是,存入MENU3信息MOVA,#1;设置第一行显示
CALLLCD_PRINT;调用显示字符子程序
SETBTR0;启动中断
RET
;K1键第四按功能子程序
KEY3:
MOVA,K1_C;K1_C值送入A
CJNEA,#04H,KEY4;K1键是否第四次按?
MOVDPTR,#MENU4;是,存入MENU4信息
MOVA,#1;设置第一行显示
CALLLCD_PRINT;调用显示字符子程序
CLRTR0;启动中断
KEY4:
RET;子程序返回
;―――――――――――――LCD显示――――――――――――――;LCD控制子程序
SET_LCD:
;
CLRE
ACALLINIT_LCD;初始化LCD
MOVR5,#10
ACALLDELAY
MOVDPTR,#LMESS1;指针指到显示消息1
MOVA,#1;显示在第一行
ACALLLCD_PRINT;调用显示字符子程序
MOVDPTR,#LMESS2;指针指到显示消息2
MOVA,#2;显示在第二行
ACALLLCD_PRINT;调用显示字符子程序
RET
;―――――――――――――――
LMESS1:
DB0;LCD第一行显示消息
LMESS2:
DB0;LCD第二行显示消息
;LCD初始化子程序
INIT_LCD:
MOVA,#38H;设置8位、2行、5x7点阵
ACALLWR_COMM;调用写指令子程序
ACALLDELAY1;调用延时子程序
MOVA,#0CH;开显示,光标不闪烁
ACALLWR_COMM;调用写指令子程序;
ACALLDELAY1;调用延时子程序
MOVA,#01H;清除LCD显示屏
ACALLWR_COMM;调用写指令子程序;
ACALLDELAY1;调用延时子程序
RET
;写指令子程序
WR_COMM:
MOVP1,A
CLRRS;RS=0,选择指令寄存器
CLRRW;RW=0,选择写模式
SETBE;E=1,允许读/写LCM
ACALLDELAY1;调用延时子程序
CLRE;E=0,禁止读/写LCM
RET
;写数据子程序
WR_DATA:
MOVP1,A
SETBRS;RS=1,选择数据寄存器
CLRRW;RW=0,选择写模式
SETBE;E=1,允许读/写LCM
ACALLDE;调用延时子程序
CLRE;E=0,禁止读/写LCM
ACALLDE;调用延时子程序
RET
;清除该行LCD的字符
CLR_LINE:
MOVR0,#24
CL1:
MOVA,#''
ACALLWR_DATA
DJNZR0,CL1
RET
;LCD存入工作菜单
MEU:
MOVDPTR,#MENU0;存入工作菜单
MOVA,#1;第一行
CALLLCD_PRINT
RET
;工作菜单
MENU0:
DB0
MENU1:
DB0
MENU2:
DB0
MENU3:
DB0
MENU4:
DB0
;菜单显示子程序
;一行、二行显示字符
LCD_PRINT:
CJNEA,#1,LINE2;判断是否为第一行
LINE1:
ACALLCLR_LINE;清除该行字符数据
MOVA,#80H;设置LCD的第一行地址ACALLWR_COMM;写入命令
JMPFILL
LINE2:
ACALLCLR_LINE;清除该行字符数据
MOVA,#0C0H;设置LCD的第二行地址ACALLWR_COMM
FILL:
CLRA;填入字符
MOVCA,@A+DPTR;由消息区取出字符
CJNEA,#0,LC1;判断是否为结束码
RET
;写入数据
LC1:
ACALLWR_DATA
INCDPTR;指针加1
JMPFILL;继续填入字符
RET
;转换数据子程
CONV:
;转换为ASCII码并显示
MOVA,HOUR;加载小时数据
MOVX,#5;设置位置
ACALLSKOW_LINE2;显示数据
INCX;
MOVA,#':
';
MOVB,X;
ACALLLCDP2;
MOVA,MIN;加载分钟数据
INCX;设置位置
ACALLSKOW_LINE2;显示数据
INCX;
MOVA,#':
';
MOVB,X;
ACALLLCDP2;
MOVA,SEC;加载秒数数据
INCX;设置位置
ACALLSKOW_LINE2;显示数据
INCX;
MOVA,#':
';
MOVB,X;
CALLLCDP2;
MOVA,DEDA;加载秒数数据
INCX;设置位置
ACALLSKOW_LINE2;显示数据
RET;
;在LCD的第二行显示数字
SKOW_LINE2:
MOVB,#10;设置被除数
DIVAB;结果A存商数,B存余数
ADDA,#30H;A为十位数,转换为字符PUSHB;B放入堆栈暂存
MOVB,X;设置LCD显示的位置
ACALLLCDP2;由LCD显示出来
POPB;出栈
MOVA,B;B为个位数
ADDA,#30H;转换为字符
INCX;LCD显示位置加1
MOVB,X;设置LCD显示的位置
ACALLLCDP2;由LCD显示出来
RET
;在LCD的第二行显示字符
LCDP2:
PUSHACC;
MOVA,B;设置显示地址
ADDA,#0C0H;设置LCD的第二行地址
CALLWR_COMM;写入命令
POPACC;由堆栈取出A
CALLWR_DATA;写入数据
RET
DEX:
MOVR7,#180
DE1:
NOP
DJNZR7,DE1
RET
;延时10MS
DELAY:
MOVR6,#50
D1:
MOVR7,#100
DJNZR7,$
DJNZR6,D1
DJNZR5,DELAY
RET
;延时5MS子程序
DELAY1:
MOVR6,#25
DEY:
MOVR7,#100
DJNZR7,$
DJNZR6,DEY
RET
;延时500微秒
DE:
DJNZR7,$
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 秒表 程序 汇编语言