流水灯每盏闪动的时间java 间隔1秒执行是1秒

最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序-牛宝宝文章网
最经典的51单片机经典流水灯汇编程序 26 流水灯汇编程序
单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#B最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#B最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#B最下面第三个的LED点亮 (以下省略)LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B完成第一次循环点亮,延时约0.25秒AJMP START反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00程序上电从00h开始跳转到主程序org 0030主程序起始地址main:mov a,#0给A赋值成loop:mov p1,将A送到P1口,发光二极管低电平点亮调用延时子程序累加器A循环左移一位重新送P1显示delay:mov r3,#20最外层循环二十次d1:mov r4,#80次外层循环八十次d2:mov r5,#250最内层循环250次djnz r5,$总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
0程序从0地址开始START:
A,#0FEH让ACC的内容为LOOP:
P2,A让P2口输出ACC的内容RR
A让ACC的内容左移CALL
DELAY调用延时子程序LJMP
LOOP跳到LOOP处执行;0.1秒延时子程序(12MHz晶振)===================DELAY:
R7,#200R7寄存器加载200次数D1:
R6,#250R6寄存器加载250次数DJNZ
R6,$本行执行R6次DJNZ
R7,D1D1循环执行R7次RET
返回主程序END
结束程序开关控制的单片机流水灯 汇编在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。 具体要求:当拨动开关K1发出低电平(K1=0)时,L1-L8从两头向中间逐个点亮,当L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。当拨动开关K1发出高电平(K1=1)时,中间的L4、L5点亮,然后点亮的灯向两边扩展,直到L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。悬赏分:20 - 解决时间: 13:42提问者: ---------最佳答案:;--------------------------------------------下列程序,经过了编译、仿真,可以满足要求。;--------------------------------------------ORG 0000HMOV R2, #0M_LOOP:MOV A, R2INC R2ANL A, #07HMOV C, P1.0MOV ACC.3, CMOV DPTR, #TABMOVC A, @A + DPTRMOV P0, ACALL DL5KTSJMP M_LOOP;--------------------------------------------TAB:DB
0xFF, 0xE7, 0xC3, 0x81, 0x00, 0x00, 0x00, 0x00DB
0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00;--------------------------------------------DL5KT:mov
R5, #10MOV
R6, #100MOV
R7, #250DJNZ R7, $DJNZ R6, $ - 4DJNZ R5, $ - 8RET;--------------------------------------------END流水灯汇编程序8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#B最下面的LED点亮LCALL DELAY延时1秒MOV P1,#B最下面第二个的LED点亮LCALL DELAY延时1秒MOV P1,#B最下面第三个的LED点亮 (以下省略)LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B完成第一次循环点亮,延时约0.25秒AJMP START 反复循环;延时子程序,12M晶振延时约250毫秒DELAY:大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW现场保护指令(有时可以不加)MOV R4,#2L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)DJNZ R2 ,L1 中层循环:256次DJNZ R4 ,L3外层循环:2次POP PSWRETEND51汇编单片机LED花样流水灯(1)start:CLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
SETB P1.4最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序ACALL DELAYCLR P1.5ACALL DELAYSETB P1.5ACALL DELAYCLR P1.6ACALL DELAYCLR P1.6ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYSETB P1.2ACALL DELAYCLR P1.3ACALL DELAYSETB P1.3ACALL DELAYCLR P1.4ACALL DELAYSETB P1.4ACALL DELAYCLR P1.5ACALL DELAYCLR P1.5ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYSETB P1.2ACALL DELAYCLR P1.4ACALL DELAYCLR P1.4ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYSETB P1.2ACALL DELAYCLR P1.3ACALL DELAYCLR P1.3ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYCLR P1.2ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYCLR P1.1ACALL DELAYSETB P1.0ACALL DELAYSETB P1.1ACALL DELAYSETB P1.2ACALL DELAYSETB P1.3ACALL DELAYSETB P1.4ACALL DELAYSETB P1.5ACALL DELAYSETB P1.6ACALL DELAYSETB P1.7ACALL DELAYAJMP startDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#B最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#B最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#B最下面第三个的LED点亮 (以下省略)LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B完成第一次循环点亮,延时约0.25秒AJMP START 反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00程序上电从00h开始跳转到主程序org 0030主程序起始地址main:mov a,#0给A赋值成loop:mov p1,将A送到P1口,发光二极管低电平点亮调用延时子程序累加器A循环左移一位重新送P1显示delay:mov r3,#20最外层循环二十次d1:mov r4,#80次外层循环八十次d2:mov r5,#250最内层循环250次djnz r5,$总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机汇编程序集作者:段磊 最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序41、浮点数顺序查找程序42、浮点数最值查找程序43、单字节折半查找程序;片内RAM初始化子程序IBCLR
R7,IBC1RET;片外RAM初始化子程序EBCLR1
A,ADDPLMOV
A,ADDPHMOV
@DPTR,AINC
R7,EBC11RET;片外RAM初始化子程序(双字节个单元)
A,ADDPLMOV
A,ADDPHMOV
@DPTR,AINC
R7,EBC21DJNZ
R6,EBC21RET;内部RAM数据复制程序;入口
:R0,R7;占用资源:A;堆栈需求:2字节;出口
RET;外部RAM数据复制程序;入口
:ADDPH,ADDPL,R7占用资源:ACC;堆栈需求:2字节;出口
:R0,R1EBMOV1
R0,#0FFH,EBM12
A,#0FFH,EBM13
RET;外部RAM数据复制程序;入口
:ADDPH,ADDPL,R6,R7占用资源:ACC;堆栈需求:2字节;出口
:R0,R1EBMOV2
R0,#0FFH,EBM22
A,#0FFH,EBM23
RET;外部RAM数据复制到内部RAM程序入口
:ADDPH,ADDPL,R7占用资源:ACC;堆栈需求:2字节;出口
:R0ITEMOV :MOV
A,#0FFH,ITEM2
RET;限幅滤波程序;入口
:A,SDAT,DELTY占用资源:B;堆栈需求:2字节;出口
:AJUGFILT :MOV
RET;中位值滤波程序;入口
:ADDPH,ADDPL,N占用资源:ESELSORT;堆栈需求:4字节;出口
:AMEDFILT :LCALL ESELSORT
DPH 51单片机汇编程序集(二)日 星期五 10:27辛普生积分程序内部RAM数据排序程序(升序)外部RAM数据排序程序(升序)外部RAM浮点数排序程序(升序)BCD小数转换为二进制小数(2位)BCD小数转换为二进制小数(N位)BCD整数转换为二进制整数(1位)BCD整数转换为二进制整数(2位)BCD整数转换为二进制整数(3位)BCD整数转换为二进制整数(N位)二进制小数(2位)转换为十进制小数(分离BCD码) 二进制小数(M位)转换为十进制小数(分离BCD码) 二进制整数(2位)转换为十进制整数(分离BCD码) 二进制整数(2位)转换为十进制整数(组合BCD码) 二进制整数(3位)转换为十进制整数(分离BCD码) 二进制整数(3位)转换为十进制整数(组合BCD码)二进制整数(M位)转换为十进制整数(组合BCD码)三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;辛普生积分程序;入口: DPTR,N,COUNT;占用资源: ACC,R3,R4,R6,R7;堆栈需求: 2字节;出口: R3,R4SJF : MOV R7,NMOVX A,@DPTRINC DPTR MOV R4,AMOV R3,#00H DEC R7SJF1 : MOVX A,@DPTR INC DPTRCLR C RLC AMOV R6,A CLR ARLC A XCH A,R7JNB ACC.0,SJF2 XCH A,R6RLC AXCH A,R6 XCH A,R7RLC A XCH A,R7SJF2 : XCH A,R7 XCH A,R6ADD A,R4 MOV R4,AMOV A,R6 ADDC A,R3MOV R3,A DJNZ R7,SJF1SJF3 : MOVX A,@DPTR ADD A,R4MOV R4,ACLR A ADDC A,R3MOV R3,A MOV R7,#COUNTLCALL NMUL21 MOV A,NMOV B,#03H MUL ABMOV R7,A最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序LCALL NDIV31RET NMUL21 : MOV A,R4MOV B,R7 MUL ABMOV R4,A MOV A,BXCH A,R3 MOV B,R7MUL AB ADD A,R3MOV R3,A CLR AADDC A,B MOV R2,ACLR OVRET NDIV31 : MOV B,#10HNDV311 : CLR C MOV A,R4RLC A MOV R4,AMOV A,R3 RLC AMOV R3,A MOV A,R2RLC A MOV R2,AMOV F0,C CLR CSUBB A,R7JB F0,NDV312 JC NDV313NDV312 : MOV R2,A INC R4NDV313 : DJNZ B,NDV311 RET;内部RAM数据排序程序(升序);入口: R0(起始地址),N(数据个数);占用资源: ACC,B,R5,R6,R7;堆栈需求: 2字节;出口: R0ISELSORT : MOV R7,N DEC R7ISST1: MOV A,R7 MOV R6,AMOV A,R0 MOV R1,AMOV B,@R1 ISST2: INC R1MOV A,@R1 CLR CSUBB A,B JC ISST3MOV A,R1 MOV R2,AMOV B,@R1 ISST3: DJNZ R6,ISST2MOV A,B XCH A,@R1MOV B,R2 MOV R1,BMOV @R1,ADJNZ R7,ISST1 RET;外部RAM数据排序程序(升序);入口: ADDPH,ADDPL(起始地址),N(数据个数) ;占用资源: ACC,B,R0,R1,R5,R7;堆栈需求: 2字节;出口: ADDPH-ADDPLESELSORT : MOV R7,N DEC R7ESST1: MOV A,R7 MOV R6,AMOV DPL,ADDPL MOV R1,DPLMOV DPH,ADDPH MOV R0,DPHMOVX A,@DPTRMOV B,A ESST2: INC DPTRMOVX A,@DPTR CLR CSUBB A,BJC ESST3MOV R0,DPL MOV R1,DPHMOVX A,@DPTR MOV B,AESST3: DJNZ R6,ESST2 MOVX A,@DPTRXCH A,B MOVX @DPTR,AMOV DPL,R0 MOV DPH,R1MOVX @DPTR,A DJNZ R7,ESST1RET;外部RAM浮点数排序程序(升序);入口: ADDPH,ADDPL(起始地址),N(数据个数);占用资源: ACC,B,R0,R1,R2,R3,R4,R5,R6,R7,NCNT ;堆栈需求: 5字节;出口: ADDPH,ADDPLFSORT: MOV A,NMOV NCNT,A DEC NCNTFST1 : MOV B,NCNT MOV DPL,ADDPLMOV R1,DPL MOV DPH,ADDPHMOV R0,DPHMOVX A,@DPTR MOV R2,AINC DPTR MOVX A,@DPTRMOV R3,A INC DPTRMOVX A,@DPTR MOV R4,AFST2 : INC DPTR MOVX A,@DPTRMOV R5,A INC DPTRMOVX A,@DPTR MOV R6,AINC DPTRMOVX A,@DPTR MOV R7,APUSH B LCALL FCMPPOP BJNC FST4MOV A,DPL CLR CSUBB A,#02H MOV R1,AMOV R0,DPH JNC FST3DEC R0 FST3 : MOV A,R5MOV R2,A MOV A,R6MOV A,R7 MOV R4,AFST4 : DJNZ B,FST2 MOV A,DPLCLR C SUBB A,#02HMOV DPL,A JNC FST5DEC DPH FST5 : MOV A,R2MOVX @DPTR,A INC DPTRMOV A,R3 MOVX @DPTR,AINC DPTRMOV A,R4 MOVX @DPTR,AMOV A,R0 MOV P2,AMOV A,R5 MOVX @R1,AINC R1 MOV A,R6MOVX @R1,A INC R1MOV A,R7 MOVX @R1,ADJNZ NCNT,FST1 RET;BCD小数转换为二进制小数(2位) ;入口: R0(低位首址),R7 ;占用资源: ACC,B,R5;堆栈需求: 2字节;出口: R3,R4PDTB : CLR AMOV R3,AMOV R4,APDB1 : MOV A,R3 MOV B,#9AHMUL AB MOV R5,BXCH A,R4 MOV B,#19HMUL AB ADD A,R4MOV A,R5 ADDC A,BMOV A,@R0 MOV B,#9AHMUL AB ADD A,R5MOV R4,A CLR AADDC A,B XCH A,R3MOV B,#19H MUL ABADD A,R4 MOV R4,AMOV A,B ADDC A,R3MOV R3,AMOV A,@R0 MOV B,#19HMUL AB ADD A,R3MOV R3,A DEC R0DJNZ R7,PDB1 RET;BCD小数转换为二进制小数(N位) ;入口: R1(低位首址),M,N ;占用资源: ACC,B,R2,R3,R7 ;堆栈需求: 2字节;出口: R0PDTBMN : MOV A,R0 MOV R2,AMOV A,R1MOV R3,A MOV B,NCLR A PDBMN1 : MOV @R0,A INC R0DJNZ B,PDBMN1MOV A,N SWAP ARR A MOV R7,APDBMN2 : MOV A,R2 MOV R0,AMOV A,R3 MOV R1,AMOV B,M CLR C最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序PDBMN3 : MOV A,@R1ADDC A,@R1 DA AJNB ACC.4,PDBMN4 SETB CCLR ACC.4 PDBMN4 : MOV @R1,AINC R1 DJNZ B,PDBMN3MOV B,N PDBMN5 : MOV A,@R0RLC A MOV @R0,AINC R0 DJNZ B,PDBMN5DJNZ R7,PDBMN2MOV A,R2 MOV R0,ARET;BCD整数转换为二进制整数(1位);入口: R0(高位地址),R7;占用资源: ACC,B;堆栈需求: 2字节;出口: R4IDTB1: CLR AMOV R4,A IDB11: MOV A,R4MOV B,#0AH MUL ABADD A,@R0 INC R0MOV R4,ADJNZ R7,IDB11 RET;BCD整数转换为二进制整数(2位);入口: R0(高位地址),R7;占用资源: ACC,B;堆栈需求: 2字节;出口: R3,R4IDTB2: CLR A MOV R3,AMOV R4,A IDB21: MOV A,R4MOV B,#0AH MUL ABMOV R4,A MOV A,BMOV B,#0AH MUL ABADD A,R3 MOV R3,AMOV A,R4 ADD A,@R0INC R0 MOV R4,ACLR A ADDC A,R3MOV R3,A DJNZ R7,IDB21RET;BCD整数转换为二进制整数(3位);入口: R0(高位地址),R7;占用资源: ACC,B;堆栈需求: 2字节;出口: R2,R3,R4IDTB3: CLR A MOV R2,AMOV R3,A MOV R4,AIDB31: MOV A,R4 MOV B,#0AHMUL AB MOV R4,AMOV A,B XCH A,R3MOV B,#0AH MUL ABADD A,R3MOV R3,A CLR AADDC A,B XCH A,R2MOV B,#0AHMUL ABADD A,R2 MOV R2,AMOV A,R4 ADD A,@R0INC R0 MOV R4,ACLR A ADDC A,R3MOV R3,A CLR AMOV R2,A DJNZ R7,IDB31RET;BCD整数转换为二进制整数(N位);入口: R1(高位地址),M,N;占用资源: ACC,B,R2,R7,NCNT,F0;堆栈需求: 2字节;出口: R0IDTBMN : MOV A,R0MOV R2,A MOV B,NCLR A IDBMN1 : MOV @R0,AINC R0 DJNZ B,IDBMN1MOV A,R2MOV R0,A MOV A,MMOV NCNT,A IDBMN2 : MOV R7,NCLR A CLR F0IDBMN3 : XCH A,@R0 MOV B,#0AHMUL AB MOV C,F0ADDC A,@R0 MOV F0,CMOV @R0,A INC R0MOV A,BDJNZ R7,IDBMN3 MOV A,R2MOV R0,A MOV A,@R1INC R1ADD A,@R0MOV @R0,A DJNZ NCNT,IDBMN2RET;二进制小数(2位)转换为十进制小数(分离BCD码) ;入口: R3,R4,R7;占用资源: ACC,B;堆栈需求: 3字节;出口: R0PBTD : MOV A,R7PUSH APBD1 : MOV A,R4 MOV B,#0AHMUL AB MOV R4,AMOV A,B XCH A,R3MOV B,#0AH MUL ABADD A,R3 MOV R3,ACLR A ADDC A,BMOV @R0,A INC R0DJNZ R7,PBD1POP A MOV R7,AMOV A,R0 CLR CSUBB A,R7 MOV R0,ARET;二进制小数(M位)转换为十进制小数(分离BCD码) ;入口: R1,M,N;占用资源: ACC,B,R2,R3,R7,NCNT;堆栈需求: 2字节;出口: R0PBTDMN : MOV A,R0MOV R2,A MOV A,R1MOV R3,AMOV A,N MOV NCNT,APBDMN1 : MOV R7,M CLR ACLR F0PBDMN2 : XCH A,@R1MOV B,#0AH MUL ABMOV C,F0 ADDC A,@R1MOV F0,C MOV @R1,AINC R1 MOV A,BDJNZ R7,PBDMN2 ADDC A,#00HMOV @R0,AINC R0 MOV A,R3MOV R1,A DJNZ NCNT,PBDMN1MOV A,R2 MOV R0,ARET;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD21 : MOV NCNT,#00HMOV R2,#00H IBD211 : MOV R7,#0AHLCALL NDIV31MOV A,R7 MOV @R0,AINC R0 INC NCNTMOV A,R3 ORL A,R4JNZ IBD211 MOV A,R0CLR C SUBB A,NCNTMOV R0,A RET;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD22 : MOV A,R0PUSH A MOV R7,#03HCLR A IBD221 : MOV @R0,AINC R0 DJNZ R7,IBD221POP A MOV R0,AMOV R7,#10H IBD222 : PUSH ACLR C MOV A,R4最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序RLC AMOV R4,A MOV A,R3RLC A MOV R3,AMOV B,#03H IBD223 : MOV A,@R0ADDC A,@R0 DA AMOV @R0,A INC R0DJNZ B,IBD223 POP AMOV R0,A DJNZ R7,IBD222RET;二进制整数(3位)转换为十进制整数(分离BCD码);入口: R2,R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD31 : CLR A MOV NCNT,AIBD311 : MOV R7,#0AH LCALL NDIV31MOV A,R7 MOV @R0,AINC R0 INC NCNTMOV A,R2 ORL A,R3ORL A,R4JNZ IBD311 MOV A,R0CLR C SUBB A,NCNTMOV R0,ARET;二进制整数(3位)转换为十进制整数(组合BCD码);入口: R2,R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD32 : MOV A,R0 PUSH AMOV R7,#04H CLR AIBD321 : MOV @R0,AINC R0 DJNZ R7,IBD321POP A MOV R0,AMOV R7,#18H IBD322 : PUSH ACLR C MOV A,R4RLC A MOV R4,AMOV A,R3 RLC AMOV R3,A MOV A,R2RLC AMOV R2,A MOV B,#04HIBD323 : MOV A,@R0 ADDC A,@R0DA A MOV @R0,AINC R0 DJNZ B,IBD323POP A MOV R0,ADJNZ R7,IBD322 RET;二进制整数(M位)转换为十进制整数(组合BCD码);入口: R1,M,N;占用资源: ACC,B,R2,R3,R7;堆栈需求: 2字节;出口: R0IBTDMN : MOV A,R0MOV R2,A MOV A,R1MOV R3,AMOV B,NCLR A IBDMN1 : MOV @R0,AINC R0 DJNZ B,IBDMN1MOV A,M SWAP ARR A CLR CMOV R7,A IBDMN2 : MOV A,R2MOV R0,AMOV A,R3 MOV R1,AMOV B,M IBDMN3 : MOV A,@R1RLC A MOV @R1,AINC R1 DJNZ B,IBDMN3MOV B,N IBDMN4 : MOV A,@R0ADDC A,@R0 DA AJNB ACC.4,IBDMN5 SETB CCLR ACC.4IBDMN5 : MOV @R0,A INC R0DJNZ B,IBDMN4 DJNZ R7,IBDMN2MOV A,R2 MOV R0,ARET;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7;入口: R2,R3,R4,R7;占用资源: ACC,B,F0;堆栈需求: 3字节;出口: (R2),R3,R4,R7,OVNDIV31 : MOV A,R2MOV B,R7 DIV ABPUSH AMOV R2,B MOV B,#10HNDV311 : CLR C MOV A,R4RLC AMOV R4,AMOV A,R3 RLC AMOV R3,A MOV A,R2RLC A MOV R2,AMOV F0,C CLR CSUBB A,R7 JB F0,NDV312JC NDV313NDV312 : MOV R2,A INC R4NDV313 : DJNZ B,NDV311 POP ACLR OV JZ NDV314SETB OV NDV314 : XCH A,R2MOV R7,A RET第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程 收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。 显示的数字不对。该程序在本站XP开发套件上调试通过,以下是程序运行在XP版时的照片.(sorry, 照片很模糊)数码管显示数字注意0为点亮 1 为灭显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码0 0 0 1 0 1 0 0 0 28H1 0 1 1 1 1 1 1 0 7EH2 1 0 1 0 0 0 1 0 A2H3 0 1 1 0 0 0 1 0 62H4 0 1 1 1 0 1 0 0 74H5 0 1 1 0 0 0 0 1 61H6 0 0 1 0 0 0 0 1 21H7 0 1 1 1 1 0 1 0 7AH8 0 0 1 0 0 0 0 0 20H9 0 1 1 0 0 0 0 0 60H代码表的意思和方法参照前面的教程; 注意0为点亮 1 为灭然后我们可以把代码送到P0口,就可以是数码管显示需要的数字; 当然, 必须有位选,因为我们的实验板是动态扫描数码管, 两个8的位选分别是P2.6
P2.7.LOOP:
; 标号CLR P2.6
;选中p2.6 数码管左边的8字使能SETB P2.7
;p2.7不使能。 右边的数码管消隐MOV P0,#28H ;把28h送p0口;数码管显示 0LCALL DELAY ;延时MOV P0,#0FFH
;0ffh 送p0口,数码管清除CLR P1.0
;点亮p1.0发光管MOV P0,#7EH ;把7eh送p0口;数码管显示 1LCALL DELAYMOV P0,#0FFHCLR P1.1点亮p1.0发光管CLR P1.0点亮p1.0发光管MOV P0,#0A2H数码管显示 2LCALL DELAYMOV P0,#0FFHCLR P1.2CLR P1.1CLR P1.0MOV P0,#62H数码管显示 3 LCALL DELAYMOV P0,#0FFHCLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#74H ;数码管显示 4 LCALL DELAYMOV P0,#0FFHCLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#61H数码管显示 5; LCALL DELAYMOV P0,#0FFHCLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#21H 数码管显示 6 LCALL DELAYMOV P0,#0FFHCLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#7AH 数码管显示 7 LCALL DELAYMOV P0,#0FFHCLR P1.7CLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#20H 数码管显示 8 LCALL DELAYMOV P0,#0FFHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFH最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序;程序到此结果为左边的数码管显示0,1,2,3,4,5,6,7,8;p1.0------------p1.7指示灯依次点亮SETB P2.6
; 左边的8消隐CLR P2.7
;选中p2.7 数码管右边的8字使能 ,;MOV P0,#28HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.0MOV P0,#7EHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.1MOV P0,#0A2HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.2MOV P0,#62HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.3MOV P0,#74HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.4MOV P0,#61HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.5MOV P0,#21HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.6MOV P0,#7AHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.7MOV P0,#20HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHMOV P0,#0FFHMOV P1,#0FFH;这一段和上一段基本相同,不同的是右边的数码管依次显示,左边的不亮;;同时p1口的灯流动显示:AJMP LOOP; 注意: 程序运行到此跳转到开始标号,重复执行:DELAY: ;延时子程序;参考前面的教程:CLR P3.3 ;注意小喇叭在3.3口, 这里可以使小喇叭发出嗒,嗒声MOV R7,#255NOPNOPD1:MOV R6,#255setb p3.3D2: DJNZ R6,D2clr p3.3DJNZ R7,D1SETB P3.3RETEND第六个试验:认识数码管扫描程序----51单片机汇编语言试验教程 收藏玩单片机一定要玩转数码管了;上图是我们xp套件的两位数码管的截图照片;这个数码管怎样来显示1,2,3,4呢?别着急, 听我慢慢道来。数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们的xp套件和倚天套件用的都是两位8的共阳极扫描型数码管。什么是共阳极呢;就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的由他们的位选位来控制哪一位的数码管来亮。 看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管 哪一边亮。动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。现在大家应当明白了我们应当怎样做, 如果显示一个2字,那么呢应当是A亮B亮G亮E亮D亮F不亮C不亮。 现在在看看我们的倚天套件的硬件原理。可以看到他的COM端由两个A1015的三极管控制,控制端分别接在P2.6, P2.7,字段则分别接在P0.0--0.7口。 假如我们要让左边的数码管显示一个2字可以编以下的程序。CLR P2.6;选中左边的数码管SETB P2.7;不选右边的数码管SETB P0.7;B段不亮SETB P0.5;小数点不亮SETB P0.1;C段不亮CLR P0.2;其余的都亮CLR P0.3CLR P0.4CLR P0.6CLR P0.0END运行程序可以看到他们显示的数字为2。在这样一种情况下, 我们会发现这个程序非常麻烦。呵呵,现在回到上面一课,跟我来作加减法;就会发现一排数字其实就是二进制的数字。 我们把他转换为16进制。 直接送到P0口就行啦。注意0为点亮 1 为灭显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码0 0 0 1 0 1 0 0 0 28H1 0 1 1 1 1 1 1 0 7EH2 1 0 1 0 0 0 1 0 A2H3 0 1 1 0 0 0 1 0 62H4 0 1 1 1 0 1 0 0 74H5 0 1 1 0 0 0 0 1 61H6 0 0 1 0 0 0 0 1 21H7 0 1 1 1 1 0 1 0 7AH8 0 0 1 0 0 0 0 0 20H9 0 1 1 0 0 0 0 0 60H我们把他从高往低排列为二进制,例如2,就是, 用计算器转换为16进制就是A2.我们在单片机里为了把16进制和10 进制有所区别, 就把16进制后面跟一个H,同时如果首位为字母的为了区别于指令, 同时前面跟一个0, 就成了0A2H了。大家可能有一点疑问, 为啥P0.5始终为1呢。 因为它接在小数点上。我们没有用它而已。根据上面的方法。如果我们把数码管的接线给打乱, 同样的可以分析出他的数字代码。现在程序就简单啦:还是显示一个2字:CLR P2.6;选中右边的数码管SETB P2.7;不选左边的数码管MOV P0,#0A2H;将送P0口END可以看到显示的结果是一样的。把所有的代码分析出来后以后编程序就可以直接调用啦。 我们的倚天版套件注意一共用了4个数码管他们的位选为P2.3 P2.4 P2.6 P2.7 这样他一共可以显示四位数字。甚至我们可以直接用它来做一个显示仪表,或者闹钟了。他的0,1,2,3,4,5,6,7,8,9 的代码分别为28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h以下为我们的倚天版开发套件运行现实8051的程序loop:mov p0,#0ffh;关显示mov p2,#0ffh;关显示clr p2.4
;选中第一个数码管mov p0,#20h ;数码管显示8lcall delay;调用延时mov p0,#0ffhmov p2,#0ffhclr p2.5;选中第二个数码管mov p0,#28h;数码管显示0lcall delaymov p2,#0ffhmov p0,#0ffhclr p2.6;选中第三个数码管mov p0,#61h;数码管显示5lcall delaymov p0,#0ffhmov p2,#0ffhclr p2.7;选中第四个数码管mov p0,#7eh;数码管显示1lcall delayajmp loop;程序条转到第一步,反复执行delay:;延时子程序mov r6,#250d1:djnz r6,d1retend单片机流水灯程序发表于: 13:23程序A:ORG 0000HSTART:MOV P1,#B最下面的LED点亮LCALL DELAYMOV P1,#B最下面第二个的LED点亮LCALL DELAYMOV P1,#B最下面第三个的LED点亮 (以下省略) LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B完成第一次循环点亮,延时约0.25秒
AJMP START反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:org 00程序上电从00h开始跳转到主程序org 0030主程序起始地址main:mov a,#0给A赋值成loop:mov p1,将A送到P1口,发光二极管低电平点亮调用延时子程序累加器A循环左移一位重新送P1显示delay:mov r3,#20最外层循环二十次d1:mov r4,#80次外层循环八十次d2:mov r5,#250最内层循环250次djnz r5,$总共延时2us*250*80*20=0.8S
djnz r4,d2djnz r3,d1retend程序C:#include&reg51.h&#include &intrins.h&void delayms(unsigned char ms) // 延时子程序 {while(ms--){for(i = 0; i & 120; i++);}}main(){unsigned char LED;LED = 0P1 = LED;while(1){delayms(200);LED = LED&&1;
//循环右移1位,点亮下一个LED最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序P1 = LED;}}*Welcome to chiptype:AT89S52 (6MHz)keil C 7.50By Tigerman(站长)*/#include &reg52.h&void delay(int i);int main(void){while (1){for(i=0;i&8;i++){P1=(1&&i);//正向流水灯delay(1000);}for(i=0;i&8;i++){P1=(1&&(7-i));//反向流水灯delay(1000);}}}void delay(int i){int j=&0&;for(j=0;j&i;j++);}c语言流水灯c语言流水灯/*******************************************************************************Title:
演示程序1 - LED流水灯*
**********************************************************************************
延时实现LED流水灯效果**
********************************************************************************* /#include&reg51.h&#include &intrins.h&void delayms(unsigned char ms) // 延时子程序{while(ms--){for(i = 0; i & 120; i++);}}main(){unsigned char LED;LED = 0P0 = LED;while(1){delayms(200);LED = _crol_(LED,1);
//循环右移1位,点亮下一个LEDP0 = LED;}}ORG 0000HAJMP MAINORG 0030HMAIN:
MOV A,#0FEH送数据初值MOV P1,A数据送P1口点亮发光二极管ACALL DELAY延时MOV R3,#07H设置左移7次LOOP:
左移一位MOV P1,A数据送P1口点亮发光二极管ACALL DELAY延时DJNZ R3,LOOPR3是否为0,不为0转LOOP继续执行AJMP MAIN返回主程循环执DELAY:
MOV R7,#255延时子程序D1:
MOV R6,#255D2:
DJNZ R6,D2DJNZ R7,D1RET
子程序返回END
程序结束1.单片机系统中常用的显示器有:发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。2.段选dula 和位选wela:(分别是P2^6,P2^7)每个8段数码管都有一个公共端,这是位选(P2),低电平有效。数码管的A~G,AP是段选(P0),共阴极结构,所以高电平有效。用2个74HC573来分别控制段选和位选。注意在P0口与锁存器之间要加10K上拉电阻。3.锁存器 74HC573 原理锁存器,就是把单片机的输出的数先存起来,可以让单片机继续做其它事..比如说,74HC373就是一种锁存器。它的LE为高的时候,数据就可以通过它.当为低时,它的输出端就会被锁定,即为刚才通过的数据,这样,就可以保持这个状态.4.一段小程序帮助理解段选位选和锁存器#include&reg52.h&sbit dula=P2^6;sbit wela=P2^7;#define uchar unsigned char#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint);void main(){wela=1;P0=0// 这里位选用的是P0,为啥不是P2呢?在我编程时用P2时点不亮数码管wela=0;while(1){for(i=0;i&16;i++){dula=1;P0=table[i];dula=0;delay(1000);}}}void delay(uint n){uint x,y;for(x=n;x&0;x--)for(y=110;y&0;y--);}5. 中断的概念CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。6.单片机中断重点。这里要熟练理解单片机中断源和中断条件。总中断(EA)-----中断允许位(EX0,ET0,EX1,ET1,ES)------中断标志(IE0,TF0,IE1,TF1)IE包括:EX0,ET0,EX1,ET1,ES,EA.中断优先级排列:IE0,TF0,IE1,TF1.中断响应条件:中断原有中断请求;此中断源的中断允许位为1;CPU开中断(即EA=1)。7.中断的子程序:void exter0() interrupt 0 /*interrupt 0是外部中断0,1是T0,2是外部中断1,3是T1,4是串口中断*/{……..……..}8.定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。9. 定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t 。T=50*1/12*12=50
ms设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。在每个机器周期的S5P2期间采样T0、T1引脚电平。当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序的S3P1期间装入计数器。由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2 ms。10.GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。C/T(非) :定时/计数模式选择位。
C/T(非) =0为定时模式;C/T(非) =1为计数模式。M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。主要为方式1:TH0控制高8位,TL0控制低8位。要用TO设置TMOD的低8位,要用T1设置TMOD 的高8位。所以我用T0工作在方式1以定时方式的话,就写TMOD=0x01然后计算TH0和TL0;计数个数和计数初值的关系:X= -N如果是50ms 一次的话N=50000,60ms ,N为60000.因为50ms=N*1/12(晶振周期,TX-1C板为11.0592,直接取的12MHZ)*12(固定值,12个晶振周期为1个机器周期)。这时TH0=()/256TL0=() %256。然后开启定时器T0,TR0=1;注意之前要把中断打开,EA=1,ET0=1,还有在写程序时,中断子程序为interrupt 1,而不是0了。11.例子:#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit dula=P2^6;sbit wela=P2^7;sbit d1=P1^0;uchar num,num1;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint z);void main(){num=0;tt=0;TMOD=0x11;//设置定时器0为工作方式1TH0=()/256;TL0=()%256;TH1=()/256;TL1=()%256;//
EA=1;//开总中断ET0=1;//开定时器0中断ET1=1;TR0=1;//启动定时器0TR1=1;wela=1;//P0=0wela=0;dula=1;P0=0x3f;dula=0;while(1){if(num1==25){num1=0;P1=~P1;}if(tt==100){tt=0;num++;if(num==16)num=0;dula=1;P0=table[num];dula=0;}}}void delay(uint z){uint x,y;for(x=z;x&0;x--)for(y=110;y&0;y--);}void time0() interrupt 1{TH0=()/256;TL0=()%256;tt++;}void time1() interrupt 3{TH1=()/256;TL1=()%256;num1++;}第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程 收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。 显示的数字不对。该程序在本站XP开发套件上调试通过,以下是程序运行在XP版时的照片.数码管显示数字注意0为点亮 1 为灭显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码0 0 0 1 0 1 0 0 0 28H1 0 1 1 1 1 1 1 0 7EH2 1 0 1 0 0 0 1 0 A2H3 0 1 1 0 0 0 1 0 62H4 0 1 1 1 0 1 0 0 74H5 0 1 1 0 0 0 0 1 61H6 0 0 1 0 0 0 0 1 21H7 0 1 1 1 1 0 1 0 7AH8 0 0 1 0 0 0 0 0 20H9 0 1 1 0 0 0 0 0 60H代码表的意思和方法参照前面的教程; 注意0为点亮 1 为灭然后我们可以把代码送到P0口,就可以是数码管显示需要的数字; 当然, 必须有位选,因为我们的实验板是动态扫描数码管, 两个8的位选分别是P2.6
P2.7.LOOP:
; 标号CLR P2.6
;选中p2.6 数码管左边的8字使能SETB P2.7
;p2.7不使能。 右边的数码管消隐MOV P0,#28H ;把28h送p0口;数码管显示 0LCALL DELAY ;延时MOV P0,#0FFH
;0ffh 送p0口,数码管清除CLR P1.0
;点亮p1.0发光管MOV P0,#7EH ;把7eh送p0口;数码管显示 1LCALL DELAYMOV P0,#0FFHCLR P1.1点亮p1.0发光管CLR P1.0点亮p1.0发光管MOV P0,#0A2H数码管显示 2LCALL DELAYMOV P0,#0FFHCLR P1.2CLR P1.1CLR P1.0MOV P0,#62H数码管显示 3LCALL DELAYMOV P0,#0FFHCLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#74H ;数码管显示 4LCALL DELAYMOV P0,#0FFHCLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#61H数码管显示 5;LCALL DELAYMOV P0,#0FFHCLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#21H 数码管显示 6LCALL DELAYMOV P0,#0FFHCLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#7AH 数码管显示 7LCALL DELAYMOV P0,#0FFHCLR P1.7CLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#20H 数码管显示 8LCALL DELAYMOV P0,#0FFHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFH;程序到此结果为左边的数码管显示0,1,2,3,4,5,6,7,8 ;p1.0------------p1.7指示灯依次点亮SETB P2.6
; 左边的8消隐CLR P2.7
;选中p2.7 数码管右边的8字使能 ,;MOV P0,#28HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFH最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序CLR P1.0MOV P0,#7EHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.1MOV P0,#0A2HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.2MOV P0,#62HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.3MOV P0,#74HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.4MOV P0,#61HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.5MOV P0,#21HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.6MOV P0,#7AHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.7MOV P0,#20HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHMOV P0,#0FFHMOV P1,#0FFH;这一段和上一段基本相同, 不同的是右边的数码管依次显示,左边的不亮;;同时p1口的灯流动显示:AJMP LOOP; 注意: 程序运行到此跳转到开始标号,重复执行:DELAY: ;延时子程序;参考前面的教程:CLR P3.3 ;注意小喇叭在3.3口, 这里可以使小喇叭发出嗒,嗒声MOV R7,#255NOPNOPD1:MOV R6,#255setb p3.3D2: DJNZ R6,D2clr p3.3DJNZ R7,D1SETB P3.3RETEND第三个试验:认识单片机发音程序-----51单片机汇编语言试验教程什么是声音?上过初中的朋友都知道声音是由震动所产生的。 一定频率的震动就产生了一定频率的声音。 在我们的倚天版开发套件和XP开发套件中,实验版的P3.3口(13脚)接了一个小喇叭,如果我们往它那里送一个高电平,送一个低电平, 他就会发出滴嗒的声音。 我们把上面的闪烁发光管试验的P1.0改为P3.3就好了。上图就是我们倚天版开发套件的小喇叭LOOP: SETB P3.3LCALL DELAYCLR P3.3LCALL DELAYAJMP LOOPDELAY: MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND这时候我们就可以听到小喇叭的响声啦。可是有的朋友会问,声音又那么多种,怎么办呢?很简单, 我们把它的延时时间给改一下, 声音就会有所变化了。LOOP: SETB P3.3LCALL DELAYCLR P3.3LCALL DELAYAJMP LOOPDELAY: MOV R7,#25D1:MOV R6,#25D2:DJNZ R6,D2DJNZ R7,D1RETEND这时候我们就可以听到小喇叭发出嘀“的尖叫声。适当的调整他的延时时间, 我们就可以让他发出DO,RUI,MI,FA SO, LA , XI,DO .的声音。 这就使单片机发声的基本原理。第四个试验:小喇叭发出救护车的声音这个实验演示了我们的倚天版开发套件小喇叭发出救护车声音的实例, 您直接汇编这个文件,烧写进我们配送的89s51里面, 然后再插入试验卡座。打开电源, 就可以听到喇叭里发出滴答一长一短的报警声音。这个就有一点点使用价值啦/ 送出的端口是p3.3输出1khz,2khz变频信号报警。 每一秒交换一次。dlv: mov r2,#08h;1kz持续时间dlv1:mov r3,#0fahdlv2:cpl p3.3;输出1khz方波lcall d5ms;调用延时程序1djnz r3,dlv2;持续1秒djnz r2,dlv1mov r2,#10h;2khz持续时间dlv3:mov r3,#0fahdlv4:cpl p3.3;输出2khz方波lcall d25ms;调用延时程序2djnz r3,dlv4djnz r2,dlv3sjmp dlv;反复循环d5ms:mov r7,#0ffh;延时子程序1loop:nopnopdjnz r7,loopretd25ms:mov r6,#0ffh;延时子程序2lin:djnz r6,linretend以下是汇编以后的源代码hex。:7BFAB2B312001CDBF9DAF57A107BBE:FAB2B3120023DBF9DAF580E47FFF0000C7:DFFC227EFFDEFE2260:FF第六个试验:认识数码管扫描程序----51单片机汇编语言试验教程 收藏玩单片机一定要玩转数码管了;上图是我们xp套件的两位数码管的截图照片;这个数码管怎样来显示1,2,3,4呢?别着急, 听我慢慢道来。数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们的xp套件和倚天套件用的都是两位8的共阳极扫描型数码管。什么是共阳极呢;就是他们的公共端接正极。扫描型的意思是,几位的数码管的段选都是并联的由他们的位选位来控制哪一位的数码管来亮。 看看上面的照片,由两个黑糊糊的三极管,来控制两边的数码管 哪一边亮。动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。 在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。现在大家应当明白了我们应当怎样做, 如果显示一个2字,那么呢应当是A亮B亮G亮E亮D亮F不亮C不亮。 现在在看看我们的倚天套件的硬件原理。可以看到他的COM端由两个A1015的三极管控制,控制端分别接在P2.6, P2.7,字段则分别接在P0.0--0.7口。假如我们要让左边的数码管显示一个2字可以编以下的程序。CLR P2.6;选中左边的数码管SETB P2.7;不选右边的数码管SETB P0.7;B段不亮SETB P0.5;小数点不亮SETB P0.1;C段不亮CLR P0.2;其余的都亮CLR P0.3CLR P0.4CLR P0.6CLR P0.0END运行程序可以看到他们显示的数字为2。在这样一种情况下, 我们会发现这个程序非常麻烦。呵呵,现在回到上面一课,跟我来作加减法;就会发现一排数字其实就是二进制的数字。 我们把他转换为16进制。 直接送到P0口就行啦。注意0为点亮 1 为灭显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码0 0 0 1 0 1 0 0 0 28H1 0 1 1 1 1 1 1 0 7EH2 1 0 1 0 0 0 1 0 A2H3 0 1 1 0 0 0 1 0 62H4 0 1 1 1 0 1 0 0 74H5 0 1 1 0 0 0 0 1 61H6 0 0 1 0 0 0 0 1 21H7 0 1 1 1 1 0 1 0 7AH8 0 0 1 0 0 0 0 0 20H9 0 1 1 0 0 0 0 0 60H我们把他从高往低排列为二进制,例如2,就是, 用计算器转换为16进制就是A2.我们在单片机里为了把16进制和10 进制有所区别, 就把16进制后面跟一个H,同时如果首位为字母的为了区别于指令, 同时前面跟一个0, 就成了0A2H了。大家可能有一点疑问, 为啥P0.5始终为1呢。 因为它接在小数点上。我们没有用它而已。根据上面的方法。如果我们把数码管的接线给打乱, 同样的可以分析出他的数字代码。现在程序就简单啦:还是显示一个2字:CLR P2.6;选中右边的数码管SETB P2.7;不选左边的数码管MOV P0,#0A2H;将送P0口END可以看到显示的结果是一样的。把所有的代码分析出来后以后编程序就可以直接调用啦。 我们的倚天版套件注意一共用了4个数码管他们的位选为P2.3 P2.4 P2.6 P2.7 这样他一共可以显示四位数字。甚至我们可以直接用它来做一个显示仪表,或者闹钟了。他的0,1,2,3,4,5,6,7,8,9 的代码分别为28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h以下为我们的倚天版开发套件运行现实8051的程序loop:mov p0,#0ffh;关显示mov p2,#0ffh;关显示clr p2.4
;选中第一个数码管mov p0,#20h ;数码管显示8lcall delay;调用延时mov p0,#0ffhmov p2,#0ffhclr p2.5;选中第二个数码管mov p0,#28h;数码管显示0lcall delaymov p2,#0ffhmov p0,#0ffhclr p2.6;选中第三个数码管mov p0,#61h;数码管显示5lcall delaymov p0,#0ffhmov p2,#0ffhclr p2.7;选中第四个数码管mov p0,#7eh;数码管显示1lcall delayajmp loop;程序条转到第一步,反复执行delay:;延时子程序mov r6,#250d1:djnz r6,d1retend第一个试验:点亮一个发光管-----51单片机汇编语言试验教程 收藏一、单片机的外部结构拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、 电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、 振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、 复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、 EA引脚:EA引脚接到正电源端。 至此,一个单片机就接好,通上电,单片机就开始工作了。当然:您并不一定完全需要一片89c51, 实际上我们用8051系列的任何一种芯片都是可以的。 例如89s51,89c52等等。二、 任务分析我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻)按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。名字有了,我们又怎样让它变'高'或变'低'呢?叫人做事,说一声就可以,这叫发布命令,要计算机做事,也得要向计算机发命令,计算机能听得懂的命令称之为计算机的指令。让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。因此,我们要P1.0输出高电平,只要写SETB P1.0,要P1.0输出低电平,只要写 CLR P1.0就可以了。现在我们已经有办法让计算机去将P1.0输出高或低电平了,但是我们怎样才能计算机执行这条指令呢?总不能也对计算机也说一声了事吧。要解决这个问题,还得有几步要走。第一,计算机看不懂SETB CLR之类的指令,我们得把指令翻译成计算机能懂的方式,再让计算机去读。计算机能懂什么呢?它只懂一样东西――数字。因此我们得把SETB P1.0变为(D2H,90H ),把CLR P1.0变为 (C2H,90H ),至于为什么是这两个数字,这也是由51芯片的设计者--INTEL规定的,我们不去研究。第二步,在得到这两个数字后,怎样让这两个数字进入单片机的内部呢?这要借助于一个硬件工具&编程器&。当然, 如果您使用我们的倚天版开发套件或者xp开发套件, 那么编程器和试验板都有了,只需要编程序就可以了。这里是我们迈出单片机编程的第一步,别看很简单可是却对于您有重要的意义,没错,您在编程序了:(最经典的51单片机经典流水灯汇编程序 26_流水灯汇编程序打开我们前面介绍的uvw51e中文版;参照它的使用方法;写入程序,我们把它的名字设为:001led.最后把生成的001led.hex烧入我们的倚天版套件配的89s51里面然后把芯片换到试验卡座里,这时候我们可以看到p1.0这个灯亮了。这时可能有的朋友会问;这么简单的问题, 为啥要用单片机搞得这么复杂?接一个电池, 灯不就亮了?没错,但是这是在编程序,如果我们不要p1.0亮。 而是要p2.0亮,那么写入clr p2.0就可以啦,不需要你动烙铁来改线。这样我们看到,硬件电路的连线没有做任何改变,只要改变写入单片机中的内容,就可以改变电路的输出效果。由此可见,用硬件实现起来非常困难的问题,用单片机解决起来就很ez. 因此, 每一个硬件工程师掌握单片机技术是必由之路。三、单片机内部结构分析我们来思考一个问题,当我们在编程器中把一条指令写进单片要内部,然后取下单片机,单片机就可以执行这条指令,那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM,称为FLASH ROM,刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM第五个试验:跟我学作单片机运算加减乘除法----51单片机汇编语言试验教程 收藏看到这个题目,呵呵, 可能好多人要打石头哥的板子;7+5等于几啊?这还用你教? 但是单片机里,数字是用二进制来表示的:这个就有一点拗口啦/虽然我们的教材到这里你可能还没有学会一个指令。 但是我的意思是首先作几个试验,提高大家对单片机的兴趣。具体的指令太多了, 不过还好,一般我们只需要记住常用的10-20条就够了。OK,现在开始动手。我们写入以下两条指令MOV P1,#23HEND这个程序大家想必看得懂, 就是把23H这个16进制数送往P1口(即P1.0--P1.7)汇编得到HEX烧写后然后把芯片插入实验卡座; 可以看到P1.0-1.7的状态为;P1.0 灭P1.1 灭P1.2 亮P1.3 亮P1.4 亮P1.5 灭P1.6 亮P1.7 亮为什么会这样呢?注意,因为我们的P1口的8个灯,都是一端接正5V,一端接端口的, 那么呢端口为低电平0。发光管亮。高电平不亮。 从高往低排列(从1.7---1.0)那么就是。这个数字就是23H啦。什么? 你不信?好了,请您接着看!二进制呢就是100011, 按照数学的原则前面的0不算数。跟我打开电脑的程序/附件/计算器 ,然后把计算器设置为科学型。然后点击二进制, 输入100011然后点击一下十六进制可以看到数字变成了23。这就是我们输入的23H了,练习:25H+36H?程序如下:MOV R0,#25H;将立即数25送寄存器R0MOV A,#36H;将立即数36送累加器AADD A,R0;将R0与A的内容相加,结果在ANOP;空操作POV P1,A;将累加器A的值送P1口。END;结束将程序编译以后烧入片子运行;可以看到灯的状态为P1.0 灭P1.1 灭P1.2 亮P1.3 灭P1.4 灭P1.5 亮P1.6 灭P1.7 亮就是二进制数。我们还是用上面的计算器来看看结果对不对:先将计算器设置为16进制,输入25+36= 结果为5E然后呢再点击二进制结果为1011110,可见结果完全正确〉大家接着可以自行练习减法指令SUBB乘法指令 MUL除法指令 DIV的用法, 相信经过这一节的学习,深刻的认识。大家对这几个指令的印象会非常深刻了。同时让我们对于计算机的数字有了一个欢迎您转载分享:
更多精彩:

我要回帖

更多关于 流水灯电路图 的文章

 

随机推荐