找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1367|回复: 0
打印 上一主题 下一主题
收起左侧

蓝桥杯单片机第八届初赛-基于单片机的电子时钟

[复制链接]
跳转到指定楼层
楼主
ID:514797 发表于 2020-1-10 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<STC15F2K60S2.H>
#include "DEPUTY.H"

#define uchar unsigned char
#define uint unsigned int

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6};
uchar yi,er,san,si,wu,liu,qi,ba;
extern unsigned char shijian[];
uchar Alarm_clock[3]={0,0,0};
uchar Time_set=5,Alarm_set=0;
uchar s4=0;
bit wendu=0;
uchar LED_shan=0;
uchar tt=0;
bit fla=0;
uint miao=0;

void allinit(void);
void delayms(uint ms);
void keyscan(void);
void display1(uchar yi,uchar er);
void display2(uchar san,uchar si);
void display3(uchar wu,uchar liu);
void display4(uchar qi,uchar ba);
void Timer0Init(void);               

void main(void)
{
        allinit();
        Timer0Init();
        DS_init();
        yi=0;er=8;san=10;si=3;wu=0;liu=10;qi=0;ba=0;
        while(1)
        {
                DS_get();
                if(wendu==0)
                {
                        if(Time_set==5)
                        {
                                yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;
                        }
                        else if(Time_set==1)
                        {
                                if(shijian[0]%2==1){yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;}
                                else {yi=11;er=11;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;}
                        }
                        else if(Time_set==2)
                        {
                                if(shijian[0]%2==1){yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;}
                                else {yi=shijian[2]/10;er=shijian[2]%10;san=10;si=11;wu=11;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;}
                        }
                        else if(Time_set==3)
                        {
                                if(shijian[0]%2==1){yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=shijian[0]/10;ba=shijian[0]%10;}
                                else {yi=shijian[2]/10;er=shijian[2]%10;san=10;si=shijian[1]/10;wu=shijian[1]%10;liu=10;qi=11;ba=11;}
                        }       
                       
                        if(Alarm_set==5)
                        {
                                yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;
                        }
                        else if(Alarm_set==1)
                        {
                                if(shijian[0]%2==1){yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;}
                                else {yi=11;er=11;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;}
                        }
                        else if(Alarm_set==2)
                        {
                                if(shijian[0]%2==1){yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;}
                                else {yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=11;wu=11;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;}
                        }
                        else if(Alarm_set==3)
                        {
                                if(shijian[0]%2==1){yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=Alarm_clock[0]/10;ba=Alarm_clock[0]%10;}
                                else {yi=Alarm_clock[2]/10;er=Alarm_clock[2]%10;san=10;si=Alarm_clock[1]/10;wu=Alarm_clock[1]%10;liu=10;qi=11;ba=11;}
                        }
                }
                else if(wendu==1)
                {
                        yi=11;er=11;san=11;si=11;wu=11;liu=Tempget()/10;qi=Tempget()%10;ba=12;
                }

               
                if((shijian[0]==Alarm_clock[0])&&(shijian[1]==Alarm_clock[1])&&(shijian[2]==Alarm_clock[2]))
                {
                        LED_shan=1;tt=0;miao=0;
                }
               
                keyscan();
               
                display1(yi,er);
                display2(san,si);
                display3(wu,liu);
                display4(qi,ba);
        }
}

