|
51(STC89C52)單片機簡易時鐘程序電路設計(附源代碼和電路圖)
上一篇做了一個溫濕度采集電路,覺得這東西玩起來還是挺有意思,然后就想做一個時鐘,于是就有了下文
1.成品圖
51hei圖片_20200404134221.jpg (2.12 MB, 下載次數: 85)
下載附件
2020-4-4 13:44 上傳
2.電路設計
電路設計如下這里蜂鳴器用led等替代了,我覺得無所謂吧
51hei截圖20200404134842.png (141.7 KB, 下載次數: 73)
下載附件
2020-4-4 13:48 上傳
電路仿真工程文件
時鐘電路仿真.rar
(53.5 KB, 下載次數: 51)
2020-4-4 13:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
3.程序開發調試
程序
//****************************************************************//
//大男孩簡易時鐘
//單片機 STC89C52RC
//功能 簡單時鐘設計,按鍵調整時間和定鬧鐘
//****************************************************************//
#include <reg51.h>
#include <intrins.h>
//數據類型定義
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 無符號8位整型變量 */
typedef signed char S8; /* defined for signed 8-bits integer variable 有符號8位整型變量 */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 無符號16位整型變量 */
//----------------------------------------------//
//----------------IO口定義區--------------------//
//----------------------------------------------//
//數碼管顯示io定義
sbit S1=P2^7;
sbit S2=P2^6;
sbit S3=P2^5;
sbit S4=P2^4;
//按鍵開關io定義
sbit KEY1=P1^0;
sbit KEY2=P1^1;
//蜂鳴器io定義
sbit BELL=P2^3;
//----------------------------------------------//
//----------------數碼管數字 0--9---------------//
//----------------------------------------------//
U8 dat1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0X80,0X90,0xff,0xc6};
U8 dat2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0X00,0X10,0xff};//有小數點
//位選
U8 table[4]={0,0,2,1};
S8 flag=0;
S8 t=0;
S8 miao=0;
S8 xs=0;
S8 menu=0;
S8 feng=0,fens=0,shig=0,shis=0;
S8 nfeng=0,nfens=3,nshig=6,nshis=0;
S8 djsm=0,djsf=99;
S8 ksdjs=0;
S8 nkg=0;
S8 zdbs=0;
U8 count = 100;
//延時程序
void Delayms(U16 t)
{
U8 i;
while(t--)
for(i=0;i<100;i++);
}
//數碼管顯示
void display()
{
S1=0;S4=1;
P0=dat1[table[0]];
Delayms(2);
S4=0;S3=1;
P0=dat1[table[1]];
Delayms(2);
S3=0;S2=1;
if(flag>0)P0=dat2[table[2]];
else P0=dat1[table[2]];
Delayms(2);
S2=0;S1=1;
P0=dat1[table[3]];
Delayms(2);
}
void key()
{
if(BELL==0)
{
if(KEY2==0)
{
while(KEY2==0);
BELL=1;
nkg=0;
}
}
if(KEY1==0)
{
Delayms(10);
if(KEY1==0)
{
BELL=0;
while(KEY1==0);
BELL=1;
menu++;
if(menu==1){feng=table[0];fens=table[1];}
if(menu==2){shig=table[2];shis=table[3];}
if(menu==3){table[0]=nfeng;table[1]=nfens;table[2]=nshig;table[3]=nshis;}
if(menu==9){BELL=1;djsm=0;djsf=0;ksdjs=0;}
if(menu==10){table[0]=feng;table[1]=fens;table[2]=shig;table[3]=shis;menu=0;}
}
}
if(menu==1)//設置時間分
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
feng++;
if(feng==10)
{
feng=0;
fens++;
if(fens==6)fens=0;
}
}
}
}
if(menu==2)//設置時間時
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
shig++;
if(shig==10)
{
shig=0;
shis++;
}
if(shis==2 && shig==4)shig=shis=0;
}
}
}
if(menu==3)//設置鬧鐘分
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
nfeng++;
if(nfeng==10)
{
nfeng=0;
nfens++;
if(nfens==6)nfens=0;
}
}
}
}
if(menu==4)//設置鬧鐘時
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
nshig++;
if(nshig==10)
{
nshig=0;
nshis++;
}
if(nshis==2 && nshig==4)nshig=nshis=0;
}
}
}
if(menu==5)//開啟關閉鬧鐘
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
nkg++;
if(nkg==2)nkg=0;
}
}
}
if(menu==6)//開啟關閉整點報時
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
zdbs++;
if(zdbs==2)zdbs=0;
}
}
}
if(menu==7)//倒計時設置
{
if(KEY2==0)
{
Delayms(10);
if(KEY2==0)
{
BELL=0;
while(KEY2==0);
BELL=1;
djsf++;
if(djsf>99)djsf=0;
}
}
}
}
void init()
{
TMOD= 0x10;
TL1 = (65536-50000)%256; //設置定時初值
TH1 = (65536-50000)/256; //設置定時初值
ET1 = 1;
TR1 = 1;
EA = 1;
}
void main()
{
init();
while(1)
{
key();
display();
if(nkg==1)
{
if(table[0]==nfeng && table[1]==nfens && table[2]==nshig && table[3]==nshis)BELL=0;
else BELL=1;
}
if(zdbs==1)
{
if(table[0]==0 && table[1]==0 && miao<2)BELL=0;
else BELL=1;
}
}
}
void InitTimer1() interrupt 3 // 1毫秒@11.0592MHz
{
TL1 = (65536-50000)%256; //設置定時初值
TH1 = (65536-50000)/256; //設置定時初值
t++;
if(menu==0)
{
if(t==20)
{
t=0;
miao++;
if(miao==60)
{
miao=0;
table[0]++; //分個位加
if(table[0]==10)
{
table[0]=0;
table[1]++; //分十位加
if(table[1]==6)
{
table[1]=0;
table[2]++; //時個位加
if(table[2]==10)
{
table[2]=0;
table[3]++; //時十位加
}
if(table[3]==2 && table[2]==4)table[2]=table[3]=0;//滿24時
}
}
}
}
}
if(menu==1)
{
if(t<10)
{
table[0]=feng;
table[1]=fens;
}
if(t<20 && t>=10)
{
table[0]=10;
table[1]=10;
}
if(t==20)t=0;
}
if(menu==2)
{
table[0]=feng;
table[1]=fens;
if(t<10)
{
table[2]=shig;
table[3]=shis;
}
if(t<20 && t>=10)
{
table[2]=10;
table[3]=10;
}
if(t==20)t=0;
}
if(menu==3)
{
if(t<10)
{
table[0]=nfeng;
table[1]=nfens;
}
if(t<20 && t>=10)
{
table[0]=10;
table[1]=10;
}
if(t==20)t=0;
}
if(menu==4)
{
table[0]=nfeng;
table[1]=nfens;
if(t<10)
{
table[2]=nshig;
table[3]=nshis;
}
if(t<20 && t>=10)
{
table[2]=10;
table[3]=10;
}
if(t==20)t=0;
}
if(menu==5)//開啟關閉鬧鐘
{
table[0]=table[1]=table[2]=table[3]=nkg;
}
if(menu==6)//開啟關閉整點報時
{
table[0]=table[1]=table[2]=table[3]=zdbs;
}
if(menu==7)//倒計時
{
table[0]=0;
table[1]=0;
table[2]=djsf%10;
table[3]=djsf/10;
}
if(menu==8)//倒計時
{
if(KEY2==0)//開始倒計時
{
t=0;
BELL=0;
while(KEY2==0);
BELL=1;
ksdjs=1;
djsm=59;
djsf=djsf-1;
}
if(t==20 && ksdjs==1)
{
t=0;
djsm--;
if(djsf==0 && djsm==0){BELL=0;ksdjs=0;}
if(djsm==-1)
{
djsm=59;
djsf--;
}
}
table[3]=djsf/10;
table[2]=djsf%10;
table[1]=djsm/10;
table[0]=djsm%10;
}
if(menu==9)
{
if(KEY2==0)//秒表開計時
{
t=0;
BELL=0;
while(KEY2==0);
BELL=1;
ksdjs++;
if(ksdjs==2)ksdjs=0;
}
if(t==20 && ksdjs==1)
{
t=0;
djsm++;
if(djsm==60)
{
djsm=0;
djsf++;
if(djsf>99){ksdjs==0;djsf==99;}
}
}
table[3]=djsf/10;
table[2]=djsf%10;
table[1]=djsm/10;
table[0]=djsm%10;
}
xs++;
if(xs==10)
{
xs=0;
flag=!flag;
}
}
源代碼c語言程序
時鐘程序設計.rar
(37.42 KB, 下載次數: 31)
2020-4-4 13:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
電路調試制作焊接等
51hei圖片_20200404134152.jpg (2.34 MB, 下載次數: 99)
下載附件
2020-4-4 13:44 上傳
51hei圖片_20200404134231.jpg (2.39 MB, 下載次數: 87)
下載附件
2020-4-4 13:44 上傳
51hei圖片_20200404134226.jpg (2.14 MB, 下載次數: 77)
下載附件
2020-4-4 13:44 上傳
51hei圖片_20200404134247.jpg (1.64 MB, 下載次數: 81)
下載附件
2020-4-4 13:44 上傳
4.制作外殼
購買了手鉆和亞克力板等,然后就簡單制作了個外殼
51hei圖片_20200404134335.jpg (2.41 MB, 下載次數: 94)
下載附件
2020-4-4 13:45 上傳
51hei圖片_20200404134344.jpg (2.31 MB, 下載次數: 85)
下載附件
2020-4-4 13:45 上傳
51hei圖片_20200404134217.jpg (2.11 MB, 下載次數: 68)
下載附件
2020-4-4 13:44 上傳
然后順便已給我的溫濕度計也做了一個外殼,哈哈
51hei圖片_20200404134350.jpg (1.97 MB, 下載次數: 79)
下載附件
2020-4-4 13:45 上傳
|
評分
-
查看全部評分
|