時鐘(帶鬧鐘功能)單片機課設
0.png (48.18 KB, 下載次數: 95)
下載附件
2017-5-7 16:04 上傳
單片機源程序:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit key1=P3^0; // 時鐘/鬧鐘/關鬧鐘
- sbit key2=P3^1; // 分鐘加
- sbit key3=P3^2; // 時鐘加
- sbit key4=P3^3; //
- sbit beep=P1^6; // 鬧鈴
- sbit led1=P1^7;//秒用燈的閃爍表示
- sbit smg_q=P3^7;
- sbit smg_b=P3^6;
- sbit smg_s=P3^5;
- sbit smg_g=P3^4;
- uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // 0-9
- uchar tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; // 0.-9.(帶小數點)
- uint t,flag,flag1;
- uint bbh,bbm,bbs;
- uint sec,min,hour; // 定義 秒,分,時
- void delay( unsigned int t);
- void inter_init();
- void time24();
- void clock();
- void alarm_clock();
- void display();
- void display_bb();
- //---------------------主函數--------------------------------
- void main()
- {
- inter_init();
- bbh=1;
- bbm=2;
- hour=23;
- min=59;
- sec=50;
-
- while(1)
- {
- time24();
- if(key1==0)
- {
- flag1=~flag1;
- flag=~flag;
- while(!key1);
- }
- if(flag==0)
- {
- clock();
- display(); /*調用顯示函數來顯示*/
- }
- else
- {
- alarm_clock();
- display_bb();
- }
-
- if(hour==bbh && min==bbm && flag1==0)
- {
- beep=~beep;
- delay(1);
- }
-
- }
-
-
- }
- /*---------------------延時----------------------- */
- void delay( unsigned int t) // 延時函數
- {
- unsigned int i;
- while(t--)
- for(i=0;i<125;i++);
- }
- /*---------------------中斷初始化-------------------------*/
- void inter_init()
- { sec=min=hour=0; // 將0賦給時分秒
- TMOD=0x01; // 方式1
- TH0=0x3c; // 65536-50000=15536=0x3cb0(50ms)
- TL0=0xb0;
- EA=1; // 開總中斷
- TR0=1; // 定時/計數器0開啟
- ET0=1; // 定時器/計數器0溢出中斷啟動
- }
- /*---------------------24小時制--------------------------*/
- void time24()
- {
- if(TF0==1) // 定時器/計數器溢出
- {
- TF0=0; // 清中斷標志位
- t++;
- if(t==20) // (50ms*20=1s)
- {
- t=0;
- led1=~led1;
- sec++; // 秒加1
- if(sec==60) // 秒為60,則清零,分加1
- {
- sec=0;
- min++;
- }
- if(min==60) // 分為60,則清零,時加1
- {
- min=0;
- hour++;
- }
- if(hour==24)// 時為24,則清零
- {
- hour=0;
- }
- }
- }
- }
- /*-----------按鍵調整子函數(時鐘和鬧鐘)-------------------------------------*/
- void clock() //時鐘調整
- {
-
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- min++;
- while(!key2);
- if(min==60)
- {
- min=0;
- }
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- hour++;
- while(!key3);
- if(hour==24)
- {
- hour=0;
- }
- }
- }
- }
- void alarm_clock() /*鬧鐘調整*/
- {
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- bbm++;
- while(!key2);
- if(bbm==60)
- {
- bbm=0;
- }
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- bbh++;
- while(!key3);
- if(bbh==24)
- {
- bbh=0;
- }
- }
- }
- }
-
- /*---------------------數碼管顯示子函數(時鐘和鬧鐘)-------------------------------------*/
- void display() // 顯示時間函數
- {
- smg_s=0; //時低位
- P2=tab_dp[hour%10];
- P2=0xff;
- smg_s=1;
-
- smg_g=0; //時高位
- P2=tab[hour/10];
- P2=0xff;
- smg_g=1;
-
- smg_q=0; //分低位
- P2=tab[min%10];
- P2=0xff;
- smg_q=1;
-
- smg_b=0; //分高位
- P2=tab[min/10];
- P2=0xff;
- smg_b=1;
-
- }
- void display_bb() //顯示鬧鐘函數
- {
- smg_s=0; //時低位
- P2=tab_dp[bbh%10];
- P2=0xff;
- smg_s=1;
-
- smg_g=0; //時高位
- P2=tab[bbh/10];
- P2=0xff;
- smg_g=1;
-
- smg_q=0; //分低位
- P2=tab[bbm%10];
- P2=0xff;
- smg_q=1;
-
- smg_b=0; //分高位
- P2=tab[bbm/10];
- P2=0xff;
- smg_b=1;
- }
-
復制代碼
全部代碼下載:
時鐘 鬧鐘.zip
(24.47 KB, 下載次數: 33)
2017-5-7 09:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|