专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
汇编编写数字时钟,显示有问题,请大神帮忙看一下
2019-03-24 18:10
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
2855
4
1326
实验板原理图及代码如下: 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
阳阳学通信
1楼-- · 2019-03-25 03:38
DU BIT P2.6
WE BIT P2.7
LCD_RS BIT P1.0 ;LCD1602
LCD_RW BIT P1.1
LCD_EN BIT P2.5
DS_SCLK BIT P2.1 ;DS1302
DS_IO BIT P2.0
DS_RST BIT P2.4
COM EQU 20H
DAT EQU 21H
BYTE1 EQU 22H
BYTE2 EQU 23H
TEAR EQU 29H ;定义时钟显示位
MONTH EQU 2AH
DAY EQU 2BH
SHI EQU 2CH
FEN EQU 2DH
MIAO EQU 2EH
WEEK EQU 2FH
/******************************主函数*******************************************/
ORG 0000H
AJMP START
ORG 0030H
START: MOV SP,#30H
LCALL LCD_INIT ;LCD1602初始化
LCALL DS_INIT ;DS1302初始化
LOOP1: MOV COM,#80H
LCALL LCD_W_COM
MOV A,#81H
LCALL DS_W_BYTE
NOP
LCALL DS_R_DAT
NOP
LCALL BCD_TRANS
MOV DAT,A
LCALL LCD_W_DAT
NOP
MOV DAT,B
LCALL LCD_W_DAT
LJMP LOOP1
/*******************DS1302初始化****************************************/
DS_INIT: MOV A,#8EH ;打开写保护
LCALL DS_W_BYTE
NOP
MOV A,#00H
LCALL DS_W_BYTE
MOV A,#80H ;miao位初始化
LCALL DS_W_BYTE
NOP
MOV A,#20H
LCALL DS_W_BYTE
; MOV A,#8EH ;关闭写保护
; LCALL DS_W_BYTE
; MOV A,#80H
; LCALL DS_W_BYTE
RET
/*******************DS1302写字节*********************************************/
DS_W_BYTE: MOV R3,#08H
CLR DS_RST
CLR DS_SCLK
SETB DS_RST
LOOP3: RRC A
MOV DS_IO,C
SETB DS_SCLK
NOP
NOP
CLR DS_SCLK
DJNZ R3,LOOP3
RET
/*******************DS1302读数据**********************************************/
DS_R_DAT: MOV R3,#08H
CLR DS_RST
SETB DS_SCLK
SETB DS_RST
CLR A
CLR C
LOOP4: MOV C,DS_IO
CLR DS_SCLK
NOP
NOP
RRC A
SETB DS_SCLK
DJNZ R3,LOOP4
RET
BCD_TRANS: MOV B,#16
DIV AB
MOV R4,B ;BCD码转成十进制
MOV B,#10
MUL AB
ADD A,R4
MOV B,#10 ;十进制转成ASCII码
DIV AB
ADD A,#30H
MOV R4,A
MOV A,B
ADD A,#30H
MOV B,A
MOV A,R4
RET
LCD_INIT: CLR DU
CLR WE
MOV COM,#38H ;设置16*2显示
LCALL LCD_W_COM
MOV COM,#01H ;清屏
LCALL LCD_W_COM
MOV COM,#06H ;地址指针加1
LCALL LCD_W_COM
MOV COM,#0CH ;显示开关
LCALL LCD_W_COM
RET
LCD_W_COM: CLR LCD_RS ;写指令
CLR LCD_RW
MOV P0,COM
CLR LCD_EN
SETB LCD_EN
LCALL DELAY_5ms
CLR LCD_EN
RET
LCD_W_DAT: SETB LCD_RS ;写数据
CLR LCD_RW
MOV P0,DAT
CLR LCD_EN
SETB LCD_EN
LCALL DELAY_5ms
CLR LCD_EN
RET
DELAY_5ms: MOV R6,#13H ;延时
LOOP2: MOV R7,#82H
DJNZ R7,$
DJNZ R6,LOOP2
RET
/*TAB1: DB "XIAO KE AI"
TAB2: DB "I LOVE YOU" */
END
加载中...
ahshmj
2楼-- · 2019-03-25 05:28
精彩回答 2 元偷偷看……
加载中...
阳阳学通信
3楼-- · 2019-03-25 10:42
ahshmj 发表于 2014-11-13 19:09
什么问题?
因为读数据都一样,我只测试了 秒 位,但是显示*5就不变,*是乱码;反复查了程序,查不出原因,能帮忙看看吗
加载中...
ahshmj
4楼-- · 2019-03-25 12:48
BCD_TRANS: MOV B,#10
DIV AB
; MOV R4,B ;BCD码转成十进制
; MOV B,#10
; MUL AB
; ADD A,R4
; MOV B,#10 ;十进制转成ASCII码
; DIV AB
ADD A,#30H
MOV R4,A
MOV A,B
ADD A,#30H
MOV B,A
MOV A,R4
RET
数据转换部分按上面的改一下。时间关系,其余部分没有看。如有问题再问。
加载中...
一周热门
更多
>
相关问题
相关文章
基于51单片机的计算器设计
0个评论
51单片机300个proteus仿真实例下载
0个评论
51单片机 蜂鸣器
0个评论
51单片机驱动RC522模块
0个评论
基于51单片机的指纹密码锁
0个评论
AT89C51单片机制作简易密码锁
0个评论
51单片机汇编语言计数器
0个评论
51单片机精确延时设计
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
WE BIT P2.7
LCD_RS BIT P1.0 ;LCD1602
LCD_RW BIT P1.1
LCD_EN BIT P2.5
DS_SCLK BIT P2.1 ;DS1302
DS_IO BIT P2.0
DS_RST BIT P2.4
COM EQU 20H
DAT EQU 21H
BYTE1 EQU 22H
BYTE2 EQU 23H
TEAR EQU 29H ;定义时钟显示位
MONTH EQU 2AH
DAY EQU 2BH
SHI EQU 2CH
FEN EQU 2DH
MIAO EQU 2EH
WEEK EQU 2FH
/******************************主函数*******************************************/
ORG 0000H
AJMP START
ORG 0030H
START: MOV SP,#30H
LCALL LCD_INIT ;LCD1602初始化
LCALL DS_INIT ;DS1302初始化
LOOP1: MOV COM,#80H
LCALL LCD_W_COM
MOV A,#81H
LCALL DS_W_BYTE
NOP
LCALL DS_R_DAT
NOP
LCALL BCD_TRANS
MOV DAT,A
LCALL LCD_W_DAT
NOP
MOV DAT,B
LCALL LCD_W_DAT
LJMP LOOP1
/*******************DS1302初始化****************************************/
DS_INIT: MOV A,#8EH ;打开写保护
LCALL DS_W_BYTE
NOP
MOV A,#00H
LCALL DS_W_BYTE
MOV A,#80H ;miao位初始化
LCALL DS_W_BYTE
NOP
MOV A,#20H
LCALL DS_W_BYTE
; MOV A,#8EH ;关闭写保护
; LCALL DS_W_BYTE
; MOV A,#80H
; LCALL DS_W_BYTE
RET
/*******************DS1302写字节*********************************************/
DS_W_BYTE: MOV R3,#08H
CLR DS_RST
CLR DS_SCLK
SETB DS_RST
LOOP3: RRC A
MOV DS_IO,C
SETB DS_SCLK
NOP
NOP
CLR DS_SCLK
DJNZ R3,LOOP3
RET
/*******************DS1302读数据**********************************************/
DS_R_DAT: MOV R3,#08H
CLR DS_RST
SETB DS_SCLK
SETB DS_RST
CLR A
CLR C
LOOP4: MOV C,DS_IO
CLR DS_SCLK
NOP
NOP
RRC A
SETB DS_SCLK
DJNZ R3,LOOP4
RET
BCD_TRANS: MOV B,#16
DIV AB
MOV R4,B ;BCD码转成十进制
MOV B,#10
MUL AB
ADD A,R4
MOV B,#10 ;十进制转成ASCII码
DIV AB
ADD A,#30H
MOV R4,A
MOV A,B
ADD A,#30H
MOV B,A
MOV A,R4
RET
LCD_INIT: CLR DU
CLR WE
MOV COM,#38H ;设置16*2显示
LCALL LCD_W_COM
MOV COM,#01H ;清屏
LCALL LCD_W_COM
MOV COM,#06H ;地址指针加1
LCALL LCD_W_COM
MOV COM,#0CH ;显示开关
LCALL LCD_W_COM
RET
LCD_W_COM: CLR LCD_RS ;写指令
CLR LCD_RW
MOV P0,COM
CLR LCD_EN
SETB LCD_EN
LCALL DELAY_5ms
CLR LCD_EN
RET
LCD_W_DAT: SETB LCD_RS ;写数据
CLR LCD_RW
MOV P0,DAT
CLR LCD_EN
SETB LCD_EN
LCALL DELAY_5ms
CLR LCD_EN
RET
DELAY_5ms: MOV R6,#13H ;延时
LOOP2: MOV R7,#82H
DJNZ R7,$
DJNZ R6,LOOP2
RET
/*TAB1: DB "XIAO KE AI"
TAB2: DB "I LOVE YOU" */
END
因为读数据都一样,我只测试了 秒 位,但是显示*5就不变,*是乱码;反复查了程序,查不出原因,能帮忙看看吗
DIV AB
; MOV R4,B ;BCD码转成十进制
; MOV B,#10
; MUL AB
; ADD A,R4
; MOV B,#10 ;十进制转成ASCII码
; DIV AB
ADD A,#30H
MOV R4,A
MOV A,B
ADD A,#30H
MOV B,A
MOV A,R4
RET
数据转换部分按上面的改一下。时间关系,其余部分没有看。如有问题再问。
一周热门 更多>