|
以前做的一個(gè)基于51單片機(jī)的數(shù)字時(shí)鐘,有四個(gè)按鍵,可以設(shè)置時(shí)間、設(shè)置鬧鐘,增加時(shí)間,減少時(shí)間。
12.PNG (139.37 KB, 下載次數(shù): 87)
下載附件
2018-9-20 09:07 上傳
單片機(jī)源程序:
- main.c
- #include "bsp.h"
- void main()
- {
- bsp_init();
- while(1)
- {
- key_scan(); //三個(gè)按鍵各自的實(shí)現(xiàn)
- set_showvalue(); //按下一個(gè)按鍵,將時(shí)間變成可以在數(shù)碼管上顯示的數(shù)
- bsp_scan(); //將時(shí)間送到數(shù)碼管上顯示
- delay(1);
- }
- }
- bsp_key.c
- #include"bsp.h"
- sbit P1_0=P1^0; //時(shí)鐘暫停鍵
- sbit P1_1=P1^1;
- sbit P1_2=P1^2; //增加一秒
- sbit P1_3=P1^3; //減少一秒
- void key_scan(void)
- {
-
- if(P1_0==0) //此鍵實(shí)現(xiàn)暫停
- {
- delay(5);
- if(P1_0==0)
- {
- TR0=0;//定時(shí)器啟動(dòng)位關(guān)閉
- }
- }
-
-
- if(P1_1==0) //此鍵設(shè)置鬧鐘
- {
- delay(5);
- if(P1_1==0)
- {
- TR0=1; //定時(shí)器啟動(dòng)位開(kāi)啟
- }
- }
-
-
- if(P1_2==0) //此鍵實(shí)現(xiàn)時(shí)間的一秒的增加
- {
- delay(5);
- if(P1_2==0)
- {
- delay(5);
- while(!P1_2); //消除按鍵抖動(dòng)
- delay(5);
- while(!P1_2);
- sec++;
- if(sec==60)
- {
- sec=0;
- min++;
- if(min==60)
- {
- min=0;
- hour++;
- if(hour==24)
- {
- hour=0;
- }
- }
- }
- }
- }
-
-
-
-
- if(P1_3==0) //此鍵實(shí)現(xiàn)時(shí)間一秒的減少
- {
- delay(5);
- if(P1_3==0)
- {
- delay(5);
- while(!P1_3);
- delay(5);
- while(!P1_3);
- sec--;
- if(sec==0)
- {
- sec=59;
- if(min==0)
- {
- min=59;
- if(hour==0)
- {
- hour=23;
- min=59;
- sec=59;
- }
- else
- {
- hour--;
- }
- }
- else
- {
- min--;
- }
- }
- }
- }
- }
- bsp_seg.c
- #include "bsp.h"
- code char WEI[6]={0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //位選碼
- code char DUAN[11]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0XFF};
- unsigned char show[6]={0x00};
- void bsp_scan(void)
- {
- static unsigned char index =0;
- P2=WEI[index]; //1101 1111
- P0=show[index]; //P0 = DUAN[[index]; 顯示固定的0-5
- index++;
- if(index==6)
- index=0;
-
- /* P2 = WEI[0]; //顯示自己的生日
- P0 = DUAN[9];
- delay(1);
- P2 = WEI[1];
- P0 = DUAN[6];
- delay(1);
- P2 = WEI[2];
- P0 = DUAN[1];
- delay(1);
- P2 = WEI[3];
- P0 = DUAN[0];
- delay(1);
- P2 = WEI[4];
- P0 = DUAN[3];
- delay(1);
- P2 = WEI[5];
- P0 = DUAN[0];
- delay(1); */
-
- }
- void set_showvalue(void)
- {
- show[0]=DUAN[hour/10];//小時(shí)的十位
- show[1]=DUAN[hour%10];//小時(shí)的個(gè)位
-
- show[2]=DUAN[min/10];
- show[3]=DUAN[min%10];
-
- show[4]=DUAN[sec/10];
- show[5]=DUAN[sec%10];
- }
- bsp_timer.c
- #include "bsp.h"
- unsigned char tick0=0;
- unsigned char sec=0,min=0,hour=0;
- void Time0_Init(void) //定時(shí)器0初始化
- {
- TMOD |= 0X01; //方式一,軟件清零
- TH0=(65536-50000)/256; //50ms
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
- void INT_TIME0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- tick0++;
- if(tick0==20)
- {
- tick0=0;
- sec++;
- if(sec==60)
- {
- sec=0;
- min++;
- if(min==60)
- {
- min=0;
- hour++;
- {
- if(hour=24)
- hour=0;
- }
- }
- }
- }
- }
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
13.PNG (189.41 KB, 下載次數(shù): 95)
下載附件
2018-9-20 09:21 上傳
仿真和源碼下載:
數(shù)字時(shí)鐘源程序.zip
(56.6 KB, 下載次數(shù): 135)
2018-9-20 09:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
數(shù)字時(shí)鐘protues仿真.zip
(81.03 KB, 下載次數(shù): 108)
2018-9-20 09:27 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|