流水灯C语言和汇编语言

2017-12-04     浏览次数:

流水灯C语言源程序
文件说明:流水灯C程序

程序说明:MCU采用AT89S51,外接11.0592M晶振,P2口输出

	#include<reg51.h>  
	#define uchar unsigned char
	#define uint unsigned int
	void delay(uint);   //声明延时函数
	void main(void)
	{
	uint i;
	uchar temp;
	while(1)
	{
	    temp=0x01;
	    for(i=0;i<8;i++) //8个流水灯逐个闪动
	    {
	     P2=~temp;
	     delay(100);   //调用延时函数
	     temp<<=1;
	    }
	temp=0x80;
	for(i=0;i<8;i++) //8个流水灯反向逐个闪动
	   {
	    P2=~temp;
	    delay(100);   //调用延时函数
	    temp>>=1;
	   }
	    temp=0xFE;
	for(i=0;i<8;i++) //8个流水灯依次全部点亮
	    {
	     P2=temp;
	     delay(100);   //调用延时函数
	     temp<<=1;
	    }
	   temp=0x7F;
	   for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
	    {
	     P2=temp;
	     delay(100);   //调用延时函数
	     temp>>=1;
	    }
	}
	}
	void delay(uint t)   //定义延时函数
	      {
	register uint bt;
	        for(;t;t--)
	        for(bt=0;bt<255;bt++);
	      }
二、汇编程序:(同样P2为输出端口)
	u     左移依次循环:
	 
	                ORG 0000H        
	            SJMP MAIN        
	            ORG 0030H       主程序开始的地址
	MAIN:       MOV R2,#08H      设置循环次数
	            MOV A,#0FEH         赋初值
	NEXT:       MOV P2,A           把初值送到P2口
	            LCALL DELAY          延时
	            RL A                 左移一位
	            DJNZ R2,NEXT      判断循环次数是否到,没有跳转到NEXT继续执行
	                     SJMP MAIN           重复循环
	DELAY:           MOV R3,#0FFH          延时程序
	DEL2:             MOV R4,#0FFH     
	DEL1:             NOP              
	                     DJNZ R4,DEL1     
	                     DJNZ R3,DEL2     
	                     RET              
	                     END                      结束
	   
	u     二边散开后缩进(查表指令)
	                    ORG 0000H           
	                    SJMP MAIN           
	                    ORG 0030H           
	MAIN:           MOV SP,#60H         
	                MOV DPTR,#TAB          把表首地址送到DPTR
	                MOV R2,#06              设置循环次数
	LOOP:           CLR A                          清零A
	                MOVC A,@A+DPTR         查表指令
	                    MOV P1,A           把A中的值送到P1口
	                    LCALL DELAY                延时
	                    INC DPTR                  改变数据指针
	                  DJNZ R2,LOOP 判断循环是否到,没有跳转LOOP
	                    SJMP MAIN                  重复循环
	DELAY:          MOV R0.#10                  延时
	DEL2:          MOV R1,#200         
	DEL1:          MOV R3,#255         
	                    DJNZ R3,$          
	                    DJNZ R1,DEL1       
	                    DJNZ R0,DEL2       
	                    RET
	TAB:      DB 0E7H,0DBH,0BDH,7EH,0BDH,0DBH    查表                   
	                   END
	 
*转载请注明出处,更多资料尽在 吾爱编程
返回吾爱编程首页