利用51單片機設計多于40個LED的流水燈,其中LED靜態顯示。 本設計是以51系單片機STC89C52作為控制中心的40個LED流水燈顯示,硬件方面利用鎖存器74HC273、40個LED流水燈等組件,實現帶有點陣圖片的LED流水燈顯示,通過定時器控制LED燈的刷新頻率。利用數電知識進行LED顯示擴展I/O。軟件程序使用Keil進行編程,STC—ISP進行寫入。程序中使用定時器0進行中斷,并在中斷內完成點陣動態刷新,實現40LED的靜態顯示的目的。此單片機LED流水燈有著價格適中、電路設計簡單的特點。
51hei.png (27.24 KB, 下載次數: 50)
下載附件
2019-12-16 14:00 上傳
74HC273帶鎖存功能,這樣D輸入的信號可以鎖住保持在輸出端,保持LED的驅動是固定的電平狀態。脈沖輸出信號也可以驅動LED,只是亮度與脈沖的脈寬有關。一般74HC273 的輸入端接在數據總線上,74HC273可以起到隔離的作用。動LED一般需要5-7mA的電流,負載比較大,如果接到其他門電路的輸出上,會影響這個輸出驅動其他門電路輸入的能力。
51hei.png (15.3 KB, 下載次數: 46)
下載附件
2019-12-16 14:01 上傳
在主程序中,先使能全局中斷,然后使能74HC27來然后使能74HC273來控制LED點陣。配置定時器0工作在模式1并設置定時初值,清零TF位,使能定時器0并啟動定時器0。在while(1)循環中更新鎖存器數據,進入中斷后定時250ms。主程序流程圖如圖5所示:
51hei.png (11.25 KB, 下載次數: 33)
下載附件
2019-12-16 14:01 上傳
中斷子程序中,定時器T 0中斷250次,即定時250ms,flagls 賦值為1。定時器中斷流程圖如圖6所示:
51hei.png (8.24 KB, 下載次數: 29)
下載附件
2019-12-16 14:02 上傳
單片機源程序如下:
- #include<reg52.h>
- unsigned char code ledchar[]={ //字模表
- 0x00,0x00,0x00,0x00, 0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF, 0x00,0x00,0x00,0x00, 0x00,0x00
- };
- unsigned char flagls =0; //250ms定時標志
- unsigned char j=1; //判斷i是否變化
- unsigned char cnt =0; //記錄T0中斷次數
- unsigned char i=0; //數組刷新索引
- void main()
- {
-
- EA = 1; //使能總中斷
- TMOD = 0X01; //T0 為模式1
- TH0 = 0XFC;//為T0賦初值0xfc67,定時1 ms
- TL0 = 0X67;
- ET0 = 1;//使能T0中斷
- TR0 = 1; //啟動T0
- while(1)
- {
- if(flagls == 1) //判斷250ms定時標志
- {
- flagls = 0; //250ms定時標志清零
- i++; //圖片索引自加1
- }
- if(i>17) i=0; //圖片索引達到17后歸零
-
- if(i !=j) //判斷i是否變化
- {
- j=i; //更新備份為當前值,以備進行下次比較
- P0 = 0X00;P1 = 0X00;P1 = 0X01; //消隱處理
- P0 = ledchar[i];P1 = 0X00;P1 = 0X01; //計數值顯示到LED上
- P0 = 0X00;P1 = 0X00;P1 = 0X02;
- P0 = ledchar[i+1];P1 = 0X00;P1 = 0X02;
- P0 = 0X00;P1 = 0X00;P1 = 0X04;
- P0 = ledchar[i+2];P1 = 0X00;P1 = 0X04;
- P0 = 0X00;P1 = 0X00;P1 = 0X08;
- P0 = ledchar[i+3];P1 = 0X00;P1 = 0X08;
- P0 = 0X00;P1 = 0X00;P1 = 0X10;
- P0 = ledchar[i+4];P1 = 0X00;P1 = 0X10;
- }
- }
-
- }
-
- //定時器0的中斷服務函數
- void interrupttimer0() interrupt 1
- {
- TH0 = 0XFC; // 重新加載初值
- TL0 = 0X67;
- cnt++; // 中斷次數計數值加1
- if(cnt>=250) // 中斷250次即250ms
- {
- cnt = 0; // 清零計數值以重新開始下一250ms計時
- flagls = 1; // 設置250ms定時標志為1
- }
-
- }
復制代碼
51hei.png (4.29 KB, 下載次數: 41)
下載附件
2019-12-16 13:59 上傳
所有資料51hei提供下載:
拓展IO口40個LED顯示.zip
(1.5 MB, 下載次數: 56)
2019-12-16 12:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|