电子闹钟

来源:互联网 发布:js 通过元素值 查找 编辑:程序博客网 时间:2024/04/30 10:32

         电子闹钟的主要原理就是,首先让单片机上八个数码管显示出相应的时间,能对时间的时分秒进行调整,到了自己设定的时间后,让蜂鸣器发出声响。由于是让数码管同时亮起,需要用到动态扫描的知识,为了避免数码管中出现较暗的情况,所以采用了定时器计数的方式让数码管正常显示,同时也用p1口接独立按键来设置闹钟的开始暂停以及修改时间,下面是实现程序代码(自己的单片机为38译码器):

#include <reg51.h>#define dataport P2#define sbitchoice P0  //位选sbit open = P1^0;sbit close = P1^1;sbit stop = P1^2;sbit Addhour = P1^3;sbit Addmin = P1^4;sbit Addsec = P1^5;sbit beel = P0^7;unsigned char code LED1[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}  ;  //0-7 位选unsigned char code LED2[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}   ; //0-9unsigned char sec ;unsigned char min ;unsigned char hour = 0 ;unsigned char temp[8] ;void Delay10ms()//@12.000MHz{unsigned char i, j;    i = 117;j = 184;do{while (--j);} while (--i);}void delay(unsigned char i) ;void timer_0() ;void main(){     unsigned char i ;     unsigned char j ; unsigned char count = 500 ;     timer_0() ; while(1) { if(!stop){Delay10ms();if(!stop){while(!stop);TR0 = 0;}}if(!close){Delay10ms();if(!close){while(!close);hour = 0;min = 0;sec = 0;TR0 = 0;}}if(!open){Delay10ms();if(!open){while(!open);TR0 = 1;}}if(!Addhour){Delay10ms();if(!Addhour){while(!Addhour);hour++;if(hour == 24){     hour = 0 ;}}}if(!Addmin){Delay10ms();if(!Addmin){while(!Addmin);min++;if(min == 60){     min = 0 ; hour++ ;}}}  if(!Addsec)  {Delay10ms();if(!Addsec){while(!Addsec);sec++;if(sec == 60){     sec = 0 ; min++ ;}}  }      temp[0] = hour/10 ;  temp[1] = hour%10 ;  temp[2] = 10 ;      temp[3] = min/10 ;  temp[4] = min%10 ;  temp[5] = 10 ;  temp[6] = sec/10 ;  temp[7] = sec%10 ;      for(i=0;i<8;i++)  {       sbitchoice = LED1[i] ;        j = temp[i] ;        dataport = LED2[j] ;        delay(1) ;             }  if(temp[0] == 0 &&temp[1] == 0&&temp[3] == 0&&temp[4] == 0&&temp[6] == 2&&temp[7] == 0)  {         while(count--)  //让蜂鸣器响 {          beel = ~beel;          delay(1) ;  temp[0] = hour/10 ;  temp[1] = hour%10 ;  temp[2] = 10 ;      temp[3] = min/10 ;  temp[4] = min%10 ;  temp[5] = 10 ;  temp[6] = sec/10 ;  temp[7] = sec%10 ;      for(i=0;i<8;i++)  {       sbitchoice = LED1[i] ;        j = temp[i] ;        dataport = LED2[j] ;        delay(1) ;             } }  }    }}void timer_0(){     TMOD =  0X01 ; TH0 = 0X3C ; TL0 = 0XB0 ; EA =1 ; ET0 = 1 ; TR0 = 1 ;}void time_0_ins(void) interrupt 1{     unsigned char i ; TH0 = 0X3C ; TL0 = 0XB0 ; i++; if(i == 20) {   sec++ ;   i = 0 ; } if(sec == 60) {      min++ ;      sec = 0 ; } if(min == 60) {      min = 0 ;  hour ++ ; } if(hour == 24 ) {      hour = 0 ; }}void delay(unsigned char i){unsigned char j,k ;for(j=0;j<150;j++){for(k=0;k<i;k++){; }}}


0 0
原创粉丝点击