简易数字时钟 1、功能描述 用四个7段数码管来显示时间,并可通过按键来调整时间。 2、元器件清单 3、部分器件功能 74HC574锁存器 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 程序流程图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image005.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image009.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image007.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.giffile:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif
| | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif |
5、电路原理图及仿真效果图 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg 附:程序 #include<reg52.h> sbit hou_shi=P3^6; sbit hou_ge=P3^7; sbit min_shi=P3^5; sbit min_ge=P3^4; sbit sec_dian=P3^0; int num=0,hou=23,min=59,sec=0; /***************时钟子程序*******************/ void clock() { if(num==20) { num=0; sec++; } if(sec==60) { sec=0; min++; } if(min==60) { min=0; hou++; } if(hou==24) { hou=0; } } /****************延时子程序******************/ void delay(void) { unsigned char a,b; for(a=40;a>0;a--) for(b=100;b>0;b--); } /****************分钟显示子程序******************/ void display_min(num_min) { inta,b; a=num_min/10; b=num_min%10; min_shi=1; //开锁存器 switch(a) { case0:P2=0x3F;delay();break; case1:P2=0x06;delay();break; case2:P2=0x5B;delay();break; case3:P2=0x4F;delay();break; case4:P2=0x66;delay();break; case5:P2=0x6D;delay();break; case6:P2=0x7D;delay();break; case7:P2=0x07;delay();break; case8:P2=0x7F;delay();break; case9:P2=0x6F;delay();break; default:break; } min_shi=0; //关锁存器 //delay(); //延时 min_ge=1; switch(b) { case0:P2=0x3F;delay();break; case1:P2=0x06;delay();break; case2:P2=0x5B;delay();break; case3:P2=0x4F;delay();break; case4:P2=0x66;delay();break; case5:P2=0x6D;delay();break; case6:P2=0x7D;delay();break; case7:P2=0x07;delay();break; case8:P2=0x7F;delay();break; case9:P2=0x6F;delay();break; default:break; } min_ge=0; } /***************小时显示程序*******************/ void display_hou(num_hou) { inta,b; a=num_hou/10; b=num_hou%10; hou_shi=1; //delay(); switch(a) { case0:P1=0x3F;delay();break; case1:P1=0x06;delay();break; case2:P1=0x5B;delay();break; case3:P1=0x4F;delay();break; case4:P1=0x66;delay();break; case5:P1=0x6D;delay();break; case6:P1=0x7D;delay();break; case7:P1=0x07;delay();break; case8:P1=0x7F;delay();break; case9:P1=0x6F;delay();break; default:break; } hou_shi=0; //delay(); hou_ge=1; switch(b) { case0:P1=0x3F;delay();break; case1:P1=0x06;delay();break; case2:P1=0x5B;delay();break; case3:P1=0x4F;delay();break; case4:P1=0x66;delay();break; case5:P1=0x6D;delay();break; case6:P1=0x7D;delay();break; case7:P1=0x07;delay();break; case8:P1=0x7F;delay();break; case9:P1=0x6F;delay();break; default:break; } hou_ge=0; } /***************闪烁灯*******************/ void display_sec(num_sec) { if(num_sec%2==0) sec_dian=0; if(num_sec%2==1) sec_dian=1; } /****************主程序******************/ void main() { IE=0x8d; //开总中断(EA=1),开定时器1(ET1=1), //开外部中断1(EX1=1),开外部中断0(EX0=1). TMOD=0x10; //选择定时器1的工作方式为方式1 TH1=(65536-40000)/256; //装初值 TL1=(65536-40000)%256; TCON=0x45; //启动定时器1(TR1=1),设置INT0和INT1负边沿触发。 while(1) { clock(); display_sec(sec); display_min(min); display_hou(hou); } } void time1() interrupt 3 //定义定时器1 { TH1=(65536-40000)/256; TL1=(65536-40000)%256; num++; } void interrupt1() interrupt 2 //定义外部中断1 { hou++; sec=0; } void interrupt0() interrupt 0 //定义外部中断0 { min++; sec=0; }
|