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

利用51單片機(jī)進(jìn)行LED 跑馬燈設(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了利用51單片機(jī)進(jìn)行LED 跑馬燈設(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

題目:? ? ? ??

使用單片機(jī)驅(qū)動(dòng)8個(gè)LED,2個(gè)按鍵并實(shí)現(xiàn)跑馬燈功能。

????????當(dāng)按下按鍵1時(shí),LED?從左至右依次點(diǎn)亮,全亮后再?gòu)挠抑磷笠来蜗?,全滅后再?gòu)淖笾劣乙来吸c(diǎn)亮,依次循環(huán)下去。

???????當(dāng)按下按鍵2 時(shí),LED?從右至左依次點(diǎn)亮,全亮后再?gòu)淖笾劣乙来蜗?,全滅后再?gòu)挠抑磷笠来吸c(diǎn)亮,依次循環(huán)下去。

電路部分:

利用Proteus軟件搭建的電路圖如下:

利用51單片機(jī)進(jìn)行LED 跑馬燈設(shè)計(jì)部分一:AT89C51最小系統(tǒng)電路。

AT89C51最小系統(tǒng)電路其中包括時(shí)鐘電路和復(fù)位電路。

時(shí)鐘電路:產(chǎn)生像時(shí)鐘一樣準(zhǔn)確運(yùn)動(dòng)的振蕩電路。

復(fù)位電路:按鍵按下可以使程序重新運(yùn)行。

部分二:從LED-0到LED7接入P2口的八個(gè)LED燈電路。

發(fā)光二極管:只允許電流單方向通過(guò),并發(fā)光。

上拉電阻:降低回路電流,避免元件損壞。

部分三:按鈕控制電路

按鍵按下,P3_2或P3_3口與GND相接,置 0。

按鍵未按下,P3_2或P3_3口與電阻相接,按鍵處斷開(kāi),置 1。

上拉電阻:降低電流,保護(hù)電路。

程序部分:

設(shè)計(jì)思路:

1.先利用兩個(gè)for循環(huán)和延時(shí)函數(shù)初步實(shí)現(xiàn)LED燈延時(shí)流水功能。

2.按鍵部分接入單片機(jī)的外部中斷0和外部中斷1,當(dāng)按鍵按下時(shí)利用外部中斷去打斷for循環(huán),從而實(shí)現(xiàn)流水燈方向的改變。

跑馬燈亮滅思路:

右移亮:

P2=0xFE;
for(i=0;i<7;i++)
{
	DELAY;
	P2<<=1;
}

左移滅:

P2=0x80;
for(i=0;i<7;i++)
{
	DELAY;
	P2=(P2>>1)|0x80;
}

左移亮:

P2=0x7F;
for(i=0;i<7;i++)
{
		DELAY;
		P2>>=1;
}

右移滅:

P2=0x01;
for(i=0;i<7;i++)
{
	DELAY;
	P2=(P2<<1)|0x01;
}

方法一:利用外部中斷0、外部中斷1和Delay延時(shí)函數(shù)。

具體代碼:

#include <REGX52.H>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int  u16;
void Delay300ms();
bit key1_flag = 0;
bit key2_flag = 0;
u8 i =0;
u16 Num;

void main()
{ 
	AUXR &= 0x7F;		//定時(shí)器時(shí)鐘12T模式
	TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1
	TH0=(65535-50000)/256;//50MS
	TL0=(65535-50000)%256;	
	ET0=1;
	TR0=1;
 	EA=1;//開(kāi)總中斷
  
	while(1)
	{	
		if(key1_flag)
		{			
			P2 = 0xFE;			
			for(i=0;i<7;i++)  //左移循環(huán)亮
			{					
				Delay300ms();
				P2 <<= 1;
			} 
			
			Delay300ms();
			P2 = 0x80;
			
			for(i=0;i<7;i++)//右移循環(huán)滅
			{
				Delay300ms();
				P2 = (P2 >> 1) | 0x80;
			}
			Delay300ms();		
		}
		
			if(key2_flag)
			{ 
				P2=0x7F;
				for(i=0;i<7;i++)//右移循環(huán)亮
				{
					Delay300ms();
					P2>>=1;
				}			
				Delay300ms();
				P2=0x01;			
				for(i=0;i<7;i++)//左移循環(huán)滅
				{
				 Delay300ms();
					P2=(P2<<1)|0x01;		
				}
				Delay300ms();
			}		
	}
}

void exter0() interrupt 0  //外部中斷0
{
	key1_flag = 1;	
	key2_flag = 0;	
}

void exint1() interrupt 2  //外部中斷1
{     
	key1_flag = 0;
	key2_flag = 1;			
}

//時(shí)鐘頻率為12MHz的300ms的延時(shí)函數(shù)
void Delay300ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 3;
	j = 72;
	k = 161;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

弊端:

1.浪費(fèi)CPU資源:因?yàn)椴捎昧舜罅康腄elay()函數(shù)會(huì)導(dǎo)致單片機(jī)cpu進(jìn)行大量的空運(yùn)算。

2.延時(shí)可能不夠精準(zhǔn):通過(guò)指令周期進(jìn)行延時(shí)會(huì)產(chǎn)生誤差。

改進(jìn)的方法二:利用外部中斷0、外部中斷1和定時(shí)器0。

具體代碼:

#include <REGX52.H>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int  u16;

bit key1_flag = 0;
bit key2_flag = 0;
u8 i =0;
u16 Num = 0;
sbit led = P2^0;

void main()
{ 
	TMOD = 0x01;//設(shè)置定時(shí)器0為工作方式1
	TH0  = (65535-1000)/256;//設(shè)初值1ms
	TL0  = (65535-1000)%256;	 	
	ET0  = 1;//定時(shí)器0的溢出允許位
	TR0  = 1;//定時(shí)器0的運(yùn)行控制位
	
  EX0  = 1;//外部中斷0的控制位
	EX1  = 1;//外部中斷1控制位
	EA   = 1;//開(kāi)總中斷
	
	while(1)
	{			
	}
}

void exter0() interrupt 0 //外部中斷0
{
	key1_flag = 1;
	key2_flag = 0;
	i = 0;
}

void exint1() interrupt 2 //外部中斷1
{     	
	key1_flag = 0;
	key2_flag = 1;
	i= 0;
}

void tm0_isr() interrupt 1 using 1 //定時(shí)器中斷0
{
	TH0  = (65535-1000)/256;//設(shè)初值1ms
	TL0  = (65535-1000)%256;	 	
	Num++;
		
	if(Num>199)
	{
		Num = 0;
		if(key1_flag)
		{		
			switch(i++)
			{
				case 0:P2 = 0xFE; break;
				case 1:case 2:case 3:case 4:case 5:case 6:case 7:P2 <<= 1;break;
				case 8:P2  = 0x80;break;
				case 9:case 10:case 11:case 12:case 13:case 14:P2 = (P2 >> 1) | 0x80;break;
				case 15:P2 = (P2 >> 1) | 0x80;i=0;break;
			}
		}
		else if(key2_flag)
		{
			switch(i++)
			{
				case 0:P2 = 0x7F; break;
				case 1:case 2:case 3:case 4:case 5:case 6:case 7:P2 >>= 1;break;
				case 8:P2 = 0x01;	break;
				case 9:case 10:case 11:case 12:case 13:case 14:P2 = (P2 << 1) | 0x01;	break;
				case 15:P2 = (P2 << 1) | 0x01;i=0;break;
			}
		}	
	}
}

以上就是我此次對(duì)51單片機(jī)跑馬燈部分的學(xué)習(xí),如有錯(cuò)誤或者更好的想法,歡迎大家提出。? ? ? ??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470888.html

