ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-05-15 13:52:47  阅读:165  来源: 互联网

标签:P2 led1 P1 例程 低电平 C语言 单片机 while sbit


文章目录

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                               //子程序返回主程序

标签:P2,led1,P1,例程,低电平,C语言,单片机,while,sbit
来源: https://blog.51cto.com/u_15202146/2777520

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有