36 西南科技大学自学考试毕业论文
RET
;---------------------------------------------------
CLR_LINE: ;清除该行 LCD 的字符 MOV R0,#24 CL1: MOV A,#' ' CALL WDATA DJNZ R0,CL1 RET
;----------------------------------------------------- ; 写指令、数据使能子程序
;----------------------------------------------------- ENABLE: ;写指令使能
CLR LCD_RS ;RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲
CLR LCD_RW SETB LCD_EN CALL DELAY0 CLR LCD_EN RET
ENABLE1: ;写数据使能
SETB LCD_RS ;RS=H,RW=L,D0-D7=数据,E=高脉冲 CLR LCD_RW SETB LCD_EN CALL DELAY0 CLR LCD_EN RET
DELAY0: MOV R7,#250 ;延时500微秒 DJNZ R7,$ RET
;---------------------------------------------------- ;写入命令子程序
;----------------------------------------------------
WCOM: ;以8位控制方式将命令写至LCD
MOV P0,A ;写入命令
36
37 西南科技大学自学考试毕业论文
CALL ENABLE RET
;---------------------------------------------------- ;写入数据子程序
;----------------------------------------------------
WDATA: ;以8位控制方式将数据写至LCD
MOV P0,A ;写入数据 CALL ENABLE1 RET
;--------------------------------------------------- ;在 LCD 第二行显示字符 ;A=ASC DATA, B=LINE X POS
;---------------------------------------------------
LCDP2: ;在LCD的第二行显示字符 PUSH ACC ;
MOV A,B ;设置显示地址 ADD A,#0C0H ;设置LCD的第二行地址 CALL WCOM ;写入命令 POP ACC ;由堆栈取出A CALL WDATA ;写入数据 RET
;------------------------------------------------------- ;ASCII 转换并在第二行显示数字子程序
;------------------------------------------------------- CONV: ; MOV A,T_G
MOV LCD_X,#6 ;设置位置 ; CALL SHOW_DIG2 MOV A,T_H
;INC LCD_X ;加载小时数据 CALL SHOW_DIG2 ;显示数据
MOV A,T_M ;加载分钟数据 INC LCD_X ;设置位置 CALL SHOW_DIG2 ;显示数据
MOV A,T_S ;加载秒数数据
37
38 西南科技大学自学考试毕业论文
INC LCD_X ;设置位置 CALL SHOW_DIG2 ;显示数据 RET
;---------------------------------------------------- SHOW_DIG2:
MOV B,#16 DIV AB ADD A,#30H PUSH B MOV B,LCD_X CALL LCDP2 POP B MOV A,B ADD A,#30H INC LCD_X MOV B,LCD_X CALL LCDP2 RET
;----------------------------------------------------- DELAY1: ;延时3MS MOV R6,#15 D2: MOV R7,#100 DJNZ R7,$ DJNZ R6,D2 RET
; ----------------- 定时器设置 ------------------------ ;设置定时器0工作在定时方式1,定时器1工作在计数方式1 ;--------------------------------------------------------- TIM_T0: MOV TMOD,#51H
MOV TH0,TIMER_H ;设置定时初值高位 MOV TL0,TIMER_L ;设置定时初值低位 MOV TH1,#00H ;清T1计数器 MOV TL1,#00H
MOV IE,#8AH ;开中断总允许,允许T0溢出中断
38
39 西南科技大学自学考试毕业论文
SETB PT1 SETB TR1
SETB TR0 ;定时器开始工作
RET
;-------------------------------------------------------- ;定时器0中断服务程序
;-------------------------------------------------------- TIMER_INT:
CLR TR0 ;关闭定时器 MOV TL0,TIMER_L ;重新赋初值
MOV TH0,TIMER_H ; INC TIMCOUNT ;定时1S,时间单位 MOV A,TIMCOUNT ;查看数量值
CPL P1.4 ;产生自测信号 CJNE A,#20,T_END ;如果没有到1S返回 CLR TR1 ;关闭计数器T1 MOV TIMCOUNT,#00H ;到1S则清零 MOV INT_L,TL1 ;取出计数值低位 MOV INT_H,TH1 ;取出计数值高位 MOV INT_G,2AH ;取出溢出计数值位 MOV TH1,#00H MOV TL1,#00H MOV 2AH,#00H SETB TR1
T_END: SETB TR0 ;重新开始定时操作 RETI
;--------------------------------------------------------------- ;三字节二进制整数转换成四字节BCD码子程序
;二进制数从低位到高位分别存放在INT_L、INT_H、INT_G单元中 ;BCD码从低位到高位分别存放在T_S、T_M、T_H、T_G 单元中
;--------------------------------------------------------------- SBIN_SBCD:
PUSH PSW
SETB PSW.3 ;设置当前寄存器
39
40 西南科技大学自学考试毕业论文
CLR PSW.4
CLR A ;清累加器 MOV T_G,A
MOV T_H,A ;清除出口单元,准备转换
MOV T_M,A MOV T_S,A HH1:
MOV R5,INT_G
MOV R7,INT_L MOV R6,INT_H MOV R2,#24 CLR C MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 RLC A MOV R5,A
MOV A,T_S ADDC A,T_S DA A MOV T_S,A MOV A,T_M ADDC A,T_M DA A MOV T_M,A MOV A,T_H ADDC A,T_H DA A
MOV T_H,A MOV A,T_G 40
;设置二进制数起始地址 ;得到低位数据 ;累加
;十进制调整 ;保存数据 ;得到第二位数据 ;累加
;十进制调整 ;保存结果 ;得到第三位 ;累加 ;保存 ;得到第四位
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库基于单片机频率计的设计 - 图文(8)在线全文阅读。
相关推荐: