久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13994|回復: 9
打印 上一主題 下一主題
收起左側

STC89C52單片機簡易時鐘程序電路設計(附源代碼和電路圖)

  [復制鏈接]
跳轉到指定樓層
樓主
51(STC89C52)單片機簡易時鐘程序電路設計(附源代碼和電路圖)
上一篇做了一個溫濕度采集電路,覺得這東西玩起來還是挺有意思,然后就想做一個時鐘,于是就有了下文
1.成品圖


2.電路設計
電路設計如下這里蜂鳴器用led等替代了,我覺得無所謂吧


電路仿真工程文件
時鐘電路仿真.rar (53.5 KB, 下載次數: 51)

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)


電路調試制作焊接等


4.制作外殼
購買了手鉆和亞克力板等,然后就簡單制作了個外殼




然后順便已給我的溫濕度計也做了一個外殼,哈哈


51hei圖片_20200404134212.jpg (1.99 MB, 下載次數: 84)

51hei圖片_20200404134212.jpg

51hei圖片_20200404134237.jpg (2.13 MB, 下載次數: 78)

51hei圖片_20200404134237.jpg

51hei圖片_20200404134242.jpg (1.83 MB, 下載次數: 83)

51hei圖片_20200404134242.jpg

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:125719 發表于 2020-4-4 21:27 | 只看該作者
這個動手能力很棒的,走線也很漂亮
回復

使用道具 舉報

板凳
ID:70614 發表于 2020-4-24 16:30 | 只看該作者
用的都是什么原件,有什么功能
回復

使用道具 舉報

地板
ID:459560 發表于 2020-4-24 20:47 | 只看該作者
很漂亮,外殼也不錯,
回復

使用道具 舉報

5#
ID:499163 發表于 2020-5-18 17:14 | 只看該作者
星星一眨眼 發表于 2020-4-24 16:30
用的都是什么原件,有什么功能

元器件的話我沒有列出來,但是看圖片都有了,對于你們這樣的大神,我覺得看一眼就知道怎么回事了,功能有時鐘、鬧鐘
回復

使用道具 舉報

6#
ID:499163 發表于 2020-5-18 17:16 | 只看該作者
shyboy133 發表于 2020-4-24 20:47
很漂亮,外殼也不錯,

哈哈,做這個外殼其實還是需要專業的設備,我直接用刀裁剪,誤差太大,打孔也是,總是差一點點。。尷尬,總算是湊活好了,也浪費了不好板材
回復

使用道具 舉報

7#
ID:732581 發表于 2020-5-18 20:11 來自手機 | 只看該作者
還得需要開發板吧
回復

使用道具 舉報

8#
ID:499163 發表于 2020-5-20 15:49 | 只看該作者
永琪琪 發表于 2020-5-18 20:11
還得需要開發板吧

途中的小板就是個小開發板,實際上做這個簡單的,有個面包板能調試就可以了,只是說有個開發板更方便調試測試
回復

使用道具 舉報

9#
ID:443306 發表于 2020-5-21 08:02 來自手機 | 只看該作者
我也不懂編程感覺你這個過于復雜能不能做個簡單的時鐘 就用stcf104之類的8腳單片機的6個端子,四個用于1602串口屏的輸出,二個用于時間設置,呵呵也就是說單片機設置成一小時計時器,重復使用了你設計好我也做個玩,雖然不用1302,精度可以調整定時器時間改善吧,這樣簡單的時鐘也沒必要講究高精度吧八九不離十就可以了設計好給我一份我也做個玩玩,謝謝
回復

使用道具 舉報

10#
ID:443306 發表于 2020-5-21 08:06 來自手機 | 只看該作者
qingfengjyf 發表于 2020-5-20 15:49
途中的小板就是個小開發板,實際上做這個簡單的,有個面包板能調試就可以了,只是說有個開發板更方便調試 ...

我也不懂編程感覺你這個過于復雜能不能做個簡單的時鐘 就用stc15f104之類的8腳單片機的6個端子,四個用于1602串口屏的輸出,二個用于時間設置,呵呵也就是說單片機設置成一小時計時器,重復使用了你設計好我也做個玩,雖然不用1302,精度可以調整定時器時間改善吧,這樣簡單的時鐘也沒必要講究高精度吧八九不離十就可以了設計好給我一份我也做個玩玩,謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91不卡 | 亚洲美女在线一区 | 欧美日韩中文在线 | 亚洲视频在线播放 | 黑人巨大精品欧美一区二区免费 | 国产一区不卡 | 国产精品一区一区 | 国产乱码精品一区二区三区中文 | 欧美日韩综合 | 围产精品久久久久久久 | 欧美黑人体内she精在线观看 | 91精品久久久久久久久 | 三a毛片 | 亚洲精品永久免费 | 日韩欧美操 | 人人色视频 | 国产精品日韩欧美一区二区三区 | 超碰人人爱 | 一二三四在线视频观看社区 | 99视频免费看 | 免费在线一区二区 | 亚洲福利在线观看 | 午夜成人在线视频 | 国产综合久久 | 成人国产精品久久 | 国产精品网址 | 暖暖成人免费视频 | 国产精品美女 | 特黄特色大片免费视频观看 | 操亚洲 | 九九九视频在线 | 男女污污网站 | 国产一区二区影院 | 日韩黄a | 午夜视频一区 | 日韩av免费在线观看 | 欧美电影一区 | 精品国产免费人成在线观看 | 午夜精品一区二区三区在线视 | 国产在线精品一区二区 | 日本福利片 |