⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock_11.c

📁 (1)上电后LCD背光打开
💻 C
📖 第 1 页 / 共 3 页
字号:
    {
        if (KeyNew <6)
        {
            AlarmTime1.secondh = KeyNew;
            lcd_write_data(AlarmTime1.secondh + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_minutel_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_secondl_addr);
        }
    }
    else if (adjust_item == 5)    //    set secondl
    {
        if ((KeyNew >=0) & (KeyNew <=9))
        {
            AlarmTime1.secondl = KeyNew;
            lcd_write_data(AlarmTime1.secondl + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
            lcd_write_inst(time_secondl_addr+3);
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_secondh_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_secondl_addr+3);
        }
    }
    else if (adjust_item == 6)    //    set on/off
    {
        if ((KeyNew == key_up) | (KeyNew == key_down))
        {
            if (Alarm1Enable)
            {
                Alarm1Enable =false;    //    disable alarm1
                lcd_write_data('f');
                lcd_write_data('f');
            }
            else
            {
                Alarm1Enable =true;        //    enable alarm1
                lcd_write_data('n');
                lcd_write_data(' ');
            }
            //lcd_write_inst(time_secondl_addr+3);
            adjust_item = 0;
            lcd_write_inst(time_hourh_addr);
            Alarm1Cnt = 0;
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_secondl_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item = 0;
            lcd_write_inst(time_hourh_addr);
        }
    }

}

//    -------------------------------------------------------
void set_alarm2(void)
{
    if (adjust_item == 0)    //    set hourh
    {
        if (((AlarmTime2.hourl <4) & (KeyNew < 3)) | ((AlarmTime2.hourl >3) & (KeyNew <2)))
        {
            AlarmTime2.hourh = KeyNew;
            lcd_write_data(AlarmTime2.hourh + '0');    //    refresh hourh
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
        }
        else if(KeyNew == key_left)
        {
            adjust_item = 6;
            lcd_write_inst(time_secondl_addr+3);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_hourl_addr);
        }
    }
    else if (adjust_item == 1) //    set hourl
    {
        if (((AlarmTime2.hourh == 2) & (KeyNew < 4)) | ((AlarmTime2.hourh < 2) & (KeyNew <=9)))
        {
            AlarmTime2.hourl = KeyNew;
            lcd_write_data(AlarmTime2.hourl + '0');    //    refresh hourl
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
            lcd_write_inst(time_minuteh_addr);
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_hourh_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_minuteh_addr);
        }
    }
    else if (adjust_item == 2)    //    set minuteh
    {
        if (KeyNew <6)
        {
            AlarmTime2.minuteh = KeyNew;
            lcd_write_data(AlarmTime2.minuteh + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_hourl_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_minutel_addr);
        }
    }
    else if (adjust_item == 3)    //    set minutel
    {
        if ((KeyNew >=0) & (KeyNew <=9))
        {
            AlarmTime2.minutel = KeyNew;
            lcd_write_data(AlarmTime2.minutel + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
            lcd_write_inst(time_secondh_addr);
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_minuteh_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_secondh_addr);
        }
    }
    else if (adjust_item == 4)    //    set secondh
    {
        if (KeyNew <6)
        {
            AlarmTime2.secondh = KeyNew;
            lcd_write_data(AlarmTime2.secondh + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_minutel_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_secondl_addr);
        }
    }
    else if (adjust_item == 5)    //    set secondl
    {
        if ((KeyNew >=0) & (KeyNew <=9))
        {
            AlarmTime2.secondl = KeyNew;
            lcd_write_data(AlarmTime2.secondl + '0');
            //lcd_write_inst(0x10);    //    move cursor back
            adjust_item ++;
            lcd_write_inst(time_secondl_addr+3);
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_secondh_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item ++;
            lcd_write_inst(time_secondl_addr+3);
        }
    }
    else if (adjust_item == 6)    //    set on/off
    {
        if ((KeyNew == key_up) | (KeyNew == key_down))
        {
            if (Alarm2Enable)
            {
                Alarm2Enable =false;    //    disable alarm2
                lcd_write_data('f');
                lcd_write_data('f');
            }
            else
            {
                Alarm2Enable =true;        //    enable alarm2
                lcd_write_data('n');
                lcd_write_data(' ');
            }
            //lcd_write_inst(time_secondl_addr+3);
            adjust_item = 0;
            lcd_write_inst(time_hourh_addr);
            Alarm2Cnt = 0;
        }
        else if(KeyNew == key_left)
        {
            adjust_item --;
            lcd_write_inst(time_secondl_addr);
        }
        else if(KeyNew == key_right)
        {
            adjust_item = 0;
            lcd_write_inst(time_hourh_addr);
        }
    }

}

