簡易數(shù)字時鐘 1、功能描述 用四個7段數(shù)碼管來顯示時間,并可通過按鍵來調(diào)整時間。 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; //關(guān)鎖存器 //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),設(shè)置INT0和INT1負邊沿觸發(fā)。 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; }
|