void keyscan(void)
{
        if(P30==0)
        {
                delayms(5);
                if(P30==0)
                {
                        if(LED_shan==0)
                        {
                                if(Time_set==0){Time_set=5;Alarm_set=0;}
                                else if(Time_set==5)Time_set=1;
                                else if(Time_set==1)Time_set=2;
                                else if(Time_set==2)Time_set=3;
                                else if(Time_set==3)Time_set=5;
                        }
                        else if(LED_shan==1)
                        {
                                LED_shan=0;P2=0X80;P0=0XFF;
                        }
                }
                while(!P30);
        }
        else if(P31==0)
        {
                delayms(5);
                if(P31==0)
                {
                        if(LED_shan==0)
                        {
                                if(Alarm_set==0){Alarm_set=5;Time_set=0;}
                                else if(Alarm_set==5)Alarm_set=1;
                                else if(Alarm_set==1)Alarm_set=2;
                                else if(Alarm_set==2)Alarm_set=3;
                                else if(Alarm_set==3)Alarm_set=5;
                        }
                        else if(LED_shan==1)
                        {
                                LED_shan=0;P2=0X80;P0=0XFF;
                        }
                }
                while(!P31);
        }
        else if(P32==0)
        {
                delayms(5);
                if(P32==0)
                {       
                        if(LED_shan==0)
                        {
                                if(Time_set==1)
                                {
                                        if(shijian[2]==23)shijian[2]=0;
                                  else shijian[2]++;
                                        DS_init();
                                }
                                else if(Time_set==2)
                                {
                                  if(shijian[1]==59)shijian[1]=0;
                                        else shijian[1]++;DS_init();
                                }
                                else if(Time_set==3)
                                {
                                        if(shijian[0]==59)shijian[0]=0;
                                        else shijian[0]++;DS_init();
                                }
                                else if(Alarm_set==1)
                                {
                                        if(Alarm_clock[2]==23)Alarm_clock[2]=0;
                                        else Alarm_clock[2]++;
                                }
                                else if(Alarm_set==2)
                                {
                                        if(Alarm_clock[1]==59)Alarm_clock[1]=0;
                                        else Alarm_clock[1]++;
                                }
                                else if(Alarm_set==3)
                                {
                                        if(Alarm_clock[0]==59)Alarm_clock[0]=0;
                                        else Alarm_clock[0]++;
                                }
                        }
                        else if(LED_shan==1)
                        {
                                LED_shan=0;P2=0X80;P0=0XFF;
                        }
                }
                while(!P32);
        }
        else if(P33==0)
        {
                delayms(5);
                if(P33==0)
                {
                        s4=1;
                        if(Time_set==5)wendu=1;
                }
        }
       
        if((s4==1)&&(P33==1))
        {       
                s4=0;
                if(LED_shan==0)
                {
                        wendu=0;
                        if(Time_set==1)
                        {
                                if(shijian[2]==0)shijian[2]=23;
                                else shijian[2]--;
                                DS_init();
                        }
                        else if(Time_set==2)
                        {
                                if(shijian[1]==0)shijian[1]=59;
                                else shijian[1]--;
                                DS_init();
                        }
                        else if(Time_set==3)
                        {
                                if(shijian[0]==0)shijian[0]=59;
                                else shijian[0]--;
                                DS_init();
                        }
                        else if(Alarm_set==1)
                        {
                                if(Alarm_clock[2]==0)Alarm_clock[2]=23;
                                else Alarm_clock[2]--;
                        }
                        else if(Alarm_set==2)
                        {
                                if(Alarm_clock[1]==0)Alarm_clock[1]=59;
                                else Alarm_clock[1]--;
                        }
                        else if(Alarm_set==3)
                        {
                                if(Alarm_clock[0]==0)Alarm_clock[0]=59;
                                else Alarm_clock[0]--;
                        }
                }
                else if(LED_shan==1)
                {
                        LED_shan=0;P2=0X80;P0=0XFF;
                }
        }
}


void Timer0Init(void)                //5毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0x28;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
       
        ET0=1;
        EA=1;
}


void time0() interrupt 1
{
        tt++;miao++;
        if((tt==40)&&(LED_shan==1))
        {
                tt=0;
                if(fla==0){fla=1;P2=0X80;P0=0XFE;}
                else if(fla==1){fla=0;P2=0X80;P0=0XFF;}
        }
       
        if(miao==1000)
        {
                miao=0;LED_shan=0;P2=0X80;P0=0XFF;
        }
}


void allinit(void)
{
        P2=0XA0;
        P0=0x00;//关闭蜂鸣器继电器
       
        P2=0X80;
        P0=0XFF;//关闭LED灯
       
        P2=0XC0;
        P0=0XFF;//选择所有数码管
        P2=0XFF;
        P0=0XFF;//关闭多有数码管       
}

void display1(uchar yi,uchar er)
{
        P2=0XC0;
        P0=0X01;//选择所有数码管
        P2=0XFF;
        P0=tab[yi];//关闭多有数码管       
        delayms(1);
       
        P2=0XC0;
        P0=0X02;//选择所有数码管
        P2=0XFF;
        P0=tab[er];//关闭多有数码管       
        delayms(1);
}

void display2(uchar san,uchar si)
{
        P2=0XC0;
        P0=0X04;//选择所有数码管
        P2=0XFF;
        P0=tab[san];//关闭多有数码管       
        delayms(1);
       
        P2=0XC0;
        P0=0X08;//选择所有数码管
        P2=0XFF;
        P0=tab[si];//关闭多有数码管       
        delayms(1);
}

void display3(uchar wu,uchar liu)
{
        P2=0XC0;
        P0=0X10;//选择所有数码管
        P2=0XFF;
        P0=tab[wu];//关闭多有数码管       
        delayms(1);
       
        P2=0XC0;
        P0=0X20;//选择所有数码管
        P2=0XFF;
        P0=tab[liu];//关闭多有数码管       
        delayms(1);
}

void display4(uchar qi,uchar ba)
{
        P2=0XC0;
        P0=0X40;//选择所有数码管
        P2=0XFF;
        P0=tab[qi];//关闭多有数码管       
        delayms(1);
       
        P2=0XC0;
        P0=0X80;//选择所有数码管
        P2=0XFF;
        P0=tab[ba];//关闭多有数码管       
        delayms(1);
       
        P2=0XC0;
        P0=0XFF;//选择所有数码管
        P2=0XFF;
        P0=0XFF;//关闭所有数码管       
}

void delayms(uint ms)
{
        uint i,j;
        for(i=ms;i>0;i--)
                for(j=845;j>0;j--);
}

第08讲:第八届初赛-基于单片机的电子时钟.rar

184.12 KB, 下载次数: 14, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表