收藏 分销(赏)

汇编语言:在两个数码管上实现00-99的循环显示资料讲解.doc

上传人:a199****6536 文档编号:3981975 上传时间:2024-07-24 格式:DOC 页数:11 大小:31.50KB 下载积分:8 金币
下载 相关 举报
汇编语言:在两个数码管上实现00-99的循环显示资料讲解.doc_第1页
第1页 / 共11页
汇编语言:在两个数码管上实现00-99的循环显示资料讲解.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
汇编语言:在两个数码管上实现00-99的循环显示 精品资料 ;此程序为在两个数码管上实现00-99的循环显示 ;设置ram DATA_IN DATA 20H ;接收数据缓冲寄存器 DATA_OUT DATA 21H ;发送数据缓冲寄存器 BIT_COUNT DATA 22H ;数据位数寄存器 // HOUR DATA 23H // MINITE DATA 24H // SECOND DATA 25H // MSECOND DATA 26H ORG 0000H LJMP INIT ORG 000BH LJMP TIME0 ;定时器0中断入口 ORG 0013H LJMP KBHIT ;初始化 ORG 0030H INIT: MOV DPTR,#4000H ;HD7279A的地址 MOV A,#10011111B ;HD7279A初始化CS、CLK、DATA MOVX @DPTR,A LCALL DELAY25MS ;延时后进入工作状态 MOV DATA_OUT,#10100100B ;HD7279A复位指令 LCALL SEND ;发送指令 MOV A,#10011111B ;设回CS为高电平 MOVX @DPTR,A // MOV R4,#20 ;定时器一个周期内的中断数 MOV R2,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 // MOV MSECOND,#0 // MOV SECOND,#0 // MOV MINITE,#0 // MOV HOUR,#0 ;数字计数器 MOV R6,#0 ;个位寄存器 MOV R7,#0 ;十位寄存器 MOV TMOD,#1 ;设置定时器0工作模式为方式1 // MOV TH0,#3CH ;设置定时器定时值 // MOV TL0,#0B0H MOV TH0,#0FCH ;设置定时器定时值 MOV TL0,#18H SETB EA ;开总中断 SETB ET0 ;开定时器0中断 SETB EX1 SETB TR0 ;开始计时 ;主程序 MAIN: MOV A,R2 ;把数字转换为2个BCD码 MOV B,#10 DIV AB MOV R6,B ;个位放在R6 MOV R7,A ;十位放在R7 MOV DATA_OUT,#11001000B ;下载数据且按方式1译码,找到了第1个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R1 ;指令的数据部分,显示个位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A MOV DATA_OUT,#11001001B ;下载数据且按方式1译码,找到了第2个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R2 ;指令的数据部分,显示个位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A MOV DATA_OUT,#11001010B ;下载数据且按方式1译码,找到了第3个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R3 ;指令的数据部分,显示个位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A // LCALL DELAY1MS ;显示延时 MOV A,R4 ;把数字转换为2个BCD码 MOV B,#10 DIV AB MOV R6,B ;个位放在R6 MOV R7,A ;十位放在R7 MOV DATA_OUT,#11001011B ;下载数据且按方式1译码,找到了第4个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R6 ;指令的数据部分,显示个位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A // LCALL DELAY1MS ;显示延时 MOV DATA_OUT,#11001100B ;下载数据且按方式1译码,找到了第5个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R7 ;指令的数据部分,显示十位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A // LCALL DELAY1MS ;显示延时 MOV A,R5 ;把数字转换为2个BCD码 MOV B,#10 DIV AB MOV R6,B ;个位放在R6 MOV R7,A ;十位放在R7 MOV DATA_OUT,#11001101B ;下载数据且按方式1译码,找到了第6个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R6 ;指令的数据部分,显示个位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A // LCALL DELAY1MS ;显示延时 MOV DATA_OUT,#11001110B ;下载数据且按方式1译码,找到了第7个数码管 LCALL SEND LCALL DELAY25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R7 ;指令的数据部分,显示十位 LCALL SEND MOV A,#10011111B MOVX @DPTR,A // LCALL DELAY1MS ;显示延时 LJMP MAIN ;下一循环 SJMP $ ;发送子程序 SEND: CLR ET0 ;加锁 MOV BIT_COUNT,#8 ;无论指令还是数据,一次只发送8位 MOV A,#00011111B ;设CS为低电平 MOVX @DPTR,A LCALL DELAY50 ;T1,从CS下降沿至CLK脉冲时间 ;发送循环,HD7279A采用串行方式与微处理器通讯,一次发送一位 SENDLOOP: MOV A,DATA_OUT ;取出发送的指令或数据 MOV C,ACC.7 ;串行发送从高位到低位发送,故先取最高位 MOV A,#00011111B ;输出到DAT位 MOV ACC.5,C MOVX @DPTR,A SETB C ;设CLK为高电平 MOV ACC.6,C MOVX @DPTR,A LCALL DELAY8 ;T2,传送指令时CLK脉冲宽度 CLR C ;设CLK为低电平 MOV ACC.6,C MOVX @DPTR,A LCALL DELAY8 ;T3,字节传送中CLK脉冲时间 MOV A,DATA_OUT ;移位待发送的指令或数据,为下一位的发送作准备 RL A MOV DATA_OUT,A DJNZ BIT_COUNT,SENDLOOP ;发送不到8位,继续循环 MOV A,#00011111B ;发送完毕,恢复DAT MOVX @DPTR,A SETB ET0 ;释放锁 RET ;接收子程序(本程序中用不到,但在添加按键操作的时候用于读取键值) RECEIVE: CLR ET0 ;加锁 MOV BIT_COUNT,#8 ;接收8位数据 MOV DATA_IN,#0 ;清空接收数据缓冲寄存器 MOV A,#00111111B ;设CS为低电平,同时保证DAT为高电平(输入状态) MOVX @DPTR,A LCALL DELAY25 ;T5,读键盘指令中指令与数据时间间隔 ;接收循环,HD7279A采用串行方式与微处理器通讯,一次接收一位 RECEIVELOOP:SETB ACC.6 ;设CS为高电平 MOVX @DPTR,A LCALL DELAY8 ;T6,输出键盘数据建立时间 MOV A,DATA_IN ;接收数据缓冲寄存器向左移位,准备接收一位数据,数据的高位会先发送 RL A MOV DATA_IN,A MOVX A,@DPTR ;读取数据 MOV C,ACC.5 ;取出数据位DAT MOV A,DATA_IN MOV ACC.0,C MOV DATA_IN,A ;数据放进接收数据缓冲寄存器 MOV A,#00111111B ;设CS为低电平,同时保证DAT为高电平(输入状态) MOVX @DPTR,A LCALL DELAY8 ;T7,读键盘数据是CLK脉冲宽 DJNZ BIT_COUNT,RECEIVELOOP ;接收不到8位,继续循环 MOV A,#00011111B ;接收完毕,恢复DAT MOVX @DPTR,A SETB ET0 ;释放锁 RET ;定时器0中断程序 TIME0: // DJNZ R4,NEXT ;定时器一个周期内中断数不够就继续计时 INC R2 ;数字加1 // MOV R4,#20 ;重置定时器一个周期内中断数 CJNE R2,#100,NEXT ;数字不够100继续加1 MOV R2,#0 ;数字到达100就清零 INC R3 CJNE R3,#10,NEXT MOV R3,#0 INC R4 CJNE R4,#60,NEXT MOV R4,#0 INC R5 CJNE R5,#60,NEXT MOV R5,#0 NEXT: MOV TH0,#0FCH ;定时器方式1中断后需要重新设置定时器定时值 MOV TL0,#18H RETI KBHIT: PUSH PSW PUSH ACC PUSH DPH PUSH DPL PUSH DATA_OUT PUSH BIT_COUNT MOV A,R0 PUSH ACC MOV A,R1 PUSH ACC MOV DATA_OUT,#00010101B LCALL SEND LCALL DELAY25 LCALL RECEIVE MOV A,DATA_IN JZ START DEC A DEC A JZ STOP DEC A JZ CLEAR SJMP OUT START: SETB TR0 SJMP OUT STOP: CLR TR0 SJMP OUT CLEAR: MOV R2,#0 MOV R3,#0 MOV R4,#0 MOV R5,#0 OUT: POP ACC MOV R1,A POP ACC MOV R0,A POP BIT_COUNT POP DATA_OUT POP DPL POP DPH POP ACC POP PSW RETI ;延时25ms子程序 DELAY25MS: MOV R0,#49 D11: MOV R1,#253 NOP D12: DJNZ R1,D12 DJNZ R0,D11 RET ;延时50μs子程序 DELAY50: MOV R0,#23 NOP D21: DJNZ R0,D21 RET ;延时25μs子程序 DELAY25: MOV R0,#11 D31: DJNZ R0,D31 RET ;延时8μs子程序 DELAY8: MOV R0,#2 NOP D41: DJNZ R0,D41 RET ;延时1ms子程序 DELAY1MS: MOV R0,#2 NOP D51: MOV R1,#247 NOP D52: DJNZ R1,D52 DJNZ R0,D51 RET END 仅供学习与交流,如有侵权请联系网站删除 谢谢11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服