//    -------------------------------------------------------
void main(void)
{
    unsigned char cnt;
    TRISC = 0x03;    //    PORTC.3 drive led,low active
    PORTC_MAP = 0x00;
    led = 0;
    BackLightEn = 0;
    BackLightTimer = 0;
    PORTC = PORTC_MAP;
    TRISA = 0xff;    //    low half byte as keyscan in
    TRISE = 0x00;
    ADCON0 = 0x00;
    ADCON1 = 0x06;    //    all digital I/Os
    lcd_init();
    INTCON = 0x00;
    lcd_write_inst(0x80);    //    set lcd ddram address
    for (pStr = StrPower1;*pStr!=0;pStr++)
    {
        lcd_write_data(*pStr);
    }
    lcd_write_inst(0x0c);        //    LCD cursor off
    PIR1 = PIR2 = 0x00;
    T1CON = 0x0f;    //    T1CON:    -- T1CKPS1 T1CPS0 T1OSCEN /T1SYNC TMR1CS TMR1ON
    TMR1H = 0x80;
    TMR1L = 0x00;
    TMR1IF = 0;
    CCPR2H = 0x7f;
    CCPR2L = 0xff;
    CCP2CON = 0x0b;    //    compare mode,set ccp2if,reset tmr1
    CCP2IF = 0;
    for (cnt=5;cnt>0;cnt--)    //    test for 5sec.
    {
        lcd_write_inst(0xc0+8);    //    set LCD adress
        lcd_write_data(cnt + '0');
        while (CCP2IF == 0)    //    wait for timer1 overflow
        {
            restart_wdt();
        }
        //TMR1H = 0x80;
        CCP2IF = 0;
    }
    //    write current date to lcd line 2
    lcd_write_inst(0x01);        //    clear LCD display
    lcd_write_inst(0xc0+3);        //    set LCD line2
    lcd_write_data(CurrentDate.year1 + '0');
    lcd_write_data(CurrentDate.year2 + '0');
    lcd_write_data(CurrentDate.year3 + '0');
    lcd_write_data(CurrentDate.year4 + '0');
    lcd_write_data('/');
    lcd_write_data(CurrentDate.monthh + '0');
    lcd_write_data(CurrentDate.monthl + '0');
    lcd_write_data('/');
    lcd_write_data(CurrentDate.dayh + '0');
    lcd_write_data(CurrentDate.dayl + '0');
    Alarm1Enable = true;    //false;
    Alarm2Enable = true;    //false;
    INTCON = 0xc0;    //    set GIE & PEIE
    //TMR1IE = 1;        //    enable timer1 interrupt
    CCP2IE = 1;            //    enable ccp2 interrupt
    CurrentMode = mode_time;
    Alarm1Cnt = Alarm2Cnt = 0;
    T2CON = 0x07;    //    T2CON: - TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
                    //    timer2 enable,prescaler = 16
    PR2 = PWM_period;    //    set pwm period
    CCPR1L = PWM_DC;    //    set pwm duty cycle
    CCP1CON = PWM_off;
    while(1)
    {
        restart_wdt();
        KeyOld = get_key();
        delay_ms(20);
        KeyNew = get_key();
        if (((KeyNew & 0x0f) != 0x00) & (KeyNew == KeyOld))
        {                            //    some key pressed
            if (BackLightEn == 1)    //    back light not on
            {
                BackLightEn = 0;        //    enable back-light
                BackLightTimer = 0;        //    start delay counter
            }
            else
            {
                if (KeyNew == key_0)
                    KeyNew = 0;
                else if(KeyNew == key_1)
                    KeyNew = 1;
                else if(KeyNew == key_2)
                    KeyNew = 2;
                else if(KeyNew == key_3)
                    KeyNew = 3;
                else if(KeyNew == key_4)
                    KeyNew = 4;
                else if(KeyNew == key_5)
                    KeyNew = 5;
                else if(KeyNew == key_6)
                    KeyNew = 6;
                else if(KeyNew == key_7)
                    KeyNew = 7;
                else if(KeyNew == key_8)
                    KeyNew = 8;
                else if(KeyNew == key_9)
                    KeyNew = 9;
                else if (KeyNew == key_mode)        //    MODE key pressed
                    set_mode();
                else if (KeyNew == key_cancel)        //    cancel buzzy
                {
                    led = 0;
                    CCP1CON = PWM_off;
                    BackLightEn = 1;
                    BackLightTimer = 0;
                }
                if (CurrentMode == mode_set_time)
                {
                    set_time();
                }
                else if (CurrentMode == mode_set_date)
                {
                    set_date();
                }
                else if (CurrentMode == mode_set_alarm1)
                {
                    set_alarm1();
                }
                else if (CurrentMode == mode_set_alarm2)
                {
                    set_alarm2();
                }
            }
            do        //    wait for key released
            {
                delay_ms(30);
                KeyNew = get_key();
                restart_wdt();
                BackLightTimer = 0;        //    key pressed yet
            }while ((KeyNew& 0x0f) != 0x00);
            KeyOld = KeyNew = 0x00;
        }
        if ((CurrentMode == mode_set_time) | (CurrentMode == mode_time))
        {    //    refresh time display,bacause int_timer1 dosn't do this
            lcd_addr = lcd_read_addr() & 0x7f;    //    save cursor location
               lcd_write_inst(time_start_addr);    //    set LCD line1
            lcd_write_data(CurrentTime.hourh + '0');
            lcd_write_data(CurrentTime.hourl + '0');
            lcd_write_data(':');
            lcd_write_data(CurrentTime.minuteh + '0');
            lcd_write_data(CurrentTime.minutel + '0');
            lcd_write_data(':');
            lcd_write_data(CurrentTime.secondh + '0');
            lcd_write_data(CurrentTime.secondl + '0');
            lcd_write_inst(lcd_addr | 0x80);            //    resume cursor location
        }
        if (CurrentMode == mode_time)
        {    //    refresh date display
            lcd_addr = lcd_read_addr() & 0x7f;    //    save cursor location
            lcd_write_inst(0xc0 + 3);            //    set LCD line2
            lcd_write_data(CurrentDate.year1 + '0');
            lcd_write_data(CurrentDate.year2 + '0');
            lcd_write_data(CurrentDate.year3 + '0');
            lcd_write_data(CurrentDate.year4 + '0');
            lcd_write_data('/');
            lcd_write_data(CurrentDate.monthh + '0');
            lcd_write_data(CurrentDate.monthl + '0');
            lcd_write_data('/');
            lcd_write_data(CurrentDate.dayh + '0');
            lcd_write_data(CurrentDate.dayl + '0');
            lcd_write_inst(lcd_addr | 0x80);            //    resume cursor location
        }
        if (Alarm1Enable)
        {
            if  ((AlarmTime1.hourh == CurrentTime.hourh) & (AlarmTime1.hourl == CurrentTime.hourl)
                 & (AlarmTime1.minuteh == CurrentTime.minuteh) & (AlarmTime1.minutel == CurrentTime.minutel)
                 & (AlarmTime1.secondh == CurrentTime.secondh) & (AlarmTime1.secondl == CurrentTime.secondl))
             {
                 Alarm1Alarm = true;
                 CCP1CON = PWM_on;
                 BackLightEn = 0;
             }
            if (Alarm1Cnt > 120)    //    two minutes
            {
                Alarm1Alarm = false;
                Alarm1Cnt = 0;
                BackLightEn = 1;
                BackLightTimer = 0;
            }
        }
        else
        {
            Alarm1Alarm = false;
            Alarm1Cnt = 0;
        }
        if (Alarm2Enable)
        {
            if  ((AlarmTime2.hourh == CurrentTime.hourh) & (AlarmTime2.hourl == CurrentTime.hourl)
                 & (AlarmTime2.minuteh == CurrentTime.minuteh) & (AlarmTime2.minutel == CurrentTime.minutel)
                 & (AlarmTime2.secondh == CurrentTime.secondh) & (AlarmTime2.secondl == CurrentTime.secondl))
             {
                 Alarm2Alarm = true;
                 CCP1CON = PWM_on;
                 BackLightEn = 0;
             }
             if (Alarm2Cnt > 120)    //    two minutes
             {
                 Alarm2Alarm = false;
                 Alarm2Cnt = 0;
                 BackLightEn = 1;
                 BackLightTimer = 0;
             }
         }
        else
        {
            Alarm2Alarm = false;
            Alarm2Cnt = 0;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -