1、汇编语言:在两个数码管上实现00-99的循环显示精品资料;此程序为在两个数码管上实现00-99的循环显示;设置ramDATA_IN DATA 20H;接收数据缓冲寄存器DATA_OUT DATA 21H;发送数据缓冲寄存器BIT_COUNT DATA 22H;数据位数寄存器/HOUR DATA 23H/MINITE DATA 24H/SECOND DATA 25H/MSECOND DATA 26HORG0000HLJMPINITORG000BHLJMPTIME0;定时器0中断入口 ORG 0013HLJMP KBHIT;初始化ORG0030HINIT:MOVDPTR,#4000H;HD7279
2、A的地址MOVA,#10011111B;HD7279A初始化CS、CLK、DATAMOVXDPTR,ALCALLDELAY25MS;延时后进入工作状态MOVDATA_OUT,#10100100B;HD7279A复位指令LCALLSEND;发送指令MOVA,#10011111B;设回CS为高电平MOVX DPTR,A/MOVR4,#20;定时器一个周期内的中断数MOV R2,#0MOV R3,#0MOV R4,#0MOV R5,#0/MOVMSECOND,#0/MOVSECOND,#0/MOVMINITE,#0/MOVHOUR,#0 ;数字计数器MOVR6,#0;个位寄存器MOVR7,#0;十位
3、寄存器MOVTMOD,#1;设置定时器0工作模式为方式1/MOVTH0,#3CH;设置定时器定时值/MOVTL0,#0B0HMOVTH0,#0FCH;设置定时器定时值MOVTL0,#18HSETBEA;开总中断SETBET0;开定时器0中断SETB EX1 SETBTR0 ;开始计时;主程序MAIN:MOVA,R2;把数字转换为2个BCD码MOVB,#10DIVABMOVR6,B;个位放在R6MOVR7,A;十位放在R7MOVDATA_OUT,#11001000B;下载数据且按方式1译码,找到了第1个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OU
4、T,R1;指令的数据部分,显示个位LCALLSENDMOVA,#10011111BMOVXDPTR,AMOVDATA_OUT,#11001001B;下载数据且按方式1译码,找到了第2个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R2;指令的数据部分,显示个位LCALLSENDMOVA,#10011111BMOVXDPTR,AMOVDATA_OUT,#11001010B;下载数据且按方式1译码,找到了第3个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R3;指令的数据部分,显示个位LCALL
5、SENDMOVA,#10011111BMOVXDPTR,A/LCALLDELAY1MS;显示延时 MOVA,R4;把数字转换为2个BCD码MOVB,#10DIVABMOVR6,B;个位放在R6MOVR7,A;十位放在R7MOVDATA_OUT,#11001011B;下载数据且按方式1译码,找到了第4个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R6;指令的数据部分,显示个位LCALLSENDMOVA,#10011111BMOVXDPTR,A/LCALLDELAY1MS;显示延时MOVDATA_OUT,#11001100B;下载数据且按方式1
6、译码,找到了第5个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R7;指令的数据部分,显示十位LCALLSENDMOVA,#10011111BMOVXDPTR,A/LCALLDELAY1MS;显示延时 MOVA,R5;把数字转换为2个BCD码MOVB,#10DIVABMOVR6,B;个位放在R6MOVR7,A;十位放在R7MOVDATA_OUT,#11001101B;下载数据且按方式1译码,找到了第6个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R6;指令的数据部分,显示个位LCALLSE
7、NDMOVA,#10011111BMOVXDPTR,A/LCALLDELAY1MS;显示延时MOVDATA_OUT,#11001110B;下载数据且按方式1译码,找到了第7个数码管LCALLSENDLCALLDELAY25;T4,指令与数据时间间隔MOVDATA_OUT,R7;指令的数据部分,显示十位LCALLSENDMOVA,#10011111BMOVXDPTR,A/LCALLDELAY1MS;显示延时LJMPMAIN;下一循环SJMP$;发送子程序SEND:CLRET0;加锁MOVBIT_COUNT,#8;无论指令还是数据,一次只发送8位MOVA,#00011111B;设CS为低电平MOV
8、XDPTR,ALCALLDELAY50;T1,从CS下降沿至CLK脉冲时间;发送循环,HD7279A采用串行方式与微处理器通讯,一次发送一位SENDLOOP:MOV A,DATA_OUT;取出发送的指令或数据MOV C,ACC.7;串行发送从高位到低位发送,故先取最高位MOV A,#00011111B;输出到DAT位MOV ACC.5,CMOVX DPTR,ASETB C ;设CLK为高电平MOV ACC.6,CMOVX DPTR,ALCALL DELAY8;T2,传送指令时CLK脉冲宽度CLR C;设CLK为低电平MOV ACC.6,CMOVX DPTR,ALCALL DELAY8;T3,字
9、节传送中CLK脉冲时间MOV A,DATA_OUT;移位待发送的指令或数据,为下一位的发送作准备RL AMOV DATA_OUT,ADJNZ BIT_COUNT,SENDLOOP;发送不到8位,继续循环MOVA,#00011111B;发送完毕,恢复DATMOVX DPTR,ASETBET0;释放锁RET;接收子程序(本程序中用不到,但在添加按键操作的时候用于读取键值)RECEIVE:CLRET0;加锁MOVBIT_COUNT,#8;接收8位数据MOVDATA_IN,#0;清空接收数据缓冲寄存器MOVA,#00111111B;设CS为低电平,同时保证DAT为高电平(输入状态)MOVXDPTR,A
10、LCALLDELAY25;T5,读键盘指令中指令与数据时间间隔;接收循环,HD7279A采用串行方式与微处理器通讯,一次接收一位RECEIVELOOP:SETBACC.6;设CS为高电平MOVXDPTR,ALCALLDELAY8;T6,输出键盘数据建立时间MOV A,DATA_IN;接收数据缓冲寄存器向左移位,准备接收一位数据,数据的高位会先发送RL AMOV DATA_IN,AMOVXA,DPTR;读取数据MOVC,ACC.5;取出数据位DATMOVA,DATA_INMOVACC.0,CMOVDATA_IN,A;数据放进接收数据缓冲寄存器MOVA,#00111111B;设CS为低电平,同时保
11、证DAT为高电平(输入状态)MOVXDPTR,ALCALLDELAY8;T7,读键盘数据是CLK脉冲宽DJNZBIT_COUNT,RECEIVELOOP;接收不到8位,继续循环MOVA,#00011111B;接收完毕,恢复DATMOVX DPTR,ASETBET0;释放锁RET;定时器0中断程序TIME0:/ DJNZR4,NEXT;定时器一个周期内中断数不够就继续计时INCR2;数字加1/MOVR4,#20;重置定时器一个周期内中断数CJNER2,#100,NEXT;数字不够100继续加1MOVR2,#0;数字到达100就清零INC R3CJNER3,#10,NEXTMOVR3,#0INC
12、R4CJNER4,#60,NEXTMOVR4,#0INC R5CJNER5,#60,NEXTMOVR5,#0NEXT:MOVTH0,#0FCH;定时器方式1中断后需要重新设置定时器定时值MOVTL0,#18HRETIKBHIT: PUSHPSWPUSH ACC PUSH DPHPUSH DPL PUSH DATA_OUTPUSH BIT_COUNTMOV A,R0PUSH ACCMOV A,R1PUSH ACC MOV DATA_OUT,#00010101B LCALL SENDLCALL DELAY25LCALL RECEIVEMOV A,DATA_INJZ STARTDEC ADEC AJ
13、Z STOPDEC AJZ CLEARSJMP OUTSTART: SETB TR0 SJMP OUTSTOP: CLR TR0 SJMP OUTCLEAR: MOVR2,#0MOVR3,#0MOVR4,#0MOVR5,#0OUT: POP ACC MOV R1,APOP ACCMOV R0,APOP BIT_COUNT POP DATA_OUTPOP DPLPOP DPHPOP ACCPOPPSWRETI ;延时25ms子程序DELAY25MS:MOVR0,#49D11:MOVR1,#253NOPD12:DJNZR1,D12DJNZR0,D11RET;延时50s子程序DELAY50:MOVR0,#23NOPD21:DJNZR0,D21RET;延时25s子程序DELAY25:MOVR0,#11D31:DJNZR0,D31RET;延时8s子程序DELAY8:MOVR0,#2NOPD41:DJNZR0,D41RET;延时1ms子程序DELAY1MS:MOVR0,#2NOPD51:MOVR1,#247NOPD52:DJNZR1,D52DJNZR0,D51RETEND仅供学习与交流,如有侵权请联系网站删除 谢谢11