| 网站首页 | 精品文章 | 下载中心 | 本站教程 | 邮购须知 | 电子商城 | 网站简介 | 常见问题集锦 | 
您现在的位置: 新启点单片机 >> 本站教程 >> 原创教程 >> 本站教程正文 用户登录 新用户注册
V2.0教程二:流水灯实验          【字体:
V2.0教程二:流水灯实验
作者:江在流    本站教程来源:本站原创    点击数:    更新时间:2006-7-2

程序A:

ORG 0000H
START:MOV P1,#01111111B      ;最下面的LED点亮
LCALL DELAY        
MOV P1,#10111111B            ;最下面第二个的LED点亮
LCALL DELAY
MOV P1,#11011111B            ;最下面第三个的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

程序B:

org 00h    ;程序上电从00h开始
ajmp main  ;跳转到主程序
org 0030h   ;主程序起始地址
main:
 mov a,#0feh  ;给A赋值成11111110
loop:
 mov p1,a  ;将A送到P1口,发光二极管低电平点亮
 lcall delay  ;调用延时子程序
 rl a   ;累加器A循环左移一位
 ajmp loop ;重新送P1显示
delay:
 mov r3,#20  ;最外层循环二十次
d1:
 mov r4,#80  ;次外层循环八十次
d2:
 mov r5,#250  ;最内层循环250次
 djnz r5,$  ;总共延时2us*250*80*20=0.8S
 djnz r4,d2
 djnz r3,d1
 ret
 end

程序C:

#include<reg51.h>
#include <intrins.h>


void delayms(unsigned char ms) // 延时子程序
{      
 unsigned char i;
 while(ms--)
 {
  for(i = 0; i < 120; i++);
 }
}

main()
{
 unsigned char LED;
 LED = 0xfe;
 P1 = LED;
 
 while(1)
 {
  delayms(200);   
  LED = LED>>1;  //循环右移1位,点亮下一个LED
  P1 = LED;
 }
}

本站教程录入:江在流    责任编辑:江在流 
  • 上一篇本站教程:

  • 下一篇本站教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关本站教程
    没有相关本站教程
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)