国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

51單片機點亮LED燈

這篇具有很好參考價值的文章主要介紹了51單片機點亮LED燈。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

一、點亮一個LED

二、LED閃爍

三、LED流水燈

四、獨立按鍵控制LED

獨立按鍵控制LED亮滅

獨立按鍵控制LED狀態(tài)

獨立按鍵控制LED以二進制形式顯示

獨立按鍵控制LED狀態(tài)循環(huán)移位

總結



前言

?51單片機點亮一個led燈程序,51單片機

????????嵌入式學習的入門就是點亮LED燈,就好比學習編程語言敲 “Hello world” 一樣


一、點亮一個LED

? ? ? ? 8051系列單片機上電默認都是高電平,而開發(fā)板上的LED都是共陽極的,所以只有輸出低電平才會產(chǎn)生電勢差,LED才會被點亮。那么為什么要用共陽極呢?這是因為51單片機IO默認是準雙向口模式,它的驅動能力很弱,弱到不足以點亮LED燈,只能用來輸出高低電平信號,所以共陽極只需要將端口電位拉低就可以了。

#include <REGX52.H>
sbit LED = P2^0; 		//將P2_0引腳定義為LED
void main()
{
	LED=0;
	while(1){}
}

? ? ? ? IO口的配置可以采用字節(jié)尋址和位尋址兩種方法,也就是說上述代碼還可以這樣寫:

#include <REGX52.H>

void main()
{
	P2=0xFE;	//1111 1110
	while(1){}
}

????????將程序燒錄進單片機,這樣一顆LED就被點亮了!

二、LED閃爍

? ? ? ? 將LED循環(huán)往復的置高置低并在期間加入一定的延時,就形成了閃爍的效果:

#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms()		//@12.000MHz 這里的延時就是讓程序在循環(huán)里空跑消耗時間
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0xFE;	//1111 1110
		Delay500ms();
		P2=0xFF;	//1111 1111
		Delay500ms();
	}
}

三、LED流水燈

? ? ? ? 流水燈只需要循環(huán)點亮每一個LED并加入延時即可

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	while(1)
	{
		P2=0xFE;//1111 1110      // 8位依次置為0
		Delay500ms();
		P2=0xFD;//1111 1101
		Delay500ms();
		P2=0xFB;//1111 1011
		Delay500ms();
		P2=0xF7;//1111 0111
		Delay500ms();
		P2=0xEF;//1110 1111
		Delay500ms();
		P2=0xDF;//1101 1111
		Delay500ms();
		P2=0xBF;//1011 1111
		Delay500ms();
		P2=0x7F;//0111 1111
		Delay500ms();
	}
}

????????或者可以用個循環(huán)左移函數(shù) _nrol_() 可以簡潔得多,需要引入頭文件#include <INTRINS.H>

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
    unsigned char tem = 0xfe;       //設置初值1111 1110 
    while(1)
    {
        P2 = tem;                   //LED的IO口位
        tem = _crol_(tem,1);        //_crol_:循環(huán)左移函數(shù) 1111 1101 函數(shù)的參數(shù)tem是要移位的十六進制數(shù),1是每次移的位數(shù)
        Delay500ms();
    }
}

四、獨立按鍵控制LED

51單片機點亮一個led燈程序,51單片機

????????獨立按鍵需要再使用一個IO口做檢測,當然開發(fā)板上是已經(jīng)連接好了的,K1 ~ K4分別接在P3_0 ~ P3_3引腳(很多普中的板子K1和K2是接反的,也就是P3_0是K2,也就是P3_1是K1),當按鍵按下時,IO口與GND短路電位被拉低,單片機即可接收到按鍵按下的信號。

? ? ? ? 這里需要注意一下,當按鍵按下時,按鍵內(nèi)部的彈簧片會在接觸的臨界點產(chǎn)生抖動,這會使得信號不穩(wěn)定,需要加入一段極短的延時做軟件消抖。

獨立按鍵控制LED亮滅

????????判斷按鍵是否被按下,如果按下就點亮LED

#include <REGX52.H>

void main()
{
	while(1)
	{
		if(P3_1==0 || P3_0==0)	//如果K1按鍵或K2按鍵按下
		{
			P2_0=0;		        //LED1輸出0,點亮
		}
		else                    //松手
		{
			P2_0=1;		        //LED1輸出1,熄滅
		}
	}
}

獨立按鍵控制LED狀態(tài)

