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

歷史上的今天

今天是:2024年11月12日(星期二)

正在發生

2021年11月12日 | 51單片機實現兩片聯級74HC595驅動16個LED燈

發布者:GoldenHarmony 來源: eefocus關鍵字:51單片機  74HC595  LED燈 手機看文章 掃描二維碼
隨時隨地手機看文章

一、使用proteus繪制簡單的電路圖,用于后續仿真

二、編寫程序


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

----@Project:LED-74HC595

----@File:main.c

----@Edit:ZHQ

----@Version:V1.0

----@CreationTime:20200524

----@ModifiedTime:20200524

----@Description:兩片聯級的74HC595驅動的16個LED燈交叉閃爍。比如,先是第1,3,5,7,9,11,13,15八個燈亮,其它的燈都滅。然后再反過來,原來亮的就滅,原來滅的就亮。交替閃爍。

----單片機:AT89C52

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

#include "reg52.h"

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

#define FOSC 11059200L

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

 

#define const_time_level  400   

 

 

/*——————變量函數定義及聲明——————*/

/*定義74HC595*/

sbit Hc595_Sh = P2^3;

sbit Hc595_St = P2^4;

sbit Hc595_Ds = P2^5;

 

unsigned char ucLED1 = 0;   /*代表16個燈的亮滅狀態,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燈的狀態都要更新一次。*/

 

unsigned char ucLedStep = 0; /*步驟變量*/

unsigned int  uiTimeCnt = 0; /*統計定時中斷次數的延時計數器*/

 

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

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

 

/**

* @brief  定時器0初始化函數

* @param  無

* @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  外圍初始化函數

* @param  無

* @retval 初始化外圍

**/

void Init_Peripheral(void)

{

ET0 = 1;/*允許定時中斷*/

TR0 = 1;/*啟動定時中斷*/

EA = 1;/*開總中斷*/

 

}

 

/**

* @brief  初始化函數

* @param  無

* @retval 初始化單片機

**/

voidInit(void)

{

Init_T0();

}

/**

* @brief  延時函數

* @param  無

* @retval 無

**/

void Delay_Long(unsigned int uiDelayLong)

{

   unsigned int i;

   unsigned int j;

   for(i=0;i   {

      for(j=0;j<500;j++)  /*內嵌循環的空指令數量*/

          {

             ; /*一個分號相當于執行一條空語句*/

          }

   }

}

/**

* @brief  延時函數

* @param  無

* @retval 無

**/

void Delay_Short(unsigned int uiDelayShort)

{

   unsigned int i;

   for(i=0;i   {

; /*一個分號相當于執行一條空語句*/

   }

}

 

/**

* @brief  595驅動函數

* @param  無

* @retval * 兩個聯級74HC595的工作過程:

* 每個74HC595內部都有一個8位的寄存器,兩個聯級起來就有兩個寄存器。ST引腳就相當于一個刷新

* 信號引腳,當ST引腳產生一個上升沿信號時,就會把寄存器的數值輸出到74HC595的輸出引腳并且鎖存起來,

* DS是數據引腳,SH是把新數據送入寄存器的時鐘信號。也就是說,SH引腳負責把數據送入到寄存器里,ST引腳

* 負責把寄存器的數據更新輸出到74HC595的輸出引腳上并且鎖存起來。

**/

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引腳的上升沿把數據送入寄存器*/

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引腳的上升沿把數據送入寄存器*/

Delay_Short(15); 

Hc595_Sh = 1;

Delay_Short(15);

ucTempData = ucTempData <<1;

}

Hc595_St = 0;/*ST引腳把兩個寄存器的數據更新輸出到74HC595的輸出引腳上并且鎖存起來*/

Delay_Short(15);

Hc595_St = 1;

Delay_Short(15);

Hc595_Sh = 0;/*拉低,抗干擾就增強*/

Hc595_St = 0;

Hc595_Ds = 0;

}

/**

* @brief  LED更新函數

* @param  無

* @retval 

* 把74HC595驅動程序翻譯成類似單片機IO口直接驅動方式的過程。

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

**/

void LED_Update()

