• 方案介紹
    • 1.? 簡介
    • 2.? 主要功能
    • 3.? 源程序(Keil5)
    • 4.? 仿真proteus8.6
    • 5.? 設(shè)計(jì)報(bào)告
    • 6.? 資料清單
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

基于51單片機(jī)的數(shù)字電子鐘設(shè)計(jì)(二)

04/14 08:38
552
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf

共1個(gè)文件

資料清單:C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻

仿真版本:Proteus8.6及以上版本

程序編譯:Keil5 C51

編程語言:C語言

設(shè)計(jì)編號:【I05】

1.? 簡介

? 本文提出了一種基于51單片機(jī)的電子時(shí)鐘系統(tǒng)。該系統(tǒng)由單片機(jī)系統(tǒng)、數(shù)碼管顯示系統(tǒng)、鍵盤、蜂鳴器等組成,通過單片機(jī)自身的定時(shí)計(jì)數(shù)器溢出標(biāo)志產(chǎn)生最小計(jì)時(shí)單元,經(jīng)過變量的累加和判斷后,將數(shù)據(jù)送入數(shù)碼顯示屏顯示。通過按鍵來控制單片機(jī)實(shí)現(xiàn)數(shù)字時(shí)鐘的時(shí)分秒、鬧鐘等功能,并通過P0口的輸出在數(shù)碼管上顯示。

2.? 主要功能

a.通過數(shù)碼管顯示時(shí)分秒、鬧鐘,初始狀態(tài):11:59:50。

b.通過獨(dú)立按鍵設(shè)置時(shí)和分、鬧鐘。

c.通過蜂鳴器顯示鬧鐘狀態(tài)。

3.? 源程序(Keil5)

本設(shè)計(jì)采用keil5 C51軟件(內(nèi)附安裝包)實(shí)現(xiàn)程序設(shè)計(jì)。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。

#include<reg52.h> 
unsigned char led[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};  //用一維數(shù)組定義0-9、橫杠、全滅 
unsigned char a[8];     
unsigned char second=50,minute=59,hour=11; 
unsigned char minute1=0,hour1=12; 
unsigned char b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //掃描 
unsigned char k=0; unsigned int temp;   // 記錄毫秒為秒的變量 
unsigned char M,S_flag; //M是模式,更新時(shí)間的種模式加上正常模式 S_flag閃爍標(biāo)志 
sbit K1=P1^0; 
sbit K2=P1^1; 
sbit K3=P1^2; 
sbit BEEP=P3^3; 
void delay(unsigned n)       //0.2毫秒 
{  
int x,y;   
for(x=0;x<n;x++)   
for(y=0;y<24;y++);
 }  
void time1()
interrupt 3   //定時(shí)器中斷函數(shù)
{    
TH1=0xfc;     //定時(shí)ms    
TL1=0x18;    
temp++;    
if(temp==1000)   //配合定時(shí)器定時(shí)s   
{  
temp=0;  
second++;    
}  
if(second==59)  
{  
second=0;   
if(minute<59)  
minute++;  
else       
{ 
minute=0;   
hour++;   
hour%=24;      
} 
}    
if(hour1==hour&&minute1==minute&&second<5)    //鬧鐘時(shí)間到    
{ 
if(M==0)    
BEEP=!BEEP;    
}      
if(temp%250==0)            //每ms        
S_flag=!S_flag;       //閃爍標(biāo)志位取反     
if(k==8)  
k=0;   
P0=a[k];     
P2=b[k++];       
delay(1);     
P2=0xff;   
}        
void display() 
{  
switch(M)  
{  
case 0:   
{    
a[0]=led[hour/10];    
a[1]=led[hour%10];    
a[2]=led[10];    
a[3]=led[minute/10];    
a[4]=led[minute%10];    
a[5]=led[10];    
a[6]=led[second/10];    
a[7]=led[second%10];   
}
break;  
case 1:   
{    
if(S_flag==1)    
{     
a[0]=led[hour/10];     
a[1]=led[hour%10];    
}    
else    
{ 
a[0]=led[11];   
a[1]=led[11];    
}    
a[2]=led[10];    
a[3]=led[minute/10];    
a[4]=led[minute%10];    
a[5]=led[10];    
a[6]=led[second/10];   
a[7]=led[second%10];   
}
break;  
case 2:
{    
a[0]=led[hour/10];    
a[1]=led[hour%10];    
a[2]=led[10];   
if(S_flag==1)    
{     
a[3]=led[minute/10];     
a[4]=led[minute%10];    
}    
else    
{     
a[3]=led[11];     
a[4]=led[11];    
}    
a[5]=led[10];    
a[6]=led[second/10];    
a[7]=led[second%10];   
}
break;  
case 3:   
{    
if(S_flag==1)    
{     
a[0]=led[hour1/10];     
a[1]=led[hour1%10];    
}    
else    
{     
a[0]=led[11];     
a[1]=led[11];    
}    
a[2]=led[10];    
a[3]=led[minute1/10];   
a[4]=led[minute1%10]; 
a[5]=led[11];    
a[6]=led[11];    
a[7]=led[11];   
}break;  
case 4:   
{    
a[0]=led[hour1/10];    
a[1]=led[hour1%10];   
a[2]=led[10];    
if(S_flag==1)    
{     
a[3]=led[minute1/10];     
a[4]=led[minute1%10];    
}    
else    
{     
a[3]=led[11];     
a[4]=led[11];    
}    
a[5]=led[11];   
 a[6]=led[11];    
a[7]=led[11];   
}  
}
}    

4.? 仿真proteus8.6

? 本設(shè)計(jì)采用proteus8.6軟件(內(nèi)附安裝包)實(shí)現(xiàn)仿真設(shè)計(jì),如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導(dǎo)出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。

初始界面:

鬧鐘設(shè)置:

5.? 設(shè)計(jì)報(bào)告

設(shè)計(jì)報(bào)告主要包括硬件電路、軟件設(shè)計(jì)、仿真調(diào)試等等,僅供參考。

6.? 資料清單

設(shè)計(jì)資料主要包括C程序+仿真+設(shè)計(jì)報(bào)告+使用說明+元件清單+操作視頻等。

百度網(wǎng)盤下載鏈接:【I05】百度網(wǎng)盤下載鏈接

更多單片機(jī)仿真設(shè)計(jì)合集:單片機(jī)仿真設(shè)計(jì)合集

  • 單片機(jī)仿真設(shè)計(jì)合集資料獲取.pdf
    下載

相關(guān)推薦