专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

用STC15F104E单片机制作闪灯

作者:佚名   来源:本站原创   点击数:  更新时间:2012年12月20日   【字体:
用STC15F104E单片机,就是一个定时器,上电开始计时,LED每秒闪一次,9小时后继电器吸合3秒,然后释放,计时器重新计时。如此循环。
#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;        //计数3秒
            }
        }
     }
    }
} 
关闭窗口

相关文章