📄 clock_11.c
字号:
{
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 + -