娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

51單片機(jī)實(shí)現(xiàn)兩片聯(lián)級(jí)74HC595控制跑馬燈

發(fā)布者:不染塵埃最新更新時(shí)間:2021-11-10 來(lái)源: eefocus關(guān)鍵字:51單片機(jī)  74HC595  跑馬燈 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

一、使用proteus繪制簡(jiǎn)單的電路圖,用于后續(xù)仿真

二、編寫程序


/********************************************************************************************************************

---- @Project: LED-74HC595

---- @File: main.c

---- @Edit: ZHQ

---- @Version: V1.0

---- @CreationTime: 20200529

---- @ModifiedTime: 20200529

---- @Description: 第1個(gè)至第8個(gè)LED燈一直不亮。在第9個(gè)至第16個(gè)LED燈,依次逐個(gè)

---- 亮燈并且每次只能亮一個(gè)燈。每按一次獨(dú)立按鍵S13鍵,原來(lái)運(yùn)行的跑馬燈會(huì)暫停,原

---- 來(lái)暫停的跑馬燈會(huì)運(yùn)行。用S1來(lái)改變方向,用S5和S9來(lái)改變速度。

---- 單片機(jī):AT89C52

********************************************************************************************************************/

#include "reg52.h"

/*——————宏定義——————*/

#define FOSC 11059200L

#define T1MS (65536-FOSC/12/1000)   /*1ms timer calculation method in 12Tmode*/

 

 

#define const_voice_short 80 /*蜂鳴器短叫的持續(xù)時(shí)間*/

 

#define const_key_time1 40

#define const_key_time2 40

#define const_key_time3 40

#define const_key_time4 40

 

/*——————變量函數(shù)定義及聲明——————*/

/*定義74HC595*/

sbit Hc595_Sh = P2^3;

sbit Hc595_St = P2^4;

sbit Hc595_Ds = P2^5;

 

/*定義蜂鳴器*/

sbit Beep = P2^7;

 

/*定義按鍵*/

sbit Key_S1 = P0^0; /*定義按鍵S1,對(duì)應(yīng)S1*/

sbit Key_S2 = P0^1; /*定義按鍵S2,對(duì)應(yīng)S5*/

sbit Key_S3 = P0^2; /*定義按鍵S3,對(duì)應(yīng)S9*/

sbit Key_S4 = P0^3; /*定義按鍵S4,對(duì)應(yīng)S13*/

 

sbit Key_Gnd = P0^4; /*定義按鍵模擬地*/

 

unsigned char ucLED1 = 0;   /*代表16個(gè)燈的亮滅狀態(tài),0代表滅,1代表亮*/

unsigned char ucLED2 = 0;

unsigned char ucLED3 = 0;

unsigned char ucLED4 = 0;

unsigned char ucLED5 = 0;

unsigned char ucLED6 = 0;

unsigned char ucLED7 = 0;

unsigned char ucLED8 = 0;

unsigned char ucLED9 = 0;

unsigned char ucLED10 = 0;

unsigned char ucLED11 = 0;

unsigned char ucLED12 = 0;

unsigned char ucLED13 = 0;

unsigned char ucLED14 = 0;

unsigned char ucLED15 = 0;

unsigned char ucLED16 = 0;

 

 

unsigned char ucLed_update = 0;  /*刷新變量。每次更改LED燈的狀態(tài)都要更新一次。*/

 

unsigned char ucLedStep_01_08 = 0; /*第1個(gè)至第8個(gè)LED跑馬燈的步驟變量*/

unsigned int  uiTimeCnt_01_08 = 0; /*第1個(gè)至第8個(gè)LED跑馬燈的統(tǒng)計(jì)定時(shí)中斷次數(shù)的延時(shí)計(jì)數(shù)器*/

 

unsigned char ucLedStep_09_16 = 0; /*第9個(gè)至第16個(gè)LED跑馬燈的步驟變量*/

unsigned int  uiTimeCnt_09_16 = 0; /*第9個(gè)至第16個(gè)LED跑馬燈的統(tǒng)計(jì)定時(shí)中斷次數(shù)的延時(shí)計(jì)數(shù)器*/

 

unsigned char ucLedStatus16_09 = 0;   /*代表底層74HC595輸出狀態(tài)的中間變量*/

unsigned char ucLedStatus08_01 = 0;   /*代表底層74HC595輸出狀態(tài)的中間變量*/

 

unsigned char ucKeySec = 0; /*被觸發(fā)的按鍵編號(hào)*/

unsigned int uiKeyTimeCnt1 = 0; /*按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器*/

unsigned char ucKeyLock2 = 0; /*按鍵觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int uiKeyTimeCnt2 = 0; /*按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器*/

unsigned char ucKeyLock3 = 0; /*按鍵觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int uiKeyTimeCnt3 = 0; /*按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器*/

unsigned char ucKeyLock1 = 0; /*按鍵觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int uiKeyTimeCnt4 = 0; /*按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器*/

unsigned char ucKeyLock4 = 0; /*按鍵觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int uiVoiceCnt = 0; /*蜂鳴器鳴叫的持續(xù)時(shí)間計(jì)數(shù)器*/

 

unsigned int uiSetTimeLevel_09_16 = 300; /*速度變量,此數(shù)值越大速度越慢,此數(shù)值越小速度越快。*/

unsigned char ucLedDirFlag = 0; /*方向變量,把按鍵與跑馬燈關(guān)聯(lián)起來(lái)的核心變量,0代表正方向,1代表反方向*/

unsigned char ucLedStartFlag = 1; /*啟動(dòng)和暫停的變量,0代表暫停,1代表啟動(dòng)*/

/**

* @brief  定時(shí)器0初始化函數(shù)

* @param  無(wú)

* @retval 初始化T0

**/

void Init_T0(void)

{

TMOD = 0x01;                    /*set timer0 as mode1 (16-bit)*/

TL0 = T1MS;                     /*initial timer0 low byte*/

TH0 = T1MS >> 8;                /*initial timer0 high byte*/

}

/**

* @brief  外圍初始化函數(shù)

* @param  無(wú)

* @retval 初始化外圍

**/

void Init_Peripheral(void)

{

ET0 = 1;/*允許定時(shí)中斷*/

TR0 = 1;/*啟動(dòng)定時(shí)中斷*/

EA = 1;/*開(kāi)總中斷*/

 

}

 

/**

* @brief  初始化函數(shù)

* @param  無(wú)

* @retval 初始化單片機(jī)

**/

void Init(void)

{

Key_Gnd = 0;

Beep = 1;

Init_T0();

}

/**

* @brief  延時(shí)函數(shù)

* @param  無(wú)

* @retval 無(wú)

**/

void Delay_Long(unsigned int uiDelayLong)

