| 
 
   
- 帖子
 - 120 
 - 主题
 - 79 
 - 精华
 - 0 
 - 积分
 - 60 
 - 在线时间
 - 5 小时 
 - 注册时间
 - 2010-10-13 
 
  | 
单片机初学者要更容易理解和掌握一些常用指令,就要多做实验,编一些小程序在实验板上看效果,而流水灯是最方便看见效果的,学编程一般是先多看别人的程序从中学习一些编程的技巧和方法。是从模仿开始的,但要领会后变为己用才行,希望初学者能从下面程序中学到有用的东东。 
 
 
 
  看上面原理图是由八只LED发光管,接在89C51的P1口上,从原理图可知只有P1口为低电平(接地)时,发光管才会亮。所以只要循环控制P1口的各个引脚的电平高低变化就可使LED 循环点亮。 
  网友只要把下面的源程序编译后烧如提供的实验板即可看见效果。  
    
 
ORG 0000H 
 
LJMP START 
 
ORG 0030H 
 
START: 
 
MOV SP,#6FH;养成习惯将堆栈先保护起来 
 
MOV A,#80H;转换为二进制为10000000 
 
LOOP: 
 
MOV P1,A ;将A中的值送入P1口 
 
RR A;右移 
 
LCALL DELAY;凋延时程序 
 
LJMP LOOP ;返回继续循环 
 
delay:   ;延时程序,改变R7的初值看效果如何?? 
 
mov r7,#255 
 
d1: mov r6,#255 
 
d2: nop 
 
nop 
 
nop 
 
nop 
 
djnz r6,d2 
 
djnz r7,d1 
 
ret 
 
END 
 
上面的程序如您不好理解可以看下面的: 
 
 
 
ORG 0000H 
START:MOV P1,#01111111B;第八脚的LED点亮 
LCALL DELAY;延时1秒 
MOV P1,#10111111B;第7脚的LED点亮 
LCALL DELAY;延时1秒 
MOV P1,#11011111B;第6脚的LED点亮 (以下省略) 
LCALL DELAY 
MOV P1,#11101111B 
LCALL DELAY 
MOV P1,#11110111B 
LCALL DELAY 
MOV P1,#11111011B 
LCALL DELAY 
MOV P1,#11111101B 
LCALL DELAY 
MOV P1,#11111110B 
LCALL DELAY 
MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒 
AJMP START;反复循环 
 
;延时子程序,12M晶振延时约250毫秒 
DELAY: 
MOV R4,#2 
L3: MOV R2 ,#250 
L1: MOV R3 ,#250 
L2: DJNZ R3 ,L2 
DJNZ R2 ,L1 
DJNZ R4 ,L3 
RET 
 
END 
 
以上两种的亮暗不同的,前种是暗流动,下面的是亮流动;您可以烧写到实验板看效果。。。。。。 |   
 
 
 
 |