新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用STC15F104E單片機(jī)制作閃燈

用STC15F104E單片機(jī)制作閃燈

作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
STC15F104E單片機(jī),就是一個定時器,上電開始計時,LED每秒閃一次,9小時后繼電器吸合3秒,然后釋放,計時器重新計時。如此循環(huán)。
#include "reg51.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define SYSclk 6000000L
#define MODE1T //Timer clock mode, commendt this line is 12T mode, uncomment is 1T mode
#ifdef MODE1T
#define T1MS (65536-SYSclk/1000) //1ms timer calculation method in 1T mode, 1000=1000Hz
#else
#define T1MS (65526-SYSclk/12/1000) //1ms timer calculation method in 12T mode
#endif
sfr AUXR=0x8e; //Auxiliary register
sbit TEST_LED=P3^3;
sbit relay = P3^4;
WORD count; //1000 times counter
BYTE sec;
BYTE min;
BYTE hour;
BYTE S3cnt;
BYTE S3cnt_Stat;
void clock_cnt();
/*Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
if (count--==0)
{
count=500; //500ms
TEST_LED=!TEST_LED;
if (TEST_LED) clock_cnt();
}
}
void main()
{
#ifdef MODE1T
AUXR=0x80; //timer0 work in 1T mode
#endif
TMOD=0x00; //set timer0 as mode0 (16-bit auto-reload)
TL0=T1MS; //initial timer0 low byte
TH0=T1MS>>8; //initial timer0 high byte
TR0=1; //timer0 start running
ET0=1; //enable timer0 interrupt
EA=1; //open global interrupt switch
sec = 0;
min = 0;
hour = 0;
S3cnt_Stat = 0;
while(1);
}
void clock_cnt()
{
if (S3cnt_Stat)
{
S3cnt--;
if (S3cnt==0)
{
S3cnt_Stat = 0;
relay = 0; //繼電器釋放
}
}
else
{
sec++;
if (sec>=60)
{
sec=0;
min++;
if (min>=60);
{
min=0;
hour++;
if (hour>=9) //到了9小時
{
relay = 1; //繼電器吸合
sec = 0;
min = 0;
hour = 0;
S3cnt_Stat = 1;
S3cnt = 3; //計數(shù)3秒
}
}
}
}
}


關(guān)鍵詞: STC15F104E單片機(jī)閃

評論


技術(shù)專區(qū)

關(guān)閉