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

📄 电子钟.c

📁 用C语言编的电子钟程序
💻 C
字号:
#include                        /*包含器件配置文件*/


#define uchar unsigned char


#define uint unsigned int


char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,


                    0x92,0x82,0xF8,0x80,0x90,};/*0~9的数码管段码*/


uchar hour=0,min=0,sec=0;                /*时、分、秒单元清零*/


uchar deda=0;                                  /*5mS计数单元清零*/ 


uchar t_hour=0,t_min=0;                   /*闹时时、分单元清零*/


bit d_05s=0;                             /*0.5秒标志*/


bit o_f=0;                                         /*闹时启/停标志*/


uchar set=0;                                      /*模式设定标志*/


uchar m=0;


uchar flag=0;                                     /*RAM掉电标志*/


void delay(uint k);                              /*延时子函数*/


void conv();                                       /*走时单元转换*/


void p_out();                                      /*判别闹时到否子函数*/


void dirve();                                       /*走时时间输出驱动子函数*/


void t_dirve();                                    /*闹时时间输出驱动子函数*/


 


 


/*闹时启/停子函数*/


void time1_of()                                  


{uchar m;


       if(P3_7==0)delay(1);


       if(P3_7==0)o_f=1;


       for(m=0;m<30;m++)


              {


              t_dirve();


              P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);


              if(P3_1==0){if(o_f==1)P1_7=0;}else P1_7=1;


              delay(1);


              }


              


       if(P3_5==0)delay(1);


       if(P3_5==0)    o_f=0;


       for(m=0;m<30;m++)


              {


              t_dirve();


              P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);


              if(P3_1==0){if(o_f==1)P1_7=0;else P1_7=1;}


              delay(1);


              }


}


 


/*走时函数*/


void time()


{


conv();                                              /*走时单元转换*/


dirve();                                              /*走时时间输出驱动子函数*/


p_out();                                             /*判别闹时到否子函数*/


}


 


 


/*定时器T0  5mS初始化*/


void init_timer()


{


TMOD=0x01;


TH0=-(4800/256);


TL0=-(4800%256);


IE=0x82;


TR0=1;


}


 


/*扫描按键子函数*/


void scan_key()


{


delay(1);


if(P3_4==0)set++;


if(set>=4)set=0;


if(set==1)flag=0x55;


F0:if(P3_4==0)goto F0;                      /*按键未释放,在此等候*/


}


 


 


/*延时子函数*/


void delay(uint k)


{


uint i,j;


for(i=0;i

for(j=0;j<121;j++)


{;}}


}


 


/*5mS定时中断服务子函数*/


void zd(void) interrupt 1 


{


TH0=-(4800/256);


TL0=-(4800%256);


deda++;


}


 


/*调整走时时间*/


void time_adj()


{uchar m;


       if(P3_5==0)delay(1);


       if(P3_5==0)hour++;


       if(hour==24)hour=0;


       for(m=0;m<30;m++)


              {


              dirve();


              if(P3_2==0)P1_7=0;


              else P1_7=1;


              delay(1);


              }


              


       if(P3_7==0)delay(1);


       if(P3_7==0)min++;


       if(min==60)min=0;


       for(m=0;m<30;m++)


              {


              dirve();


                     if(P3_2==0)P1_7=0;


              else P1_7=1;


              delay(1);


              }


}


 


 


/*调整闹时时间*/


void time1_adj()


{uchar m;


       if(P3_5==0)delay(1);


       if(P3_5==0)t_hour++;


       if(t_hour==24)t_hour=0;


       for(m=0;m<30;m++)


              {


              t_dirve();


              }


       


       if(P3_7==0)delay(1);


       if(P3_7==0)t_min++;


       if(t_min==60)t_min=0;


       for(m=0;m<30;m++)


              {


              t_dirve();


              }


}     


 


/*时、分、秒单元及走时单元转换*/


void conv()


{


if(deda<=100)d_05s=0;


       else d_05s=1;


if(deda>=200){sec++;deda=0;}


if(sec==60){min++;sec=0;}


if(min==60){hour++;min=0;}


if(hour==24){hour=0;}


}


 


/*走时时间输出驱动子函数*/


void dirve()


{


P1=DATA_7SEG[hour/10];P3=0xf7;delay(1);


P1=DATA_7SEG[hour%10];P3=0xfb;delay(1);


if(d_05s==1){if(P3_2==0)P1_7=0;else P1_7=1;}


delay(1);


P1=DATA_7SEG[min/10];P3=0xfd;delay(1);


if(o_f==1){if(P3_1==0)P1_7=0;else P1_7=1;delay(1);}


P1=DATA_7SEG[min%10];P3=0xfe;delay(1);


}


 


/*闹时时间输出驱动子函数*/


void t_dirve()


{


P1=DATA_7SEG[t_hour/10];P3=0xf7;delay(1);


if(P3_3==0)P1_7=0;else P1_7=1;


delay(1);


P1=DATA_7SEG[t_hour%10];P3=0xfb;delay(1);


P1=DATA_7SEG[t_min/10];P3=0xfd;delay(1);


P1=DATA_7SEG[t_min%10];P3=0xfe;delay(1);


}


 


 


/*判别闹时到否子函数*/


void p_out()


{


if(o_f==1){


       if(t_hour==hour){if(t_min==min)


              if(P3_0==0){P1_7=0;delay(1);}


              else P1_7=1;


                                   }


              }


}


 


/*主函数*/


void main()


{


       init_timer();                       /*定时器T0初始化*/


       while(1)                                     /*无限循环*/


       {


       if(P3_4==0)scan_key();               /*有按键,调用按键扫描子函数*/


switch(set)                                        /*根据set键值散转*/


{


case 0:time();break;                                   /*走时时间程序*/


case 1:time1_adj();break;                     /*闹时时间调整*/


case 2:time_adj();break;                      /*走时时间调整*/


case 3:time1_of();break;                      /*启/停闹时*/


default:break;                                     /*其它退出*/


} 


       if(flag!=0x55)                             /*判断掉电标志*/


       {for(m=0;m<100;m++)               /*点亮四个8字400mS*/


              {


          

       }


       }


}


 


 

⌨️ 快捷键说明

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