? ? ? ? 當按鍵按下時,給LED取反

#include <REGX52.H>

void Delay(unsigned int xms)    //定義一個有形式參數(shù)的延時函數(shù),可改變延時的時間
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

void main()
{
	while(1)
	{
		if(P3_1==0)			    //如果K1按鍵按下
		{
			Delay(20);		    //延時消抖
			while(P3_1==0);	    //松手檢測
			Delay(20);		    //延時消抖
			P2_0=~P2_0;		    //LED1取反
		}
	}
}

獨立按鍵控制LED以二進制形式顯示

? ? ? ? 當按鍵按下時LED會以二進制的規(guī)律依次被點亮,一個char型是1字節(jié),8位二進制,正好對應8個LED

#include <REGX52.H>

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	unsigned char LEDNum=0;
	while(1)
	{
		if(P3_1==0)			//如果K1按鍵按下
		{
			Delay(20);		//延時消抖
			while(P3_1==0);	//松手檢測
			Delay(20);		//延時消抖
			LEDNum++;		//變量自增  0000 0001 ~ 0000 0010 ~ 0000 0011 ...
			P2=~LEDNum;		//因為是低電平點亮,所以變量取反輸出給LED
		}
	}
}

獨立按鍵控制LED狀態(tài)循環(huán)移位

? ? ? ? 創(chuàng)建一個變量“LEDNum”,每次按鍵按下“LEDNum”自增或自減,"<<"為左移操作符,將0x01左移LEDNum位就是把“1”左移,再取反賦給LED就是點亮第“LEDNum”位

#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;

void main()
{
	P2=~0x01;				//上電默認LED1點亮
	while(1)
	{
		if(P3_1==0)			//如果K1按鍵按下
		{
			Delay(20);
			while(P3_1==0);
			Delay(20);
			LEDNum++;		//LEDNum自增
			if(LEDNum>=8)	//限制LEDNum自增范圍
				LEDNum=0;
			P2=~(0x01<<LEDNum);	//LED的第LEDNum位點亮
		}
		if(P3_0==0)			//如果K2按鍵按下
		{
			Delay(20);
			while(P3_0==0);
			Delay(20);
			if(LEDNum==0)	//LEDNum減到0后變?yōu)?
				LEDNum=7;
			else			//LEDNum未減到0,自減
				LEDNum--;
			P2=~(0x01<<LEDNum);	//LED的第LEDNum位點亮
		}
	}
}

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}


masterLED

總結

????????祝各位都能成為點燈大師!文章來源地址http://www.zghlxwxcb.cn/news/detail-735609.html


