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

📄 clock_alarm.c

📁 this source code for displayed clock & alarm in 2*16 LCD and writed in codevisionAVR for useable AVR
💻 C
字号:
// in the name of GOD
// project name: Clock & Alarm 
// LCD disply & Relay output
// Design by: Atropat (Nader.Munesi@Gmail.com)

#include <mega8.h>
#include <stdio.h>
#include <delay.h>

char sec,min,hour;
char display[20]; 
char ass,amm,ahh;
char rss1,rss2,rss3;
char da1,da2,da3;
char da12,da22,da32;
char da13,da23,da33;
 
void setclock();
void setalarm();

#define relay_output    PORTB.0
#define clock_set       PINC.0
#define alarm_set       PINC.1
#define up              PINC.2
#define down            PINC.3

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>

// Timer 2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
        sec=sec+1;
        if(sec==60)
        {
        sec=0;
        min=min+1;
        }
        if(min==60)
        {
        min=0;
        hour=hour+1;
        }
        if(hour==24)
        {
        hour=0;
        }
}

void main(void)
{
 
PORTB=0x00;
DDRB=0x01;
 
PORTC=0x00;
DDRC=0x00;
 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 2 initialization
// Clock source: TOSC1 pin
// Clock value: PCK2/128
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x08;
TCCR2=0x05;
TCNT2=0x00;
OCR2=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
{
        lcd_gotoxy(0,0);
        sprintf(display,"Clock %02u:%02u:%02u",hour,min,sec);
        lcd_puts(display);
        if(clock_set==1)
        {
        delay_ms(20);
        if(clock_set==1)     setclock();
        }
        lcd_gotoxy(0,1);
        sprintf(display,"Alarm %02u:%02u",ahh,amm);
        lcd_puts(display);
        if(alarm_set==1)
        {
        delay_ms(20);
        if(alarm_set==1)     setalarm();
        }
        if(hour==ahh)
        {
                if(min==amm)
                {
                        if(sec==ass)
                        {
                        relay_output=1;
                        lcd_gotoxy(12,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        rss1=sec+10;
                        da1=sec+1;
                        da2=sec+2;
                        da3=sec+3;
                        }
                        if(sec==da1)
                        {
                        lcd_gotoxy(13,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==da2)
                        {
                        lcd_gotoxy(14,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==da3)
                        {
                        lcd_gotoxy(15,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==rss1)
                        {
                        relay_output=0;
                        rss2=sec+30;
                        lcd_gotoxy(12,1);
                        sprintf(display,"    ");
                        lcd_puts(display);
                        }
                        if(sec==rss2) //*************
                        {       
                        relay_output=1;
                        lcd_gotoxy(12,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        rss3=sec;
                        rss3=rss3+10;
                        da12=sec+1;
                        da22=sec+2;
                        da32=sec+3;
                        }
                        if(sec==da12)
                        {
                        lcd_gotoxy(13,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==da22)
                        {
                        lcd_gotoxy(14,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==da32)
                        {
                        lcd_gotoxy(15,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        }
                        if(sec==rss3)
                        {
                        relay_output=0;
                        lcd_gotoxy(12,1);
                        sprintf(display,"    ");
                        lcd_puts(display);
                        }
                }// for min check
                if(min==amm+1)
                {
                        if(sec==20)
                        {
                        relay_output=1;
                        lcd_gotoxy(12,1);
                        sprintf(display,")");
                        lcd_puts(display);
                        da13=sec+1;
                        da23=sec+2;
                        da33=sec+3;
                        }
                        if(sec>20)
                        {
                                if(sec==da13)
                                {
                                lcd_gotoxy(13,1);
                                sprintf(display,")");
                                lcd_puts(display);
                                }
                                if(sec==da23)
                                {
                                lcd_gotoxy(14,1);
                                sprintf(display,")");
                                lcd_puts(display);
                                }
                                if(sec==da33)
                                {
                                lcd_gotoxy(15,1);
                                sprintf(display,")");
                                lcd_puts(display);
                                }
                        }
                        if(sec==30)
                        {
                        relay_output=0;
                        lcd_gotoxy(12,1);
                        sprintf(display,"    ");
                        lcd_puts(display);
                        }
                }
        }       // for hour check
};              // for while(1)
}               // for main
                // end of main program

// ******************** clock setting ***************
void setclock()
{
delay_ms(200);
lcd_gotoxy(0,0);
sprintf(display,"Clock --:mm:ss");
lcd_puts(display);
        while(PINC.0==0)
        {
                if(PINC.2==1)
                {
                delay_ms(20);
                        if(PINC.2==1)
                        {
                        hour=hour+1;
                        if(hour==24)    hour=0;
                        lcd_gotoxy(0,0);
                        sprintf(display,"Clock %02u:mm:ss",hour,min,sec);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
                if(PINC.3==1)
                {
                delay_ms(20);
                        if(PINC.3==1)
                        {
                        hour=hour-1;
                        if(hour==255)   hour=23;
                        lcd_gotoxy(0,0);
                        sprintf(display,"Clock %02u:mm:ss",hour,min,sec);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
        }
delay_ms(500);

lcd_gotoxy(0,0);
sprintf(display,"Clock %02u:--:ss",hour);
lcd_puts(display);
        while(PINC.0==0)
        {
                if(PINC.2==1)
                {
                delay_ms(20);
                        if(PINC.2==1)
                        {
                        min=min+1;
                        if(min==60)     min=0;
                        lcd_gotoxy(0,0);
                        sprintf(display,"Clock %02u:%02u:ss",hour,min,sec);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
                if(PINC.3==1)
                {
                delay_ms(20);
                        if(PINC.3==1)
                        {
                        min=min-1;
                        if(min==255)    min=59;
                        lcd_gotoxy(0,0);
                        sprintf(display,"Clock %02u:%02u:ss",hour,min,sec);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
        }
delay_ms(500);
sec=0;
}
// ****************** Alarm setting *************
void setalarm()
{
delay_ms(200);
lcd_gotoxy(0,1);
sprintf(display,"Alarm --:mm");
lcd_puts(display);
        while(alarm_set==0)// set hour of Alarm
        {
                if(up==1)
                {
                delay_ms(20);
                        if(up==1)
                        {
                        ahh=ahh+1;
                        if(ahh==24)    ahh=0;
                        lcd_gotoxy(0,1);
                        sprintf(display,"Alarm %02u:mm",ahh,amm);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
                if(down==1)
                {
                delay_ms(20);
                        if(down==1)
                        {
                        ahh=ahh-1;
                        if(ahh==255)   ahh=23;
                        lcd_gotoxy(0,1);
                        sprintf(display,"Alarm %02u:mm",ahh,amm);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
        }
delay_ms(500);

lcd_gotoxy(0,1);
sprintf(display,"Alarm %02u:--",ahh);
lcd_puts(display);
        while(alarm_set==0)// set min of Alarm
        {
                if(up==1)
                {
                delay_ms(20);
                        if(up==1)
                        {
                        amm=amm+1;
                        if(amm==60)     amm=0;
                        lcd_gotoxy(0,1);
                        sprintf(display,"Alarm %02u:%02u",ahh,amm);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
                if(down==1)
                {
                delay_ms(20);
                        if(down==1)
                        {
                        amm=amm-1;
                        if(amm==255)    amm=59;
                        lcd_gotoxy(0,1);
                        sprintf(display,"Alarm %02u:%02u",ahh,amm);
                        lcd_puts(display);
                        delay_ms(200);
                        }
                }
        }
delay_ms(500);
ass=0;
}
// END

⌨️ 快捷键说明

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