{

   unsigned int i;

   unsigned int j;

   for(i=0;i   {

      for(j=0;j<500;j++)  /*內(nèi)嵌循環(huán)的空指令數(shù)量*/

          {

             ; /*一個(gè)分號(hào)相當(dāng)于執(zhí)行一條空語(yǔ)句*/

          }

   }

}

/**

* @brief  延時(shí)函數(shù)

* @param  無(wú)

* @retval 無(wú)

**/

void Delay_Short(unsigned int uiDelayShort)

{

   unsigned int i;

   for(i=0;i   {

; /*一個(gè)分號(hào)相當(dāng)于執(zhí)行一條空語(yǔ)句*/

   }

}

/**

* @brief  掃描按鍵

* @param  無(wú)

* @retval 放在定時(shí)中斷里

**/

void Key_Scan(void)

{

if(Key_S1 == 1) /*IO是高電平,說(shuō)明按鍵沒(méi)有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位*/

{

ucKeyLock1 = 0;

uiKeyTimeCnt1 = 0;

}

else if(ucKeyLock1 == 0) /*有按鍵按下,且是第一次被按下*/

{

uiKeyTimeCnt1 ++; /*累加定時(shí)中斷次數(shù)*/

if(uiKeyTimeCnt1 > const_key_time1)

{

uiKeyTimeCnt1 = 0;

ucKeyLock1 = 1; /*自鎖按鍵置位,避免一直觸發(fā)*/

ucKeySec = 1;

}

}

if(Key_S2 == 1) /*IO是高電平,說(shuō)明按鍵沒(méi)有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位*/

{

ucKeyLock2 = 0;

uiKeyTimeCnt2 = 0;

}

else if(ucKeyLock2 == 0) /*有按鍵按下,且是第一次被按下*/

{

uiKeyTimeCnt2 ++; /*累加定時(shí)中斷次數(shù)*/

if(uiKeyTimeCnt2 > const_key_time2)

{

uiKeyTimeCnt2 = 0;

ucKeyLock2 = 1; /*自鎖按鍵置位,避免一直觸發(fā)*/

ucKeySec = 2;

}

}

if(Key_S3 == 1) /*IO是高電平,說(shuō)明按鍵沒(méi)有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位*/

{

ucKeyLock3 = 0;

uiKeyTimeCnt3 = 0;

}

else if(ucKeyLock3 == 0) /*有按鍵按下,且是第一次被按下*/

{

uiKeyTimeCnt3 ++; /*累加定時(shí)中斷次數(shù)*/

if(uiKeyTimeCnt3 > const_key_time3)

{

uiKeyTimeCnt3 = 0;

ucKeyLock3 = 1; /*自鎖按鍵置位,避免一直觸發(fā)*/

ucKeySec = 3;

}

}

if(Key_S4 == 1) /*IO是高電平,說(shuō)明按鍵沒(méi)有被按下,這時(shí)要及時(shí)清零一些標(biāo)志位*/

{

ucKeyLock4 = 0;

uiKeyTimeCnt4 = 0;

}

else if(ucKeyLock4 == 0) /*有按鍵按下,且是第一次被按下*/

{

uiKeyTimeCnt4 ++; /*累加定時(shí)中斷次數(shù)*/

if(uiKeyTimeCnt4 > const_key_time4)

{

uiKeyTimeCnt4 = 0;

ucKeyLock4 = 1; /*自鎖按鍵置位,避免一直觸發(fā)*/

ucKeySec = 4;

}

}

}

/**

* @brief  按鍵服務(wù)的應(yīng)用程序

* @param  無(wú)

* @retval 無(wú)

**/

void Key_Service(void)

{

switch(ucKeySec) /*按鍵服務(wù)狀態(tài)切換*/

{

case 1: /*改變跑馬燈方向的按鍵,對(duì)應(yīng)S1*/

if(ucLedDirFlag == 0) /*通過(guò)中間變量改變跑馬燈的方向*/

{

ucLedDirFlag = 1;

}

else

{

ucLedDirFlag = 0;

}

uiVoiceCnt = const_voice_short; /*按鍵聲音觸發(fā),滴一聲就停。*/

ucKeySec = 0; /*響應(yīng)按鍵服務(wù)處理程序后,按鍵編號(hào)清零,避免一致觸發(fā)*/

break;

case 2:

if(uiSetTimeLevel_09_16 >= 50)

{

uiSetTimeLevel_09_16 = uiSetTimeLevel_09_16 - 10;

}

else /*最快限定在50*/

{

uiSetTimeLevel_09_16 = 50;

}

uiVoiceCnt = const_voice_short;

ucKeySec = 0;

break;

case 3:

if(uiSetTimeLevel_09_16 <= 550)

{

uiSetTimeLevel_09_16 = uiSetTimeLevel_09_16 + 10;

}

else /*最快限定在550*/

{

uiSetTimeLevel_09_16 = 550;

}

uiVoiceCnt = const_voice_short;

ucKeySec = 0;

break;

case 4:

if(ucLedStartFlag == 1) /*啟動(dòng)和暫停兩種狀態(tài)循環(huán)切換*/

{

ucLedStartFlag = 0;

}

else

{

ucLedStartFlag = 1;

}

uiVoiceCnt = const_voice_short;

ucKeySec = 0;

break;

}

}

/**

* @brief  595驅(qū)動(dòng)函數(shù)

* @param  無(wú)

* @retval * 兩個(gè)聯(lián)級(jí)74HC595的工作過(guò)程:

* 每個(gè)74HC595內(nèi)部都有一個(gè)8位的寄存器,兩個(gè)聯(lián)級(jí)起來(lái)就有兩個(gè)寄存器。ST引腳就相當(dāng)于一個(gè)刷新

* 信號(hào)引腳,當(dāng)ST引腳產(chǎn)生一個(gè)上升沿信號(hào)時(shí),就會(huì)把寄存器的數(shù)值輸出到74HC595的輸出引腳并且鎖存起來(lái),

* DS是數(shù)據(jù)引腳,SH是把新數(shù)據(jù)送入寄存器的時(shí)鐘信號(hào)。也就是說(shuō),SH引腳負(fù)責(zé)把數(shù)據(jù)送入到寄存器里,ST引腳

* 負(fù)責(zé)把寄存器的數(shù)據(jù)更新輸出到74HC595的輸出引腳上并且鎖存起來(lái)。

**/

void HC595_Drive(unsigned char ucLedStatusTemp16_09, unsigned char ucLedStatusTemp08_01)

{

unsigned char i;

unsigned char ucTempData;

Hc595_Sh = 0;

Hc595_St = 0;

ucTempData = ucLedStatusTemp16_09; /*先送高8位*/

for(i = 0; i < 8; i ++)

{

if(ucTempData >= 0x80)

{

Hc595_Ds = 1;

}

else

{

Hc595_Ds = 0;

}

Hc595_Sh = 0; /*SH引腳的上升沿把數(shù)據(jù)送入寄存器*/

Delay_Short(15); 

Hc595_Sh = 1;

Delay_Short(15);

ucTempData = ucTempData <<1;

}

ucTempData = ucLedStatusTemp08_01; /*再先送低8位*/

for(i = 0; i < 8; i ++)

{

if(ucTempData >= 0x80)

{

Hc595_Ds = 1;

}

else

{

Hc595_Ds = 0;

}

Hc595_Sh = 0; /*SH引腳的上升沿把數(shù)據(jù)送入寄存器*/

Delay_Short(15); 

Hc595_Sh = 1;

Delay_Short(15);

ucTempData = ucTempData <<1;

}

Hc595_St = 0; /*ST引腳把兩個(gè)寄存器的數(shù)據(jù)更新輸出到74HC595的輸出引腳上并且鎖存起來(lái)*/

Delay_Short(15);

Hc595_St = 1;

Delay_Short(15);

Hc595_Sh = 0; /*拉低,抗干擾就增強(qiáng)*/

Hc595_St = 0;

Hc595_Ds = 0;

}

/**

* @brief  LED更新函數(shù)

* @param  無(wú)

* @retval 

* 把74HC595驅(qū)動(dòng)程序翻譯成類似單片機(jī)IO口直接驅(qū)動(dòng)方式的過(guò)程。

* 每次更新LED輸出,記得都要把ucLed_update置1表示更新。

**/

void LED_Update()

{

if(ucLed_update == 1)

{

ucLed_update = 0; /*及時(shí)清零,讓它產(chǎn)生只更新一次的效果,避免一直更新。*/

if(ucLED1 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x01;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xfe;

}

if(ucLED2 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x02;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xfd;

}

if(ucLED3 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x04;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xfb;

}

if(ucLED4 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x08;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xf7;

}

if(ucLED5 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x10;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xef;

}

if(ucLED6 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x20;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xdf;

}

if(ucLED7 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x40;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0xbf;

}

if(ucLED8 == 1)

{

ucLedStatus08_01 = ucLedStatus08_01 | 0x80;

}

else

{

ucLedStatus08_01 = ucLedStatus08_01 & 0x7f;

}

if(ucLED9 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x01;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xfe;

}

if(ucLED10 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x02;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xfd;

}

if(ucLED11 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x04;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xfb;

}

if(ucLED12 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x08;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xf7;

}

if(ucLED13 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x10;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xef;

}

if(ucLED14 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x20;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xdf;

}

if(ucLED15 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x40;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0xbf;

}

if(ucLED16 == 1)

{

ucLedStatus16_09 = ucLedStatus16_09 | 0x80;

}

else

{

ucLedStatus16_09 = ucLedStatus16_09 & 0x7f;

}

HC595_Drive(ucLedStatus16_09, ucLedStatus08_01);

}

}

///**

//* @brief  LED服務(wù)函數(shù)

//* @param  無(wú)

//* @retval 無(wú)

//**/

//void LED_Flicker_01_08(void)

[1] [2]
關(guān)鍵字:51單片機(jī)  74HC595  跑馬燈 引用地址:51單片機(jī)實(shí)現(xiàn)兩片聯(lián)級(jí)74HC595控制跑馬燈

上一篇:51單片機(jī)實(shí)現(xiàn)用LED燈和按鍵來(lái)模擬工業(yè)自動(dòng)化設(shè)備的運(yùn)動(dòng)控制
下一篇:51單片機(jī)實(shí)現(xiàn)兩片聯(lián)級(jí)74HC595多任務(wù)并行處理兩路跑馬燈

推薦閱讀最新更新時(shí)間:2025-04-25 12:07

74HC595走馬燈演示程序
;================================================ SDATA_595 EQU P1.0 ;串行數(shù)據(jù)輸入 SCLK_595 EQU P1.1 ;移位時(shí)鐘脈沖 RCK_595 EQU P1.2 ;輸出鎖存器控制脈沖 ;================================================ ORG 0000H LJMP MAIN ORG 0030H ;================================================ MAIN: MOV SP,#60H MOV R0,#0FEH MAIN1: CALL OUT_595 CALL DE
[單片機(jī)]
GD32330C-START開(kāi)發(fā)板試用體驗(yàn):MDK開(kāi)發(fā)環(huán)境搭建,跑馬燈demo下載成功
開(kāi)發(fā)環(huán)境是玩的開(kāi)始,那么如何快速搭建一個(gè)穩(wěn)定的開(kāi)發(fā)環(huán)境?GD的針對(duì)大多數(shù)工程師的開(kāi)發(fā)習(xí)慣,已經(jīng)給我們準(zhǔn)備的針對(duì)IAR和MDK這兩個(gè)IDE的支持包了。在說(shuō)這個(gè)之前,先看下GD給我們CD的GD32330C-STARTFiles文件夾里面,包含了哪些東西。見(jiàn)圖1,GD32330C-STARTFiles文件夾中包含了,我們初始開(kāi)發(fā)的所有東西,我來(lái)給大家說(shuō)道說(shuō)道 這里我介紹搭建MDK的開(kāi)發(fā)環(huán)境,個(gè)人使用MDK多一點(diǎn)。IAR的話期待論壇別的同學(xué)給大家介紹吧。首先,如果我們啥都不做,直接打開(kāi)官方的demo,MDK會(huì)直接提示找不到當(dāng)前的工程的device,要我們?nèi)グ惭b這顆device的支持包。當(dāng)然,GD給我們已經(jīng)提供了支持安裝程序,以及de
[單片機(jī)]
GD32330C-START開(kāi)發(fā)板試用體驗(yàn):MDK開(kāi)發(fā)環(huán)境搭建,<font color='red'>跑馬燈</font>demo下載成功
STM32CubeMX學(xué)習(xí)教程之一:GPIO輸出之跑馬燈
完整源碼下載: https://github.com/simonliu009/STM32CubeMX-GPIO-Control 軟件版本: STM32CubeMX V4.25.0 System Workbench V2.4 固件庫(kù)版本: STM32Cube FW_F1 V1.6.1 硬件:OneNet 麒麟座V2.3 在STM32CubeMX中新建項(xiàng)目,選擇正確的MCU型號(hào) 首先設(shè)置RCC和SYS,如下圖 然后根據(jù)板子實(shí)際情況設(shè)置時(shí)鐘(麒麟座外部晶振是12M,STM32F103x的最高主頻是72M),如下圖 GPIO設(shè)置 PC7, PC8, PA12和 PC10為GPIO_OUTPUT, (這是麒
[單片機(jī)]
STM32CubeMX學(xué)習(xí)教程之一:GPIO輸出之<font color='red'>跑馬燈</font>
基于STM32-跑馬燈實(shí)現(xiàn)
我學(xué)習(xí)M3有一段時(shí)間,第一次寫博客,通過(guò)博客分享自己學(xué)習(xí)的經(jīng)驗(yàn)跟大家探討同時(shí)提高自己對(duì)M3的認(rèn)識(shí)。相信大家初學(xué)時(shí)第一個(gè)實(shí)驗(yàn)就是實(shí)現(xiàn)跑馬燈,這里我就介紹下跑馬燈的實(shí)現(xiàn)。 1.首先講下GPIO GPIO—general purpose intput output是通用輸入輸出端口的簡(jiǎn)稱,簡(jiǎn)單來(lái)說(shuō)就是軟件可控制的引腳,STM32芯片的GPIO引腳與外部設(shè)備連接起來(lái),從而實(shí)現(xiàn)與外部通訊、控制以及數(shù)據(jù)采集的功能 。 2.端口與引腳的區(qū)別 端口:?jiǎn)纹瑱C(jī)內(nèi)部(CPU單元)和外部IO的接口組,比如說(shuō)PORTA端口,有16個(gè)引腳,PORTA.0~PORTA.15。端口在IO空間映射有寄存器,這個(gè)寄存器反映當(dāng)前端口的狀態(tài),如PORT
[單片機(jī)]
51單片機(jī)開(kāi)發(fā)步驟詳解
想要從事高端嵌入式開(kāi)發(fā),首先要會(huì)用ARM與Linux,想要會(huì)用ARM與Linux,首先要會(huì)單片機(jī),想要零基礎(chǔ)學(xué)會(huì)單片機(jī),就要想從51單片機(jī)開(kāi)始; 想要學(xué)好單片機(jī),基礎(chǔ):1、C語(yǔ)言了解;2、微機(jī)原理與接口技術(shù)了解;想要提升開(kāi)發(fā)能力,就必須要不斷地實(shí)踐,建議小白可以在網(wǎng)上(某寶)買一塊51單片機(jī)開(kāi)發(fā)板,自己參照課程研究研究 下面我把我的經(jīng)歷給大家說(shuō)一下,希望有志于單片機(jī)開(kāi)發(fā)的童鞋能做一個(gè)參考 第一步: C語(yǔ)言基礎(chǔ),建議買一本譚浩強(qiáng)的《C語(yǔ)言程序設(shè)計(jì)》,如果不想買,可以在網(wǎng)上找一個(gè)PDF版; 微機(jī)原理與接口技術(shù)基礎(chǔ),建議去中國(guó)大學(xué)MOOC上看一下相關(guān)課程,也可以看C語(yǔ)言課程;記?。哼@些課程要不求甚解,因?yàn)檫@些都是非常抽象的概念,如果非要
[單片機(jī)]
51單片機(jī)】點(diǎn)陣LED的顯示實(shí)驗(yàn)
前言 今天女朋友生日,除了禮物之外,一時(shí)想不到能給她點(diǎn)什么不一樣的,并且奈何自己不會(huì)寫詩(shī),沒(méi)辦法從這方面入手。所以就用我會(huì)的方式吧。 既然最近自己琢磨琢磨單片機(jī),也準(zhǔn)備玩兒點(diǎn)陣LED的顯示實(shí)驗(yàn),這時(shí)我靈機(jī)一動(dòng),不如用LED做一個(gè)吧。(????????????老理工男了,怎么有的女朋友?) 好,下面就來(lái)看看我是怎么做的吧。 一、環(huán)境 環(huán)境用的是Keil5編譯,這是目前比較主流的單片機(jī)編譯軟件,支持匯編和C。其次,我用到了Proteus8軟件仿真,沒(méi)有自己買單片機(jī),仿真軟件的東西很全面。具體的軟件操作在我的上一篇文章中有說(shuō)了,這里就不再贅述。需要看軟件操作的小伙伴可以參考我的 這篇文章 (點(diǎn)擊閱讀)。 二、硬件 這次用到的原件有
[單片機(jī)]
【<font color='red'>51單片機(jī)</font>】點(diǎn)陣LED的顯示實(shí)驗(yàn)
基于STC51單片機(jī)的霓虹燈
設(shè)計(jì)要求:# 使用PWM驅(qū)動(dòng)8個(gè)LED燈 人眼不能觀察到燈光全滅 燈光要有動(dòng)畫效果 設(shè)計(jì)概述:# 按照設(shè)計(jì)要求,為了更直觀的說(shuō)明脈沖寬度調(diào)制技術(shù)(PWM),所以霓虹燈的動(dòng)畫效果為流水燈形式。所需要的單片機(jī)芯片為STC89C52,所用的硬件工具是由華清遠(yuǎn)見(jiàn)開(kāi)發(fā)的基于STC89C52的智能小車。該小車配備所需要的LED燈模塊,8個(gè)LED燈由P1口來(lái)控制。STC89C52是一種低功耗,高性能的8位微控制器,是加強(qiáng)版的80C51單片機(jī),但是與80C51單片機(jī)一樣不具備PWM硬件模塊,所以我們需要自己寫一個(gè)程序來(lái)軟件模擬PWM方波。 PWM是一種方波,可以實(shí)現(xiàn)數(shù)字信號(hào)控制模擬電路,它有兩個(gè)重要參數(shù)周期或頻率,占空比。占空比 = 高電
[單片機(jī)]
關(guān)于51單片機(jī)寄存器功能匯總表
21個(gè)特殊功能寄存器(52系列是26個(gè))不連續(xù)地分布在128個(gè)字節(jié)的SFR存儲(chǔ)空間中,地址空間為80H-FFH,在這片SFR空間中,包含有128個(gè)位地址空間,地址也是80H-FFH,但只有83個(gè)有效位地址,可對(duì)11個(gè)特殊功能寄存器的某些位作位尋址操作(這里介紹一個(gè)技巧:其地址能被8整除的都可以位尋址)。 在51單片機(jī)內(nèi)部有一個(gè)CPU用來(lái)運(yùn)算、控制,有四個(gè)并行I/O口,分別是P0、P1、P2、P3,有ROM,用來(lái)存放程序,有RAM,用來(lái)存放中間結(jié)果,此外還有定時(shí)/計(jì)數(shù)器,串行I/O口,中斷系統(tǒng),以及一個(gè)內(nèi)部的時(shí)鐘電路。在單片機(jī)中有一些獨(dú)立的存儲(chǔ)單元是用來(lái)控制這些器件的,被稱之為特殊功能寄存器(SFR)。這樣的特殊功能寄存器51單
[單片機(jī)]
關(guān)于<font color='red'>51單片機(jī)</font>寄存器功能匯總表
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 土默特左旗| 靖西县| 仙居县| 池州市| 政和县| 湾仔区| 延津县| 固阳县| 嘉禾县| 庆城县| 通化县| 民县| 紫金县| 澜沧| 宿州市| 丁青县| 崇礼县| 高密市| 马龙县| 历史| 汾阳市| 大庆市| 上林县| 墨脱县| 太仆寺旗| 东阳市| 大埔县| 平昌县| 苍山县| 通城县| 荣昌县| 商南县| 宝清县| 东阳市| 洪洞县| 双辽市| 乾安县| 朔州市| 壤塘县| 渝中区| 西乌|