|
多功能電子時鐘仿真原理圖:
0.png (27 KB, 下載次數: 72)
下載附件
2017-2-19 17:18 上傳
- /**************************/
- /**************************/
- /**** 電子時鐘 ****/
- /**************************/
- /**************************/
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- char miao,fen,shi;
- bit flag, flag_time;
- char set_miao=0,set_fen=0;set_shi=12; //鬧鐘初始化
- uchar slnum;
- sbit s1=P3^0; //功能鍵
- sbit s2=P3^1; //加鍵
- sbit s3=P3^2; //減鍵
- sbit s4=P3^3; //鬧鐘設置
- sbit led1=P1^0; //調整秒鐘的指示燈
- sbit led2=P1^1; //調整分鐘的指示燈
- sbit led3=P1^2; //調整時鐘的指示燈
- sbit led4=P1^3; //鬧鐘設置指示燈
- sbit BUZZ =P1^4; //報警
- sbit wei0=P2^0; //定義8個數碼管段選
- sbit wei1=P2^1;
- sbit wei2=P2^2;
- sbit wei3=P2^3;
- sbit wei4=P2^4;
- sbit wei5=P2^5;
- sbit wei6=P2^6;
- sbit wei7=P2^7;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
- 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40}; //共陰數碼管編碼
- void delay(uint z) //延時函數
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void start() //定時器初始化
- {
- TMOD=0x11;
- TH0=(65536-50000)/256; //時間累加
- TH0=(65536-50000)%256;
- TH1=(65536-50000)/256; //鬧鐘設置
- TH1=(65536-50000)%256;
- EA=1;
- ET0=1;
- ET1=1;
- TR0=1;
- TR1=0; //關閉定時器
- }
- void display(char miao,char fen, char shi) //顯示子程序,分別顯示時,分,秒
- {
- P0=table[miao%10];
- wei7=0;
- delay(1);
- wei7=1;
- P0=0xff;
- P0=table[miao/10];
- wei6=0;
- delay(1);
- wei6=1;
- P0=0xff;
- P0=table[16];
- wei5=0;
- delay(1);
- wei5=1;
- P0=0xff;
- P0=table[fen%10];
- wei4=0;
- delay(1);
- wei4=1;
- P0=0xff;
- P0=table[fen/10];
- wei3=0;
- delay(1);
- wei3=1;
- P0=0xff;
- P0=table[16];
- wei2=0;
- delay(1);
- wei2=1;
- P0=0xff;
- P0=table[shi%10];
- wei1=0;
- delay(1);
- wei1=1;
- P0=0xff;
- P0=table[shi/10];
- wei0=0;
- delay(1);
- wei0=1;
- P0=0xff;
- }
- void keyscan() //功能鍵
- {
- if(s1==0)
- {
- delay(5);
- if(s1==0) //確認功能按下
- {
- while(!s1);
- slnum++; //功能鍵按下次數記錄
- if(slnum==1) //功能鍵第一次按下調整“秒鐘”
- {
- if(flag)
- TR0=1; //開定時器
- else
- TR0=0; //關閉定時器
- led1=0;
- }
- if(slnum==2)
- {
- led2=0;
- led1=1;
- }
- if(slnum==3)
- {
- led3=0;
- led2=1;
- led1=1;
- }
- if(slnum==4)
- {
- led3=1;
- led2=1;
- led1=1;
- slnum=0;
- TR0=1;
- }
- }
- }
- }
- void time()
- {
- if(slnum!=0)
- {
- if(s2==0)
- {
- delay(5);
- if(s2==0)
- {
- while(!s2);
- switch(slnum)
- {
- case 1:
- miao++;
- if(miao==60)
- miao=0;
- break;
- case 2:
- fen++;
- if(fen==60)
- fen=0;
- break;
- case 3:
- shi++;
- if(shi==24)
- shi=0;
- break;
- }
- }
- }
- if(s3==0)
- {
- delay(5);
- if(s3==0)
- {
- while(!s3);
- switch(slnum)
- {
- case 1:
- miao--;
- if(miao<0)
- miao=59;
- break;
- case 2:
- fen--;
- if(fen<0)
- fen=59;
- break;
- case 3:
- shi--;
- if(shi<0)
- shi=23;
- break;
- }
- }
- }
- }
- }
- void set_time()
- {
- if(slnum==0)
- {
- if(s4==0)
- {
- delay(5);
- if(s4==0)
- {
- while(!s4);
- led4=~led4;
- flag=~flag;
- }
- }
- }
- if(flag)
- {
- if(slnum!=0)
- {
- if(s2==0)
- {
- delay(5);
- if(s2==0)
- {
- while(!s2);
- switch(slnum)
- {
- case 1:
- set_miao++;
- if(set_miao==60)
- set_miao=0;
- break;
- case 2:
- set_fen++;
- if(set_fen==60)
- set_fen=0;
- break;
- case 3:
- set_shi++;
- if(set_shi==24)
- set_shi=0;
- break;
- }
- }
- }
- if(s3==0)
- {
- delay(5);
- if(s3==0)
- {
- while(!s3);
- switch(slnum)
- {
- case 1:
- set_miao--;
- if(set_miao<0)
- set_miao=59;
- break;
- case 2:
- set_fen++;
- if(set_fen<0)
- set_fen=59;
- break;
- case 3:
- set_shi--;
- if(set_shi<0)
- set_shi=23;
- break;
- }
- }
- }
- }
- }
- }
- void main()
- {
- start();
- while(1)
- {
- keyscan();
- time();
- if(!flag)
- {
- display(miao,fen,shi);
- }
- else
- {
- display(set_miao,set_fen,set_shi);
- }
- if(miao==set_miao&&fen==set_fen&&shi==set_shi)
- {
- TR1=1;
- }
- if(flag_time)
- {
- TR1=0;
- BUZZ=1;
- flag_time=0;
- }
- set_time();
- }
- }
- void time_0()interrupt 1
- {
- uchar aa;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- aa++;
- if(aa==20)
- {
- aa=0;
- miao++;
- if(miao>=60)
- {
- miao=0;
- fen++;
- if(fen>=60)
- {
- fen=0;
- shi++;
- if(shi>=24)
- {
- shi=0;
- }
- }
- }
- }
- }
- void time_1()interrupt 3
- {
- uchar bz_time;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- bz_time++;
- if(bz_time==200)
- {
- bz_time=0;
- flag_time=1;
- }
- BUZZ=~BUZZ;
- }
-
復制代碼
0.png (65.49 KB, 下載次數: 68)
下載附件
2017-2-19 17:18 上傳
|
-
-
電子時鐘.zip
2017-2-19 15:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
69.77 KB, 下載次數: 59, 下載積分: 黑幣 -5
評分
-
查看全部評分
|