资源描述:
《用单片机设计流水灯的方法和程序编写》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、S51增强型单片机实验板上有8个高亮度发光二极管(见图1所示),可以用来做单片机流水灯、跑马灯。。。等实验,电路原理图见下图3。图3单片机流水灯设计方法 从原理图可以看出,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭方法方法同LED1。因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的
2、做流水灯了。 实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。 从上面中文表示看来实现单片机流水灯很简单,但是我们不能说P1.0你变低,它就变低了。因为单片机听不懂我们的汉语的,只能接受二进制的“1、0......”机器代码。我们又怎样来使单片机按我们的意思去工作呢?为了让
3、单片机工作,只能将程序写为二进制代码交给其执行;早期单片机开发人员就是使用人工编写的二进制代码交给单片机去工作的。今天,我们不必用烦人的二进制去编写程序,完全可以将我们容易理解的“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,然后交给单片机去执行。这里的“程序语言”目前主要有汇编语言和C语言两种;在这里我们所说的“翻译”软件,同行们都叫它为“编译器”,将“程序语言”通过编译器产生单片机的二进制代码的过程叫编译。前面说到,要想使LED1变亮,只需将对应的单片机引脚电平变为低电平就可以了。现在让我们将上面提到的8只
4、LED流水灯实验写为汇编语言程序。实现8个LED流水灯汇编语言源程序liu01.asm ;-----主程序开始-----START: CLR P1.0 ;P1.0输出低电平,使LED1点亮 ACALL DELAY ;调用延时子程序 SETB P1.0 ;P1.0输出高电平,使LED1熄灭 CLR P1.1 ;P1.1输出低电平,使LED2点亮 ACALL DELAY ;调用延时子程序 SETB P1.1 ;P1.1输出高
5、电平,使LED2熄灭 CLR P1.2 ;P1.2输出低电平,使LED3点亮 ACALL DELAY ;调用延时子程序 SETB P1.2 ;P1.2输出高电平,使LED3熄灭 CLR P1.3 ;P1.3输出低电平,使LED4点亮 ACALL DELAY ;调用延时子程序 SETB P1.3 ;P1.3输出高电平,使LED4熄灭 CLR P1.4 ;P1.4输出低电平,使LED5点亮 ACALL
6、DELAY ;调用延时子程序 SETB P1.4 ;P1.4输出高电平,使LED5熄灭 CLR P1.5 ;P1.5输出低电平,使LED6点亮 ACALL DELAY ;调用延时子程序 SETB P1.5 ;P1.5输出高电平,使LED6熄灭 CLR P1.6 ;P1.6输出低电平,使LED7点亮 ACALL DELAY ;调用延时子程序 SETB P1.6 ;P1.6输出高电平,使LED7熄灭
7、 CLR P1.7 ;P1.7输出低电平,使LED8点亮 ACALL DELAY ;调用延时子程序 SETB P1.7 ;P1.7输出高电平,使LED8熄灭 ACALL DELAY ;调用延时子程序 AJMP START ;8个LED流了一遍后返回到标号START处再循环 ;-----延时子程序-----DELAY: MOV R0,#255 ;延时一段时间D1: MOV R1,#255 DJNZ R1,$
8、DJNZ R0,D1 RET ;子程序返回 END ;程序结束 在上面主程序中用到了五条汇编语言指令:CLR、ACALL、SETB、LJMP、END。CLR:是将其后面指定的位清为0,程序中使对应端口输出低电平 ACALL:是子程序