【51单片机】基础例程|C语言

LED点灯:

1. 通过sbit赋值

#include "reg51.h"
sbit key1 = P2^0;
sbit key2 = P2^1;
sbit led1 = P1^0;
sbit led2 = P1^1;

void main(void){
    
    
	while(1){
    
    
		/*
		ifP2.0端口按下(按键接了一个GND,所以按下按键为低电平)
		则led1赋低电平,给led2高电平
		*/
		if(key1 == 0){
    
    
			led1 = 0;
			led2 = 1;
		}
		/*
		ifP2.1端口按下,为低电平,则led2赋低电平,给led1高电平(∵LED是阳极接法)
		*/
		if(key1 == 0){
    
    
			led1 = 0;
			led2 = 1;
		}

	}
}

2.直接给P2串行口赋值

#include"reg51.h"
void main(){
    
    
	while(1){
    
    
		//P2口为控制端口,我们是通过程序来控制P1口的为低电平或者是高电平的
		if(P2 == 0xfe){
    
    
			//11111110
			P1 = 0xfe;
		}
		if(P2 == 0xfd){
    
    
			//11111101第二个口为低,刚好可以导通
			P1 = 0xfd;
		}
	}
}

流水灯

我们默认都是共阴极接法,如果出现共阳极接法:【陷阱】,需要对其进行按位取反!

#include "reg51.h"
#include "intrins.h"

//11.0592MHz
void delay500ms(){
    
    
	unsigned char i,j,k;
	nop();
	i=4;
	j=129;
	k=119;
	do{
    
    
		do{
    
    
			while(--k);
		}
		while(--j);
	}
	while(--i);
}

void main(){
    
    
	unsigned char led;
	//init:00000001
	led = 0x01;
	while(1){
    
    
		//P1共阳极接法:需要进行按位取反
		P1=~led;
		led<<=1;
		//超过量程之后会归零,我们就需要重新对它进行赋值!
		if(led == 0x00){
    
    
			led = 0x01;
		}
	}
}

将外部RAM地址1000H~10FFH的256个单元清零

      MOV R2 , #0FFH                  //R2只能记录255次
      MOV DPTR , #1000H
      CLR A
LOOP:MOVX @DPTR , A
      INC DPTR
      DJNZ R2 , LOOP
      MOVX @DPTR,A                      //对10FFH清零
      RET                               //子程序返回主程序

猜你喜欢

转载自blog.csdn.net/weixin_43801418/article/details/111057190