{

if(ucLed_update == 1)

{

ucLed_update = 0;/*及時清零,讓它產生只更新一次的效果,避免一直更新。*/

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閃爍函數

* @param  無

* @retval 無

**/

void LED_Flicker(void)

{

switch(ucLedStep)

{

case 0:

if(uiTimeCnt >= const_time_level)

{

uiTimeCnt = 0;/*時間計數器清零*/

ucLED1 = 1;/*每個變量都代表一個LED燈的狀態*/

ucLED2 = 0;

ucLED3 = 1;

ucLED4 = 0;

ucLED5 = 1;

ucLED6 = 0;

ucLED7 = 1;

ucLED8 = 0;

ucLED9 = 1;

ucLED10 = 0;

ucLED11 = 1;

ucLED12 = 0;

ucLED13 = 1;

ucLED14 = 0;

ucLED15 = 1;

ucLED16 = 0;

ucLed_update = 1;  /*更新顯示*/

ucLedStep = 1;

}

break;

case 1:

if(uiTimeCnt >= const_time_level)

{

uiTimeCnt = 0;/*時間計數器清零*/

ucLED1 = 0;/*每個變量都代表一個LED燈的狀態*/

ucLED2 = 1;

ucLED3 = 0;

ucLED4 = 1;

ucLED5 = 0;

ucLED6 = 1;

ucLED7 = 0;

ucLED8 = 1;

ucLED9 = 0;

ucLED10 = 1;

ucLED11 = 0;

ucLED12 = 1;

ucLED13 = 0;

ucLED14 = 1;

ucLED15 = 0;

ucLED16 = 1;

ucLed_update = 1;  /*更新顯示*/

ucLedStep = 0;

}

break;

}

}

/**

* @brief  定時器0中斷函數

* @param  無

* @retval 無

**/

void ISR_T0(void)interrupt 1

{

TF0 = 0;  /*清除中斷標志*/

  TR0 = 0; /*關中斷*/

if(uiTimeCnt < 0xffff)/*設定這個條件,防止uiTimeCnt超范圍。*/

{

uiTimeCnt ++;

}

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

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

  TR0 = 1; /*開中斷*/

}

 

/*——————主函數——————*/

/**

* @brief  主函數

* @param  無

* @retval 實現LED燈閃爍

**/

void main()

{

/*單片機初始化*/

Init();

/*延時,延時時間一般是0.3秒到2秒之間,等待外圍芯片和模塊上電穩定*/

Delay_Long(100);

/*單片機外圍初始化*/

Init_Peripheral();

while(1)

{

/*按鍵服務函數*/

LED_Flicker();

/*LED更新函數*/

LED_Update(); 

}

}

 

三、仿真實現


關鍵字:51單片機  74HC595  LED燈 引用地址:51單片機實現兩片聯級74HC595驅動16個LED燈

上一篇:51單片機實現兩片聯級74HC595依次點亮LED后依次熄滅
下一篇:51單片機實現矩陣鍵盤的組合按鍵觸發

推薦閱讀

? ? ? ? 盡管大家都知道劉海屏、異形屏這樣的形態不會是智能機的終點,可誰也無法給出確切的100%全面屏時間。于是在過渡中,又涌現出了滑蓋、彈出鏡頭等設計,越發混亂。  簡而言之,做到100%全面屏的主要難點就是如何布局前置攝像頭和聽筒。此前,媒體報道稱華為申請了變色玻璃專利來實現屏下攝像頭方案,現在,新的聽筒方案也浮出水面。  US...
BlackBerry(紐交所股票代碼:BB;多倫多證券交易所股票代碼:BB)今日宣布,現代Autron已選擇使用BlackBerry QNX為其下一代高級駕駛輔助系統(ADAS)和自動駕駛軟件平臺保駕護航。現代Autron是韓國最大的汽車制造商現代汽車集團的子公司,是專注于電子控制軟件和汽車半導體的領先研發企業。現代Autron將運用QNX? OS for Safety軟件解決方案以高性價...
2020年已接近尾聲,但手機市場從來不缺少血雨腥風。華為公布麒麟9000,蘋果推出A14處理器,拉開5nm處理器競爭序幕,高通驍龍875和三星Exynos 1080也在隨后漸漸浮出水面。尤其是在7nm時代相對比較邊緣的三星,此前Exynos 1080一曝光直接以超過69萬分的成績屠榜,成為目前手機處理器的性能霸主,大有強勢回歸與其他品牌一決高低的氣勢。芯片市場風云再起今...
SRAM 數據存儲器ATmega64 支持兩種配置的SRAM 數據存儲器,見Table 1。Figure 9 給出了ATmega64 SRAM 空間的組織結構。ATmega64并行單元超過 64個,對于0x60 - 0xFF的擴展I/O空間,只能使用ST/STS/STD 與LD/LDS/LDD 指令。在ATmega103 兼容模式下,不存在擴展I/O 空間。前4,352 個數據存儲器包括了寄存器文件、I/O 存儲器及內部數據SRAM...

史海拾趣

問答坊 | AI 解惑

原來我們的汽車是如此不堪一擊

實在不忍看一幕幕倒下的人類,看看這一幅幅廢墟中的汽車已經讓人不寒而栗,心驚膽戰,珍惜生命,珍惜擁有。…

查看全部問答∨

困擾電源IC設計師們的重要課題是什么呢???

問:困擾電源IC設計師們的重要課題是什么呢??? 答:手持終端設備趨向于低電壓化,波紋噪聲等的處理和輸出電壓精度的高要求???      請問還有別的嗎??…

查看全部問答∨

ds1302讀取只有三個能顯示正確,怎么回事,實在檢查不出問題所在

Write_Ds1302Byte(0x8f,0); 1。 sec = BCDToDEC(Read_DS1302Byte(SEC_READ));       Delay(100); 2。 min = BCDToDEC(Read_DS1302Byte(MIN_READ));               & ...…

查看全部問答∨

文件系統過濾驅動中關于IRP_MJ_CREATE文件路徑的重定向問題???

如題,我想在IRP_MJ_CREATE截獲創建的文件路徑,并修改重定向到U盤上創建,就是文件的轉存!如有可行代碼請多多提示,大牛幫幫忙啊!!! …

查看全部問答∨

串口通訊校驗碼問題(全部家當80分求助!!!!)

各位大俠幫忙分析下,下列幾組數據采用了什么校驗算法,          02 |01 3A 3A |79 14 |03   (02,03 是起始,結束。79,14 估計是校驗碼)         02 01 3B 3B 5A 04 03 ...…

查看全部問答∨

keil 公司的軟件uVision-51打開文件時顯示的是亂碼問題

在windows環境下使用Keil公司的軟件uVision-51,打開文件時顯示的文件夾名和文件名是亂碼,例如“uVision51 files”  顯示成"UVISIO~1",以致后面的操作無法進行。是什么原因?如何解決?…

查看全部問答∨

那兒有PC架構的開發板買?

有帶多個聲音通道的嗎?比如16路音頻輸出????…

查看全部問答∨

stc12c5410ad的PWM波形輸出

最近在使用stc12c5410ad的PWM模塊功能,輸出固定頻率可調占空比的PWM波,下面是我寫的程序,產生25%和50%占空比的PWM波:    /******************************************************************************  功能:固定頻率3 ...…

查看全部問答∨

MSP430的感想

MSP430的感想 有學習MSP430的想法很長時間了,可是由于多種原因一直沒有如愿。希望這次能和當年學51一樣堅持下去。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 闻喜县| 思茅市| 三明市| 子洲县| 拜泉县| 宁武县| 昌宁县| 灵台县| 沐川县| 历史| 绥宁县| 安平县| 溧水县| 云龙县| 新乐市| 东辽县| 来安县| 蕲春县| 万盛区| 越西县| 中卫市| 游戏| 朝阳区| 祥云县| 安阳市| 景德镇市| 吉安市| 日照市| 永定县| 繁昌县| 常山县| 西丰县| 卢龙县| 五华县| 应城市| 金寨县| 桑日县| 夹江县| 福鼎市| 贵德县| 翁源县|