日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

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

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


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

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

單片機時鐘實物圖 

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

單片機時鐘零件實物圖 

程序如下:

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

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

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

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

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

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

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

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

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

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); //掃描延時

/*--------------------------------------分定義--------------------------------------*/

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

min=min%10;//取余 

M2=min;//取分個位

/*--------------------------------------時定義--------------------------------------*/

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

hour=hour%10;//取余 

H2=hour;//取時個位

}

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

void qudou (unsigned char hour,min)

{

unsigned char i;

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

display (hour,min);

}

}

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

void main(void)

{

////定時器初始設置

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

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

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

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

EA=1;//開總中斷

TR0=1;//啟動定時器

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

while(1)

{

unsigned char hour,min;//定義時分


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;//定時器初始產生50ms時基信號

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

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

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

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

time++;//秒加一

}

}

 

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

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

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