· 1.本設計采用STC89C51/52或AT89C51/52或AT89S51/52單片機做為主控制器; · 2.采用74HC573驅動數碼管顯示; · 3.功能:六位數碼管顯示時分秒,整點半點報時,夜間只有燈光提醒 · 4.采用二十四小時制 · 5.到整點時長鳴1次,LED閃爍10次 · 6.到半點時短促鳴響1次,LED閃爍5次
使用方法: 三個按鍵一個是小時加,一個是分加,一個是秒清零。 開機數碼管顯示12.30.00是12點30分0秒的意思。
制作出來的實物圖如下:
IMG_3236.JPG (126.67 KB, 下載次數: 24)
下載附件
2019-10-18 00:51 上傳
IMG_3237.JPG (104.75 KB, 下載次數: 27)
下載附件
2019-10-18 00:51 上傳
IMG_3238.JPG (115.24 KB, 下載次數: 25)
下載附件
2019-10-18 00:51 上傳
IMG_3239.JPG (126.34 KB, 下載次數: 28)
下載附件
2019-10-18 00:51 上傳
IMG_3240.JPG (108.38 KB, 下載次數: 32)
下載附件
2019-10-18 00:51 上傳
IMG_3241.JPG (117.85 KB, 下載次數: 29)
下載附件
2019-10-18 00:51 上傳
IMG_3242.JPG (80.97 KB, 下載次數: 26)
下載附件
2019-10-18 00:51 上傳
IMG_3243.JPG (103.9 KB, 下載次數: 35)
下載附件
2019-10-18 00:51 上傳
IMG_3247.JPG (102.47 KB, 下載次數: 26)
下載附件
2019-10-18 00:51 上傳
IMG_3246.JPG (100.92 KB, 下載次數: 24)
下載附件
2019-10-18 00:51 上傳
IMG_3245.JPG (69.74 KB, 下載次數: 25)
下載附件
2019-10-18 00:51 上傳
IMG_3244.JPG (65.25 KB, 下載次數: 20)
下載附件
2019-10-18 00:51 上傳
IMG_3251.JPG (102.44 KB, 下載次數: 24)
下載附件
2019-10-18 00:51 上傳
IMG_3250.JPG (57.03 KB, 下載次數: 24)
下載附件
2019-10-18 00:51 上傳
IMG_3249.JPG (98.25 KB, 下載次數: 24)
下載附件
2019-10-18 00:51 上傳
IMG_3248.JPG (109.35 KB, 下載次數: 26)
下載附件
2019-10-18 00:51 上傳
單片機源程序如下:
- /************************************************************
- 作品名字:簡易聲光報時時鐘
- 功能:六位數碼管顯示時分秒,整點半點報時 ,夜間只有燈光提醒
- 二十四小時制
- 到整點時長鳴1次,LED閃爍10次
- 到半點時短促鳴響1次,LED閃爍5次
- 制作說明:P0接數碼管段選,P2低6位接數碼管位
-
- **************************************************************/
- #include<reg52.h> //頭文件
- #define uc unsigned char //宏定義
- #define ui unsigned int //宏定義
- sbit LED=P3^3;//定義LED
- sbit key1=P3^4;//定義調小時
- sbit key2=P3^5;//定義調分鐘
- sbit key3=P3^6;//定義秒清零
- sbit beep=P3^7;//設蜂鳴器
- uc min,hour,sec,led,num; //無符號字符型變量
- bit bdata hourLED,halfLED,hourbeep,halfbeep; //位變量
- uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*///共陰極編碼
- void delay(ui x)//1ms延時函數
- {
- ui i,j;
- for(i=0;i<x;i++)
- for(j=0;j<121;j++);
- }
- void display()//掃描顯示函數,高位到低位
- {
- P0=tab[hour/10];//給小時的十位送形
- P2=0xdf;//11011111 //位選
- delay(1); //延時動態掃描
- P2=0xff; //關閉位選
- P0=(tab[hour%10])|0x80;//給第二位后加“點
- P2=0xef;//11101111
- delay(1);
- P2=0xff;
- P0=tab[min/10];
- P2=0xf7;//11110111
- delay(1);
- P2=0xff;
- P0=(tab[min%10])|0x80;//給第四位后加“點”
- P2=0xfb;//11111011
- delay(1);
- P2=0xff;
- P0=tab[sec/10];
- P2=0xfd;//11111101
- delay(1);
- P2=0xff;
- P0=tab[sec%10];
- P2=0xfe;//11111110
- delay(1);
- P2=0xff;
- }
- void keyscan()//鍵盤掃描,開關接地
- {
- if(key1==0) //如果小時加按鍵按下
- {
- delay(5); //延時去抖
- if(key1==0) //確定是否按鍵
- {
- hour++; //小時加一
- if(hour==24) //如果小時等于24
- hour=0; //小時歸零
- }
- while(!key1) display();//判斷是否松開
- }
- if(key2==0) //如果分鐘加按鍵按下
- {
- delay(5); //延時去抖
- if(key2==0) //確定是否按鍵
- {
- min++; //分鐘加一
- if(min==60)// 如果分鐘等于60
- min=0; //分鐘歸零
- }
- while(!key2) display();//判斷是否松開
- }
- if(key3==0)//判斷調整秒按鍵
- {
- delay(5); //延時去抖
- if(key3==0) //確定是否按鍵
- {sec=0;} //秒清零
- while(!key3) display();//判斷是否松開
- }
- }
- void strike()//報時函數
- {
- if((hour>6)&&(hour<22))//判斷大于6點并且小于22點
- {
- if(sec==0)//以下判斷是否整點
- {
- if(min==0)//如果秒和分都等于0
- {
- hourbeep=1; //那么蜂鳴器和小燈位開啟
- hourLED=1;
- }
- else if(min==30)//如果分鐘等于30
- {
- if(num<10) //閃5下響一聲
- halfbeep=1;
- halfLED=1;
- }
- }
- }
- else //小于6點和大于22點的時候
- {
- if(sec==0)//以下判斷是否整點
- {
- if(min==0)//如果分鐘等于0
- hourLED=1; //led位開
- else if(min==30)//如果分鐘=0
- halfLED=1;//進行半點報時
- }
- }
- }
- void init()//初始化函數
- {
- sec=0;//一通電,顯示12:30:00,蜂鳴器響一下
- min=30;
- hour=12;
- TMOD=0x01;//設置定時器為定時器0工作方式為1
- TH0=(65536-50000)/256; //賦初值
- TL0=(65536-50000)%256; //賦初值
- EA=1; //開總中斷
- ET0=1; //開定時器0中斷
- TR0=1; //啟動定時器0
- }
- void main()//主函數
- {
- init();//初始化
- while(1) //主循環
- {
- display(); //顯示
- keyscan();//掃描是否有鍵按下
- strike();//報時函數
- }
- }
- void time0() interrupt 1 //定時器中斷
- {
- TH0=(65536-50000)/256;//重賦初值
- TL0=(65536-50000)%256;//重賦初值
- num++;
- if((num%10==0)&&(hourLED==1)) //整點報時
- {
- led++;
- LED=~LED;//取反實現閃爍
- if(led==20) //閃10次
- {
- led=0; //之后關閉閃爍
- LED=1;
- hourLED=0;
- }
- }
- else if((num%10==0)&&(halfLED==1))//半點報時
- {
- led++;
- LED=~LED; //取反實現閃爍
- if(led==10)//閃5次
- {
- led=0; //關閉閃爍
- LED=1;
- halfLED=0;
- }
- }
- if(hourbeep==1) //蜂鳴器響標志位
- {
- if(num==1)
- beep=0;
- if(num==20) //長響次之后
- {
- beep=1; //關閉
- hourbeep=0;
- }
- }
- else if(halfbeep==1) //蜂鳴器響標志位
- {
- if(num<10)
- beep=0;
- if(num==10) //短響之后
- {
- beep=1; //關閉
- halfbeep=0;
- }
- }
- if(num==20) //計時20次為1s時間
- {
- num=0;
- sec++; //秒加一
- if(sec==60)//如果秒等于60
- {
- sec=0; //秒歸零
- min++; //分鐘加一
- if(min==60)//如果分鐘等于60
- {
- min=0; //分鐘歸零
- hour++; //小時加一
- if(hour==24) //如果小時等于24
- {hour=0;}//小時歸零
- }
- }
- }
- }
復制代碼
全部資料51hei下載地址:
時分秒時鐘.7z
(8.5 MB, 下載次數: 23)
2019-10-18 00:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|