基于I/O 8LED 温度显示 设计
这个LED显示部分由于74ls164接在了RXD端,也就是要用串行口来发送温度数据到LED。
所以在主程序中要开串行口中断允许,以下是串行口中断子程序,并假设要显示的温度已经存到了某个存储器中。这里假设温度已经存到了TEM1和TEM0中,其中TEM1里存的是温度的整数位,TEM0里 存的是温度的小数位。
这是实验作业。现在忙考研没时间做,这是我在网上找的,不知道是不是。帮忙给我看看啊 谢谢了诶!!
楼主给出的程序较长、较滥,省略了。――――做而论道注
悬赏分:130 - 解决时间:2009-11-14 17:10
;-------------------------------------------------
最佳答案:试试下列程序。
TEM0 equ 30H
TEM1 equ 31H
;
ORG 0000H
; 虚拟的主程序部分
mov TEM0, #4
mov TEM1, #2 ;假设已经测得温度是24度
LCALL TRANS ;输出显示
SJMP $
;
;假设温度(两位数字)已经预先存到了TEM1和TEM0里, 其中TEM0是个位,
;这个LED显示部分由74ls164接在了RXD端,要用串行口来发送温度数据到LED。
;那么,查出它们的七段码, 在串行口输出即可
;
TRANS:
PUSH ACC ;保护现场
PUSH DPL
PUSH DPH
MOV DPTR, #TAB ;七段码首地址
MOV A, TEM1 ;取十位
MOVC A, @A+DPTR ;查出笔段码
MOV SBUF, A ;串行输出
JNB TI, $ ;TI=0, 就是没有发送完, 原地转移等待
CLR TI ;清标志
MOV A, TEM0 ;取个位
MOVC A, @A+DPTR ;查出笔段码
MOV SBUF, A ;串行输出
JNB TI, $ ;TI=0, 就是没有发送完, 原地转移等待
CLR TI ;清标志
POP DPH ;恢复现场
POP DPL
POP ACC
RET ;两个字节发送完毕,返回主程序;如果是中断程序,应该使用RETI来返回
TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
;假设LED为共阴极的,若为共阳极 取反即可
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
;-------------------------------------------------
回答者: 做而论道 - 十级 2009-11-12 21:55
提问者对于答案的评价:太感谢了 无法用语言形容!!
;=======================================================
二次提问:问题是这样的 下面的是74164的程序 请改成74373的程序
悬赏分:100 - 解决时间:2009-11-17 19:26
;-------------------------------------------------
最佳答案:通过百度Hi交流,知道了楼主LED显示电路变动的情况,所以对程序进行了修改,请见下面小写的指令。
TRANS:
PUSH ACC ;保护现场
…………
MOV A, TEM1 ;取十位
MOVC A, @A+DPTR ;查出笔段码
setb p2.0 ;选通十位数的373
mov p0, a ;输出十位数的段码
clr p2.0 ;关闭373
MOV A, TEM0 ;取个位
MOVC A, @A+DPTR ;查出笔段码
setb p2.1 ;选通个位数的373
mov p0, a ;输出个位数的段码
clr p2.1 ;关闭373
POP DPH ;恢复现场
…………
RET ;两个字节发送完毕,返回主程序
;-------------------------------------------------
回答者: 做而论道 - 十级 2009-11-17 17:43
提问者对于答案的评价:谢谢大哥!
发表新评论
您还未登录!登录后可以发表回复
文章评论 0人参与