18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 18luck平台 >> 單片機 >> 正文

STC12C2052AD單片機控製的數碼管時鍾程序及電路圖

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2018-03-07


     STC12C2052AD單片機控製的數碼管時鍾,數碼管是共陽4位時鍾數碼管,由於(yu) 使用單片機真驅,電路比較簡單,且使用的材料和工具也很簡單,用數碼管顯示,單片機控製,兩(liang) 個(ge) 按鍵調時,蜂鳴器整點報時。所需要的元件如下:

       材料有以下這些:
        STC12C2052AD單片機一片
        黃色共陽4位時鍾數碼管一塊
        6mm×6mm按鍵兩(liang) 個(ge)
        杜邦線插針2p兩(liang) 個(ge)
        無源蜂鳴器一個(ge)
        20腳+14腳芯片座各一個(ge)
        洞洞板一塊(截取一小部分)
        100歐電阻4個(ge)

單片機時鍾實物圖 

STC12C2052AD單片機控製的數碼管時鍾程序及電路圖 

單片機時鍾零件實物圖 

程序如下:

/************************************************************************************/

#include <STC12C2052AD.h>  //聲明頭文件

sbit key1=P3^4;  //按鍵接口定義(yi)

sbit key2=P3^5;  //按鍵接口定義(yi)

sbit speaker=P3^7;  //蜂鳴器接口定義(yi)

/************************************************************************************/

unsigned char code LED[10]={0x20,0xA7,0x90,0x82,0x07,0x42,0x40,0xA6,0x00,0x02};//數碼管段位碼定義(yi)

unsigned int time; //全局秒基準定義(yi)

/*-------------------------------------延時函數-------------------------------------*/

void delayms (unsigned int a){

unsigned int i;

while( --a != 0){

for(i = 0; i < 600; i++);

}

}

/*----------------------------------蜂鳴器驅動函數----------------------------------*/

void beep (void)

{  

unsigned char i=30;

while(i--)

{

speaker=~speaker;

delayms(3);

    }

}

/*----------------------------------數碼管驅動函數----------------------------------*/

void display (unsigned char hour,min)

{

unsigned char H1,H2,M1,M2;

P3=0xf8; //數碼管位選

P1 = LED[H1];     //數碼管段選

delayms (2); //掃描延時

P3=0xf4; //數碼管位選

P1 = LED[H2];     //數碼管段選

delayms (2); //掃描延時

P3=0xf2; //數碼管位選

P1 = LED[M1];     //數碼管段選

delayms (2); //掃描延時

P3=0xf1; //數碼管位選

P1 = LED[M2];     //數碼管段選

delayms (2); //掃描延時

/*--------------------------------------分定義(yi) --------------------------------------*/

M1=min/10;//取分十位

min=min%10;//取餘(yu)  

M2=min;//取分個(ge) 位

/*--------------------------------------時定義(yi) --------------------------------------*/

H1=hour/10;//取時十位

hour=hour%10;//取餘(yu)  

H2=hour;//取時個(ge) 位

}

/*-----------------------------------按鍵去抖函數-----------------------------------*/

void qudou (unsigned char hour,min)

{

unsigned char i;

for(i=0;i<25;i++){//循環顯示,等於(yu) 鍵盤去抖的功能

display (hour,min);

}

}

/*--------------------------------------主函數--------------------------------------*/

void main(void)

{

////定時器初始設置

TMOD=0x01;//定時器工作方式1

TH0=0x3C;//定時器初始產(chan) 生50ms時基信號

TL0=0xB0;//定時器初始產(chan) 生50ms時基信號

ET0=1;//開定時器中斷

EA=1;//開總中斷

TR0=1;//啟動定時器

/*************************************************************************************/

while(1)

{

unsigned char hour,min;//定義(yi) 時分


display (hour,min);//調用顯示函數


if (time>59)//60秒向分進1

{

time=0;

min++;

   }

if (min>59)//60分向時進1

{

min=0;

hour++;

beep ();

    }

if (hour>23)//24時時分秒清零

{

hour=0;

min=0;

time=0;

}

/*-----------------------------------按鍵判斷程序-----------------------------------*/

if(key1==0)

qudou (hour,min);

if (key1==0) {hour++;}


if(key2==0)

qudou (hour,min);

if (key2==0) {min++;}

}

}

/*-----------------------------------中斷服務程序-----------------------------------*/

void Timer0_Routine(void) interrupt 1

{

unsigned char a;

TH0=0x3C;//定時器初始產(chan) 生50ms時基信號

TL0=0xB0;//定時器初始產(chan) 生50ms時基信號

    a++;//定時器循環計數20次為(wei) 一秒

if (a==20){//定時器循環計數20次為(wei) 一秒

a=0;//次數清零,從(cong) 新循環計數

time++;//秒加一

}

}

 

/************************************************************************************/

Tags:單片機時鍾,數碼管時鍾程序,單片機  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