在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            低功耗MEGA8電子表

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            電子表是基于MEGA8單片機LED數(shù)碼管為主體設(shè)計的,它功能全面,可以顯示月,日,時,分,秒,還可以設(shè)定鬧鐘,設(shè)計時考慮到省電,還可以進入休眠狀態(tài)(不顯示,但時鐘仍運行),以下是該表的使用說明。

            12位分3頁設(shè)置依次是:

            時2位:分2位;

            UP

            LEFT_ SET_ RIGHT

            DOWN

            月2位:日2位;

            鬧鐘的時2位:分2位

            設(shè)置完后再按SET鍵即可回到正常的顯示模式(時:分),若要當(dāng)秒表,則按RIGHT,可實現(xiàn)兩種顯示切換。

            正常顯示時,按DOWN鍵,可以顯示日期(月:日),過幾秒后回到正常顯示模式。按LEFT休眠,重按后蘇醒。


            本電子表使用3節(jié)5號電池供電一共5個鍵,和一個位于電路板和電池盒間的電源開關(guān)。5個鍵按空間位置分別是LEFT,RIGHT,UP,DOWN,以及中間的SET,位置和名字對應(yīng)。

            鍵位設(shè)置

            上電后,按RIGHT鍵可以實現(xiàn)(時:分)顯示到(分:秒)顯示模式的切換。按SET鍵可以進入設(shè)置模式,一共有12位要設(shè)置,分為3頁(因為是4個數(shù)碼管),此時數(shù)碼管顯示第一位,按RIGHT依次像右移動,按UP鍵所顯示的位會加1,加到9回0。



            #include"iom8v.h"
            #include"macros.h"
            #include"key.h"

            const char Table[10]={0x3f,0x06,0x5b,0x4f,0x66,
            0x6d,0x7d,0x07,0x7f,0x6f};
            const char MONTH[12]={31,28,31,30,31,30,31,31,
            30,31,30,31};
            char Date[12]={1,1,1,1,2,2,2,2,3,3,3,3};
            char sleep="0",wei=0,wei_1=0,second,minute,hour,
            minute_s,hour_s,
            month="10",data=22,page=0;


            void Delay_nus(unsigned i)
            {
            for(;i>1;i--){;}
            }
            void Delay_1ms()
            {unsigned i;
            for(i=125;i>1;i--)
            {Delay_nus(1);
            }
            }
            void Delay_nms(unsigned i)
            {
            for(;i>1;i--)
            {Delay_1ms();}
            }
            void Display(char *p)

            {char i,sel=0x01;
            if(sleep) return;
            for(i=0;i<4;i++)
            {
            PORTB=~sel; // 0 表示選通
            PORTD="Table"[p[i]];
            Delay_nms(2);
            PORTD="0x00";
            sel="sel"<<1;
            }
            }
            void Sound(char i)
            {
            char n;
            for(n=0;n {
            PORTC&=~(1< PORTC|=(1< Delay_nms(15);
            PORTC&=~(1< Delay_nms(15);
            }
            }

            void Ring(void)
            {

            char temp="5";PORTD=0x00;
            while(temp>0)
            {
            Sound(1);
            Delay_nms(200);
            Sound(1);
            Delay_nms(200);
            Sound(1);
            Delay_nms(200);
            Sound(1);
            Delay_nms(400);
            Sound(1);

            temp--;
            }
            }
            void Io_Init(Void)
            {DDRD=0xFF;
            PORTD=0xff;
            DDRC=0x01;PORTC=0xfe;

            DDRB=0x0F;
            PORTB=0xff;

            }
            void Init_timer2(void)
            {
            TCCR2=0x00; //先關(guān)再操作
            ASSR=(1TCCR2=0x07; //1024 fen
            SREG=SREG|0x80;
            TIMSK|=(1<}
            void BIN_to_CLK(char *p)
            {
            if(page)
            { p[3]=second%10;
            p[2]=second/10;
            p[1]=minute%10;
            p[0]=minute/10;
            }
            else{

            p[3]=minute%10;
            p[2]=minute/10;
            p[1]=hour%10;
            p[0]=hour/10;
            }
            }
            void DATA_to_CLK(char *p)
            {
            p[7]=data%10;
            p[6]=data/10;
            p[5]=month%10;
            p[4]=month/10;
            }

            char Key_Value(void)
            {
            char temp,value;

            temp=PINC&0x3e;
            //
            Delay_nms(8);
            if(temp==(PINC&0x3e))//延時后鍵值未變,消抖成功

            switch(temp)
            {
            case 0x3c: value="SET"; break;
            case 0x3a: value="DEC"; break;
            case 0x36: value="ADD"; break;
            case 0x2e: value="LEFT"; break;
            case 0x1e: value="RIGHT"; break;
            default: value="ERROR";
            }
            while(temp==(PINC&0x3e));//直到鍵松開
            Delay_nms(25);
            return value;
            }
            void Display_wei(char i)
            {PORTD=Table[Date[wei_1]];PORTB=~(1<}
            void Key_Process()
            {char temp, n;

            temp=Key_Value();
            if(temp==DEC)
            {for(n=0;n<150;n++)
            {
            DATA_to_CLK(Date);
            Display(Date+4);
            }
            return;
            }
            else if(temp==LEFT)
            {
            if(sleep==0) {
            sleep="1";

            MCUCR="0x90";
            asm("SLEEP");
            }
            else sleep="0";

            return;
            }

            else if(temp==RIGHT)
            {if (page==0) page="1";
            else page="0";
            }
            if(temp!=SET)
            return;
            wei_1=0;Display_wei(wei_1);
            while(1)
            {
            temp="Key"_Value();
            switch(temp)
            {
            case SET: hour="Date"[1]+Date[0]*10;
            minute="Date"[3]+Date[2]*10;
            month="Date"[5]+Date[4]*10;
            data="Date"[7]+Date[6]*10;
            hour_s=Date[8]*10+Date[9];
            minute_s=Date[10]*10+Date[11];
            return;

            case RIGHT: if(wei_1<11) wei_1++;
            else wei_1=0;
            wei="wei"_1%4;
            break;
            case ADD: if(Date[wei_1]<9) Date[wei_1]++;
            else Date[wei_1]=0;
            break;
            default: break;
            }
            Display_wei(wei_1);

            }


            }
            void main(void)
            {
            Io_Init();
            Init_timer2();
            TIMSK =1// Sound(1);

            while(1)
            {
            BIN_to_CLK(Date);
            Display(Date) ;
            if((PINC&0x3e)!=0x3e) Key_Process();

            if(sleep) {MCUCR=0x90;asm("SLEEP");}
            }
            }
            #pragma interrupt_handler Timer2:5
            void Timer2(void)
            {TCNT2=0xe0;
            second++;
            //sleep=0;
            MCUCR=0x00;
            //Sound(1);
            if(second==60)
            {minute++;second=0;
            if(minute==minute_s&&hour==hour_s&&hour!=0&&minute!=0)
            Ring();}
            if(minute==60)
            {hour++;minute=0;

            }
            if(hour==24)
            {hour=0;data++;}
            if(data==MONTH[month])
            {data=1;month++;}

            }




            key.h
            #define SET 0x01
            #define LEFT 0x02
            #define RIGHT 0x03
            #define ADD 0x04
            #define DEC 0x05
            #define ERROR 0x06


            關(guān)鍵詞: 低功耗MEGA8電子

            評論


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

            關(guān)閉