文章目录
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 //子程序返回主程序