到了這里,關(guān)于利用51單片機(jī)進(jìn)行LED 跑馬燈設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【51單片機(jī)】LED 點(diǎn)陣

    【51單片機(jī)】LED 點(diǎn)陣

    參考:普中 51 單片機(jī)開(kāi)發(fā)攻略 第13章 mian.c

    2024年01月22日
    瀏覽(29)
  • 51單片機(jī)LED點(diǎn)陣屏

    51單片機(jī)LED點(diǎn)陣屏

    LED點(diǎn)陣屏是一種由許多小型LED燈組成的矩陣式顯示屏。這些LED燈可以是單色、雙色或全彩的,它們排列成行和列的網(wǎng)格,可以根據(jù)需要點(diǎn)亮來(lái)顯示圖像、文字或動(dòng)畫(huà)等內(nèi)容。LED點(diǎn)陣屏廣泛應(yīng)用于戶外廣告牌、室內(nèi)顯示、交通信號(hào)燈、電子價(jià)格標(biāo)簽和其他需要顯示信息的場(chǎng)合。

    2024年01月23日
    瀏覽(28)
  • 【51單片機(jī)】LED點(diǎn)陣屏

    【51單片機(jī)】LED點(diǎn)陣屏

    ??專欄【51單片機(jī)】 ??喜歡的詩(shī)句:更喜岷山千里雪 三軍過(guò)后盡開(kāi)顏。 ??音樂(lè)分享【W(wǎng)aiting For Love】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問(wèn)題?? 目錄 ??74HC595圖片 ??74HC595原理 ??”上升沿“是什么意思 ??LED點(diǎn)陣屏顯示圖形? ??現(xiàn)象 ???代碼(三部分) main.c? Del

    2024年02月02日
    瀏覽(28)
  • 51單片機(jī)點(diǎn)亮LED燈

    51單片機(jī)點(diǎn)亮LED燈

    目錄 前言 一、點(diǎn)亮一個(gè)LED 二、LED閃爍 三、LED流水燈 四、獨(dú)立按鍵控制LED 獨(dú)立按鍵控制LED亮滅 獨(dú)立按鍵控制LED狀態(tài) 獨(dú)立按鍵控制LED以二進(jìn)制形式顯示 獨(dú)立按鍵控制LED狀態(tài)循環(huán)移位 總結(jié) ? ????????嵌入式學(xué)習(xí)的入門就是點(diǎn)亮LED燈,就好比學(xué)習(xí)編程語(yǔ)言敲 “Hello world”

    2024年02月06日
    瀏覽(29)
  • 51單片機(jī)按鍵控制LED亮滅

    51單片機(jī)按鍵控制LED亮滅

    通過(guò)單片機(jī)按鍵控制LED亮滅與傳統(tǒng)電路的物理邏輯不同,在物理邏輯中開(kāi)關(guān)控制電路的通斷來(lái)控制LED的亮滅,而通過(guò)單片機(jī)完成該項(xiàng)目至于要不斷地讀取按鍵所連接IO口的電平來(lái)判斷對(duì)LED連接的IO口輸出的電平即可。 原理圖如下: ?根據(jù)原理圖,我們可以發(fā)現(xiàn)按鍵按下時(shí)P2.1口

    2023年04月18日
    瀏覽(29)
  • 51單片機(jī)-按鍵控制led燈

    51單片機(jī)-按鍵控制led燈

    1.開(kāi)發(fā)環(huán)境介紹 使用C語(yǔ)言,環(huán)境為keil Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用. 什么是單片機(jī) 單片機(jī)(Single-Chip Microcomputer)是一種集成電路芯片,把具

    2024年02月09日
    瀏覽(23)
  • 51單片機(jī)(二)成功點(diǎn)亮LED

    51單片機(jī)(二)成功點(diǎn)亮LED

    ?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過(guò)程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專欄適用人群 :適用于想要從零基礎(chǔ)開(kāi)始學(xué)習(xí)入門單片機(jī),且有一定C語(yǔ)言基礎(chǔ)的的童鞋

    2023年04月25日
    瀏覽(22)
  • 如何使用單片機(jī)點(diǎn)亮LED燈,并使用按鍵控制[51單片機(jī)]

    如何使用單片機(jī)點(diǎn)亮LED燈,并使用按鍵控制[51單片機(jī)]

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

    2024年02月05日
    瀏覽(29)
  • 51單片機(jī):獨(dú)立按鍵控制LED燈

    51單片機(jī):獨(dú)立按鍵控制LED燈

    1. 獨(dú)立按鍵控制LED燈狀態(tài)? ? ? ? ? 亮滅實(shí)驗(yàn)完成后,就可以控制LED狀態(tài),首先我們知道由于機(jī)械結(jié)構(gòu)的彈性作用,按鍵開(kāi)關(guān)在閉合時(shí)不會(huì)一瞬間穩(wěn)定的接通,在斷開(kāi)時(shí),也不會(huì)一下子斷開(kāi)。所以就得需要程序消抖,也就是適當(dāng)延時(shí),程序如下 #include\\\"reg52.h\\\" //定義LED燈 sbit

    2023年04月09日
    瀏覽(32)
  • 【51單片機(jī)】點(diǎn)亮第一個(gè)LED燈

    【51單片機(jī)】點(diǎn)亮第一個(gè)LED燈

    橙色 GPIO 概念 GPIO(general purpose intput output) 是通用輸入輸出端口的簡(jiǎn)稱, 可以通過(guò)軟件來(lái)控制其輸入和輸出。 51 單片機(jī)芯片的 GPIO 引腳與外部設(shè)備連接起來(lái), 從而實(shí)現(xiàn)與外部通訊、 控制以及數(shù)據(jù)采集的功能。 不過(guò) GPIO 最簡(jiǎn)單的應(yīng)用還屬點(diǎn)亮 LED 燈了, 只需通過(guò)軟件控制

    2024年01月25日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包