1. 程式人生 > >藍橋杯微控制器練習 01:流水燈

藍橋杯微控制器練習 01:流水燈

本文內容基於藍橋杯比賽CT107D開發板,部分處理資料的函式不受限於開發板型號可以用於參考與學習

實現單個LED燈從左往右逐個點亮

流水燈電路原理圖

iPDF_Viewer_2018-12-14_09-43-58

iPDF_Viewer_2018-12-14_09-44-32

程式設計:

微控制器P2.5、6、7腳控制U24晶片74HC138輸出Y4,Y4經過U25晶片74HC02反相,選中U6晶片74HC573的使能(U6開始接收資料);

此時微控制器P0輸出八位資料送入U6的D1-D8,再關掉U6晶片74HC573的使能,U6晶片將P0口的資料更新到其輸出口Q1-Q8,從而實現對LED的控制;

U6輸出低電平則LED亮。

 

#include <STC15F2K60S2.H>

#define
uchar unsigned char #define uint unsigned int //================================================ off_bee()//關閉蜂鳴器 { P2 = (P2&0x1F|0xA0);//後三位設為000xxxxx,再設為101xxxxx P0 = 0x00; //P0設定00000000,送入573 P2 &= 0x1F; //後三位設為000xxxxx } //================================================ void led_write(uchar DATA)//更新led狀態 { off_bee(); P2
= (P2&0x1F|0x80); P0 = DATA ;//P0口傳送到573的資料 P2 &= 0x1F; //後三位設為000xxxxx } //=============================================== void delay(uint NUM)//延時函式 { uint i ; uchar j ; for(i=0;i<NUM;i++) for(j=0;j<120;j++); } //============================================== main() { uchar WATER
= 0x01; while(1) { led_write(~WATER);//反相併輸出,00000001變成11111110 WATER<<=1;//左移一位,00000001變成00000010 if(WATER == 0x00)//全部顯示過一遍後 WATER = 0X01;//從頭開始 delay(800);//等一會 } }