流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H复位启动
AJMP START
ORG 001BHT1中断
AJMP T1INT
定义变量========================
YSJSEQU 30H延时计数器
LEDEQU 31HLED控制缓冲器
主程序==========================
START:MOV LED,#0FEH初始化数据
MOV YSJS,#0
MOV TMOD,#10H定时器1工作于方式1,16位定时器
MOV TL1,#0B0H设置定时初值
MOV TH1,#3CH定时时间=50mS
SETB ET1使能定时器1中断
SETB TR1启动定时器1
SETB EA开总中断
MOV P1,LED初始化流水灯
LOOP:JMP LOOP循环等待中断
T1INT:PUSH PSW定时器1中断程序
PUSH ACC保护现场
MOV TH1,#3CH定时时间=50mS
MOV TL1,#0B0H
INC YSJS
PUSH ACC保护ACC
MOV A,YSJI
CJNE A,#2,QT150mS*2=100mS
MOV P1,LED
MOV A,LED
RL A累加器A的值循环左移1位
MOV LED,A
MOV YSJS,#0
QT1:POP ACC恢复现场
POP PSW
RETI返回主程序
END汇编程序结束
扩展资料:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
汇编程序:用减奇数法开平方(16位)
命题:从 1 开始,把连续 n 项奇数的等差数列,求和,可以得到 n^2。
证明:1 + 3 + 5 + ... + (2n-1) = (1 + (2n-1)) * (n/2) = n^2。
那么,对于任意正整数 M,都会有:
M = 1 + 3 + 5 + … + ( 2n - 1 ) + ε
= n^2 + ε
= N + ε
式中 N 是完全平方数,N = n^2。
式中 ε 是小于 2n - 1 的误差。
由此,可推出“减奇数开平方”的算法。
即:在 M 中依次减去 1、3、5、...,直到不够减为止;
够减的次数 n,即为 N 的平方根。
程序可见:
这种求平方根的方法,效率很高,远远高于牛顿迭代法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)