实现8个LED流水灯汇编语言程_第1页
实现8个LED流水灯汇编语言程_第2页
实现8个LED流水灯汇编语言程_第3页
实现8个LED流水灯汇编语言程_第4页
实现8个LED流水灯汇编语言程_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、START:MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的) MOV P1,ACC ;将ACC的数据送P1口 MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程 LOOP: RLA ;将ACC中的数据左移一位MOV P1,A ;把ACC移动过的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZR0,LOOP ;没有移动够7次继续移动 AJMPSTART ;移动完7次后跳到开始重来,以达到循环流动效果;- 延时子程序 -DELAY:MOV R0,#255 ;延时一段时间D1: MOV R1,#255DJNZR1,$DJNZR0,D1RET ;子程序

2、返回END ;程序结束START:CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY;调用延时子程序SETBP1.0 ;P1.0输出高电平,使LED1熄灭CLR P1.1 ;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETBP1.1 ;P1.1输出高电平,使LED2熄灭CLR P1.2 ;P1.2输出低电平,使LED3点亮ACALL DELAY;调用延时子程序SETBP1.2 ;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALL DELAY;调用延时子程序SETBP1.3 ;P1.3输出高电

3、平,使LED4熄灭CLR P1.4 ;P1.4输出低电平,使LED5点亮ACALL DELAY;调用延时子程序SETBP1.4 ;P1.4输出高电平,使LED5熄灭CLR P1.5 ;P1.5输出低电平,使LED6点亮ACALL DELAY;调用延时子程序SETBP1.5 ;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.6输出低电平,使LED7点亮ACALL DELAY;调用延时子程序SETBP1.6 ;P1.6输出高电平,使LED7熄灭CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETBP1.7 ;P1.7输出高电平,使LED8熄

4、灭ACALL DELAY;调用延时子程序AJMPSTART;8个LED流了一遍后返回到标号START处再循环;- 延时子程序 -DELAY:MOV R0,#255;延时一段时间D1: MOV R1,#255DJNZR1,$DJNZR0,D1RET ;子程序返回END;程序结束ORG 0000H ;上电复位,程序从0000H开始执行START:MOV SP,#60H ;堆栈初始化为60HMOV DPTR,#LIU_TAB ;流水花样表首地址送DPTRLOOP: CLR AMOVCA,A+DPTRCJNEA,#0FFH,SHOW;检查流水结束标志AJMPSTART ;所有花样流完,则从头开始重复流

5、SHOW: MOV P1,A;将数据送到P1口ACALL DELAYINC DPTRAJMPLOOP;- 延时子程序 -DELAY:MOV R0,#255;延时一段时间D1: MOV R1,#255DJNZR1,$DJNZR0,D1RET ;子程序返回;- 下面是流水花样数据表 -LIU_TAB: DB B ;二进制表示的流水花样数据DB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB BDB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;十六进制表示DB 0FEH,0FDH,0FBH,0F7H,

6、0EFH,0DFH,0BFH,7FHDB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB 7FH,3FH,1FH,0FH,07H,03H,01H,00HDB 0FFH ;流水花样结束标志0FFHEND;程序结束延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2 DJNZ R2 ,L1DJNZ R4 ,L3 RETorg 00h;程序上电从00h开始ajmpmain;跳转到主程序org0030h;主程序起始地址main:mov a,#0feh;给A赋值成

7、loop:movp1,a;将A送到P1口,发光二极管低电平点亮lcall delay;调用延时子程序rl a;累加器A循环左移一位ajmploop;重新送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,d1retend如何精确计算延时子程序的执行时间?汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!;延时子程序,12M晶振延时约253毫秒DELAY:MOV R4,#2执行1个机器周期,耗时1微秒L3: MOV R2 ,#250执行1个机器周期,耗时1微秒L1: MOV R3 ,#251执行1个机器周期,耗时1微秒L2: DJNZ R3 ,L2执行2个机器周期,反复执行251次(2x2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论