1、 MOV A,#B ;HD7279A初始化CS、CLK、DATA MOVX DPTR,A LCALL DELAY25MS ;延时后进入工作状态 MOV DATA_OUT,#B ;HD7279A复位指令 LCALL SEND ;发送指令设回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 ;
2、十位寄存器 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,#B ;下载数据且按方式1译码,找到了第1个数码管 LCALL SEND LCALL DELA
3、Y25 ;T4,指令与数据时间间隔 MOV DATA_OUT,R1 ;指令的数据部分,显示个位 MOV A,#B MOVX DPTR,A下载数据且按方式1译码,找到了第2个数码管 MOV DATA_OUT,R2 ;下载数据且按方式1译码,找到了第3个数码管 MOV DATA_OUT,R3 ;/ LCALL DELAY1MS ;显示延时 MOV A,R4 ;下载数据且按方式1译码,找到了第4个数码管 MOV DATA_OUT,R6 ;下载数据且按方式1译码,找到了第5个数码管 MOV DATA_OUT,R7 ;指令的数据部分,显示十位 MOV A,R5 ;下载数据且按方式1译码,找到了第6个数码
4、管下载数据且按方式1译码,找到了第7个数码管 LJMP MAIN ;下一循环 SJMP $发送子程序SEND: CLR ET0 ;加锁 MOV BIT_COUNT,#8 ;无论指令还是数据,一次只发送8位 MOV A,#00011111B ;设CS为低电平 LCALL DELAY50 ;T1,从CS下降沿至CLK脉冲时间发送循环,HD7279A采用串行方式与微处理器通讯,一次发送一位SENDLOOP: MOV A,DATA_OUT ;取出发送的指令或数据 MOV C, ;串行发送从高位到低位发送,故先取最高位输出到DAT位 MOV ,C SETB C ;设CLK为高电平 MOV ,C LCAL
5、L DELAY8 ;T2,传送指令时CLK脉冲宽度 CLR C ;设CLK为低电平T3,字节传送中CLK脉冲时间 MOV A,DATA_OUT ;移位待发送的指令或数据,为下一位的发送作准备 RL A MOV DATA_OUT,A DJNZ BIT_COUNT,SENDLOOP ;发送不到8位,继续循环发送完毕,恢复DAT释放锁 RET接收子程序(本程序中用不到,但在添加按键操作的时候用于读取键值)RECEIVE: CLR ET0 ;接收8位数据 MOV DATA_IN,#0 ;清空接收数据缓冲寄存器 MOV A,#00111111B ;设CS为低电平,同时保证DAT为高电平(输入状态) MO
6、VX DPTR,A T5,读键盘指令中指令与数据时间间隔接收循环,HD7279A采用串行方式与微处理器通讯,一次接收一位RECEIVELOOP:SETB ;设CS为高电平 LCALL DELAY8 ;T6,输出键盘数据建立时间 MOV A,DATA_IN ;接收数据缓冲寄存器向左移位,准备接收一位数据,数据的高位会先发送 MOV DATA_IN,A MOVX A,DPTR ;读取数据取出数据位DAT MOV A,DATA_IN MOV DATA_IN,A ;数据放进接收数据缓冲寄存器T7,读键盘数据是CLK脉冲宽 DJNZ BIT_COUNT,RECEIVELOOP ;接收不到8位,继续循环接
7、收完毕,恢复DAT定时器0中断程序 TIME0: / DJNZ R4,NEXT ;定时器一个周期内中断数不够就继续计时 INC R2 ;数字加1重置定时器一个周期内中断数 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中断后需要重新设置定时器定时值 RETIKBHIT: PUSH
8、PSW PUSH ACC PUSH DPH PUSH DPL PUSH DATA_OUT PUSH BIT_COUNT MOV A,R0 MOV A,R1 MOV DATA_OUT,#00010101B LCALL SEND LCALL DELAY25 LCALL RECEIVE MOV A,DATA_IN JZ START DEC A JZ STOP JZ CLEAR SJMP OUTSTART: SETB TR0 STOP: CLR TR0 CLEAR: MOV R2,#0 MOV R3,#0 MOV R5,#0OUT: POP ACC MOV R1,A POP ACC MOV R0,A
9、POP BIT_COUNT POP DATA_OUT POP DPL POP DPH POP PSW延时25ms子程序DELAY25MS: MOV R0,#49D11: MOV R1,#253 NOPD12: DJNZ R1,D12 DJNZ R0,D11延时50s子程序DELAY50: MOV R0,#23D21: DJNZ R0,D21延时25s子程序DELAY25: MOV R0,#11D31: DJNZ R0,D31延时8s子程序DELAY8: MOV R0,#2D41: DJNZ R0,D41延时1ms子程序DELAY1MS: MOV R0,#2D51: MOV R1,#247D52: DJNZ R1,D52 DJNZ R0,D51 END
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1