到了這里,關于51單片機點亮LED燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 51單片機入門(2)LED點亮的背后

    51單片機入門(2)LED點亮的背后

    上一節(jié)提到了51單片機開發(fā)環(huán)境的搭建,這節(jié)我們開始正式進入51單片機的學習——點亮LED。 所有的控制類芯片學習的第一個實踐就是點亮LED,這是最簡單、最基本的操作,但這個實現(xiàn)過程卻可能攘括了單片機的整個工作流程,所以要想學好單片機,點燈實驗是一定要掌握的

    2023年04月08日
    瀏覽(16)
  • 【51單片機】點亮LED燈(四種形式)

    【51單片機】點亮LED燈(四種形式)

    ??作者簡介:大家好,我是澤奀。全棧領域新星創(chuàng)作者??? ??個人主頁:weixin_52632755的博客_澤奀_CSDN博客 ??點贊?評論?收藏 == 養(yǎng)成習慣 ?? ??本系列嗶哩嗶哩江科大51單片機的視頻為主以及自己的總結梳理??? https://blog.csdn.net/weixin_52632755/category_11316267.html 介紹兩個比

    2023年04月13日
    瀏覽(19)
  • 如何使用單片機點亮LED燈,并使用按鍵控制[51單片機]

    如何使用單片機點亮LED燈,并使用按鍵控制[51單片機]

    首先先看一下我的板子,如果我們板子不相同,可能操作也不太相同 我們就不講底層原理了,直接看,我們可以看到板子上有?8個LED燈 ? 那這個8個LED用什么來控制呢,我們先看底層的線路圖,所有的LEDD都連接到了P2帶后綴的接口上, 那么只需要操作這幾個接口的高低電頻,

    2024年02月05日
    瀏覽(29)
  • STM32/51單片機編程入門(點亮LED)

    STM32/51單片機編程入門(點亮LED)

    目錄 一、Proteus電路仿真軟件上的C51程序設計及仿真 1.原理圖繪制 2.Keil5上的51程序編寫 3.仿真 二、安裝mdk5軟件和stm32包,完成一個stm32的簡單程序 1.mdk5軟件中編寫程序 2.stm32仿真程序調試 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化設置的一般步驟

    2024年02月02日
    瀏覽(17)
  • 51單片機點亮LED燈以及實現(xiàn)2盞LED燈的交替閃爍

    51單片機點亮LED燈以及實現(xiàn)2盞LED燈的交替閃爍

    點亮LED燈,根據(jù)單片機原理圖 將LED燈1和LED燈2介入單片機的口設為低電平即可 代碼如下: #include “reg52.h” sbit led1= P3^7; void main() { led1 = 0;//給led1一個低電平,點亮 } 結果圖: 圖中有一盞LED燈為我這個51單片機自帶的電源接通燈,被代碼點亮的只有一盞 實現(xiàn)2盞LED燈的交替閃爍

    2024年02月07日
    瀏覽(21)
  • 51單片機點亮LED的5中方法(由簡單到困難)

    本文將介紹用各種不同的方法和算法點亮51單片機LED的程序,包括詳細的注釋和說明。 以上代碼使用了P1口的第0位控制LED的亮滅。當LED=0時,輸出低電平,LED亮;當LED=1時,輸出高電平,LED滅。 以上代碼使用了延時函數(shù)和定時器來控制LED的閃爍。在這段代碼中,我們定義了一

    2024年02月09日
    瀏覽(20)
  • 一周學完C51單片機(1)點亮LED燈以及按鍵控制

    一周學完C51單片機(1)點亮LED燈以及按鍵控制

    首先找到單片機的原理圖,找到LED模塊。我這里是P2口是連接了LED燈,通過此原理圖我們可以看到 我們只需將單片機的IO口置為低電平,就可以點亮LED燈。 因為代碼比較簡單,我就分別展示一下代碼,一顆LED燈的亮滅,流水燈 延時函數(shù)可以通過小工具來實現(xiàn),選擇好系統(tǒng)的頻

    2024年02月08日
    瀏覽(25)
  • 【74HC595】51單片機(普中A2開發(fā)板)LED點陣屏點亮以及74HC595芯片的使用筆記

    【74HC595】51單片機(普中A2開發(fā)板)LED點陣屏點亮以及74HC595芯片的使用筆記

    純小白寫的文章,如有問題,歡迎評論區(qū)討論,反駁,指正。 如果你只想了解74HC595如何使用,建議只看2.3。 通過查看普中A2開發(fā)板的原理圖(圖1)可以知道,通過P0(P0_0、P0_1…P0_7)口和DPa、DPb…DPh來控制哪一顆LED點亮。我這個開發(fā)板上的點陣模塊沒有按照他給的原理圖上

    2024年02月05日
    瀏覽(111)
  • 51單片機——一個獨立按鍵控制LED的閃爍和熄滅

    目錄 一、要求 二、實現(xiàn) 三、總結 消除按鍵的機械抖動 ? ? ? ? 當按下按鍵,LED燈閃爍,再按下,LED熄滅。。。。循環(huán)操作。 ? ? ? ? 編譯環(huán)境:keil4 ? ? ? ? 單片機:STC89c516RD 消除按鍵的機械抖動 ? ? ? ? 按鍵的機械抖動會影響單片機對按鍵按下次數(shù)的判斷。消除抖動的

    2024年02月07日
    瀏覽(36)
  • 學習筆記|LED點亮原理|三極管在數(shù)字電路中的應用|Keil中的Tab設置|C51中對準雙向口|STC32G單片機視頻開發(fā)教程(沖哥)|第四集-上:點亮LED

    學習筆記|LED點亮原理|三極管在數(shù)字電路中的應用|Keil中的Tab設置|C51中對準雙向口|STC32G單片機視頻開發(fā)教程(沖哥)|第四集-上:點亮LED

    為什么LED能點亮? 概念引入:輸出電壓=VCC就是高電平,輸出電壓 =GND(一般是OV)就是低電平,分別用1和0來表示,這個是理想值。 現(xiàn)在STC 的帶硬件USB的MCU支持用硬件USB下載,因為用的是USB-HID通信協(xié)議,不需要安裝任何驅動。STC打狗棒、降龍棍、開天斧、屠龍刀核心板以及STC開

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包