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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2868|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

4位0.8寸電子鐘 15單片機加DS1302源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:95809 發(fā)表于 2019-12-6 13:16 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
沒有花里胡哨的功能,電子鐘安靜的看個時間就可以了,需要查看日期的時候按一下顯示切換鍵就可以了。我原來用的89c52單片機,現(xiàn)在把程序移植到成本更低15單片機上了。板子的下載接口同時也是電源接口,使用手機充電器供電即可,我是使用電腦的USB接口供電的。



單片機源程序如下:
#include <STC15F2K.h>
#include <DS1302.h>
#define uchar unsigned char
/********************************************************/
unsigned char code shumg[]={
        0xC0,/*0*/
        0xF9,/*1*/
        0xA4,/*2*/
        0xB0,/*3*/
        0x99,/*4*/
        0x92,/*5*/
        0x82,/*6*/
        0xF8,/*7*/
        0x80,/*8*/
        0x90,/*9*/
        0xff};
/********************************************************/                                            

sbit LED1=P1^4;        //時間指示燈
sbit LED2=P1^5;        //年月指示燈
sbit LED3=P1^6; //日周指示燈
sbit LED4=P1^0;        //冒號閃爍

sbit S1=P3^0;   //定義按鍵
sbit S2=P3^1;
sbit S3=P3^2;     //切換
sbit S4=P3^3;

sbit DIG1=P3^5; //數(shù)碼管位選
sbit DIG2=P3^4;
sbit DIG3=P3^6;
sbit DIG4=P3^7;

char miao_num;                                   //冒號標(biāo)志
/********************************************************/
unsigned char Time[]={0,0,0,0};//用來儲存,時間
unsigned char Dime[]={0,0,0,0};//用來儲存,年月
unsigned char Bime[]={0,0,0,0};//用來儲存,日期
unsigned char flag;                       //鍵盤入口
/********************************************************/
SYSTEMTIME  time1;   
/********************************************************/
void keyscan();                       //按鍵掃描程序
void mao_hao();                                         //冒號聲明
/********************************************************/
void delay(unsigned char i)      //延時子程序  
{
  unsigned char j;
  while((i--)!=0)
  {
    for(j=123;j>0;j--);
  }
}
/********************************************************/
void t0_init()                        //定時50ms一個中斷
{
  TMOD=0x11;                                                  //總中斷初始化
  TH0=0x3c;                                          //定時50ms一個中斷
  TL0=0xb0;                                          //定時50ms一個中斷
  EA=1;                                                                  //開啟總中斷
  ET0=1;                                                        
  TR0=1;                                                          //開啟定時器0
}
/********************************************************/
unsigned char button_time(n,x,y)        //時鐘調(diào)整子程序
unsigned char n,x,y;
{
if(S1==0)                                                        //加
  {
  delay(50);
if(S1==0)
{
n++;
if(n==x)
  n=0;
while(S1==0);
   }
}
/********************************************************/
if(S2==0)                                                //減
    {
   delay(50);
if(S2==0)
    {
if(n==0)
   n=y;
else
    n--;                                                
  while(S2==0);
    }
}
return n;                                                   //函數(shù)返回
}
/********************************************************/
void display(shi10,shi1,fen10,fen1)//顯示子程序
{
  DIG1=0;
P2=shumg[shi10];   //顯示時的十位
  delay(1);                        //延時
P2=0xff;                        //消隱
  DIG1=1;                         //消隱

  DIG2=0;
P2=shumg[shi1];        //顯示時的個位
  delay(1);                        //延時
  DIG2=1;                        //消隱
P2=0xff;                        //消隱                                                         

  DIG3=0;
P2=shumg[fen10];  //顯示分的十位
  delay(1);                        //延時
  DIG3=1;                        //消隱
P2=0xff;                        //消隱

  DIG4=0;
P2=shumg[fen1];        //顯示分的個位
  delay(1);                        //延時
  DIG4=1;                        //消隱
P2=0xff;                    //消隱
}
/********************************************************/
void main()                                                        //主程序
{  
   Initial_DS1302();                                 //初始化DS1302這個時鐘芯片,   
   t0_init();                                                 //中斷初始化
   while(1)                                                         //大循環(huán)   
   {                                                                 
   mao_hao();                                                 //冒號初始化
          keyscan();                                         //鍵盤初始化

  DS1302_GetTime(&time1);                       //讀取時間參數(shù)            

  Bime[3]=(time1.Week)%10;                   //把時的個位數(shù)據(jù)存入Bime[3]
  Bime[2]=(time1.Week)/10;                         //把時的個位數(shù)據(jù)存入Bime[2]
  Bime[1]=(time1.Day)%10;                       //把時的個位數(shù)據(jù)存入Bime[1]
  Bime[0]=(time1.Day)/10;                     //把時的個位數(shù)據(jù)存入Bime[0]

  Dime[3]=(time1.Month)%10;                   //把時的個位數(shù)據(jù)存入Dime[3]
  Dime[2]=(time1.Month)/10;                         //把時的個位數(shù)據(jù)存入Dime[2]
  Dime[1]=(time1.Year)%10;                   //把時的個位數(shù)據(jù)存入Dime[1]
  Dime[0]=(time1.Year)/10;                         //把時的個位數(shù)據(jù)存入Dime[0]

  Time[3]=(time1.Minute)%10;                 //把分的個位數(shù)據(jù)存入Time[3]
  Time[2]=(time1.Minute)/10;                 //把分的十位數(shù)據(jù)存入Time[2]
  Time[1]=(time1.Hour)%10;                   //把時的個位數(shù)據(jù)存入Time[1]
  Time[0]=(time1.Hour)/10;                         //把時的十位數(shù)據(jù)存入Time[0]
}
}
/*******************************************************/
void keyscan()                                //按鍵掃描程序
{
    if(S3==0)                                    //切換程序
        {
         delay(50);
        if(S3==0)
           {
           TR0=0;                                                        //有按鍵按下關(guān)閉定時器0
                miao_num=0;                                         //冒號常亮
                 flag++;
                if(flag>2)                                                //翻頁年月日周按兩次后啟動定時器
                        {
                 flag=0;
                   TR0=1;                                                //啟動定時器0
                        }
                }
        while(S3==0);
        }
/*******************************************************/
        if(S4==0)                                    //設(shè)置程序
        {
         delay(50);
        if(S4==0)
           {
          TR0=0;                                                        //有按鍵按下關(guān)閉定時器0
           miao_num=0;                                                //冒號常亮
                flag++;                                                        
            if(flag>2)                                                //按兩次后啟動定時器
           {
           TR0=1;                                                        //啟動定時器0
                }
          if(flag>4)                                                //按四次后關(guān)閉定時器
           {
           TR0=0;                                                        //關(guān)閉定時器0
                miao_num=0;                                                //冒號常亮
                }
        if(flag>8)                                                        //顯示多少位和翻頁按八次啟動定時器
                        {
                 flag=0;
                  TR0=1;                                                //啟動定時器0
                        }
                }
        while(S4==0);
        }
switch(flag)
        {
/*******************************************************/
                        
        case 0:display(Time[0],Time[1],Time[2],Time[3]);                //調(diào)用子函數(shù)display,把存入數(shù)組time的數(shù)據(jù)給顯示出來
                        LED1=0;
                        LED3=1;
                        break;
        case 1:display(Dime[0],Dime[1],Dime[2],Dime[3]);                //調(diào)用子函數(shù)display,把存入數(shù)組Dime的數(shù)據(jù)給顯示出來
                        LED1=1;
                        LED2=0;
                        break;
        case 2:display(Bime[0],Bime[1],Bime[2],Bime[3]);                //調(diào)用子函數(shù)display,把存入數(shù)組Bime的數(shù)據(jù)給顯示出來
                        LED2=1;
                        LED3=0;
                        break;
/*******************************************************/        
        case 3:time1.Hour=button_time(time1.Hour,24,23);                //調(diào)整時                           
                        DS1302_SetTime(0x84,time1.Hour);
                        display(Time[0],Time[1],10,10);
                        LED1=0;
                        LED3=1;
                        break;

    case 4:time1.Minute=button_time(time1.Minute,60,59);        //調(diào)整分                           
                        DS1302_SetTime(0x82,time1.Minute);
                        display(10,10,Time[2],Time[3]);
                        LED1=0;
                        LED3=1;
                        break;
/*******************************************************/
               
        case 5:time1.Year=button_time(time1.Year,100,99);                //調(diào)整年                           
                        DS1302_SetTime(0x8c,time1.Year);
                        display(Dime[0],Dime[1],10,10);
                        LED1=1;
                        LED2=0;
                        break;
        
        case 6:time1.Month=button_time(time1.Month,13,12);                //調(diào)整月                           
                        DS1302_SetTime(0x88,time1.Month);
                        display(10,10,Dime[2],Dime[3]);
                        LED1=1;
                        LED2=0;
                        break;
/********************************************************/        
                                         
           case 7:time1.Day=button_time(time1.Day,32,31);                        //調(diào)整日
                        DS1302_SetTime(0x86,time1.Day);
                        display(Bime[0],Bime[1],10,10);
                        LED2=1;
                        LED3=0;
                        break;
        
        case 8:time1.Week=button_time(time1.Week,8,7);                        //調(diào)整周
                        DS1302_SetTime(0x8a,time1.Week);
                        display(10,10,Bime[2],Bime[3]);
                        LED2=1;
                        LED3=0;
                        break;
    }
}
/*******************************************************/
void t0_timer() interrupt 1                                //冒號中斷賦值
{
      TH0=0x3c;
      TL0=0xb0;
      miao_num++;
}
/*******************************************************/
void mao_hao()                                        //冒號子程序
{
if(miao_num>=20)
   {
   miao_num=0;
   }
   if(miao_num<10)
     LED4=0;
         if(miao_num>=10)
          LED4=1;
}

完整代碼51hei下載地址:
15版.rar (29.83 KB, 下載次數(shù): 41)

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

使用道具 舉報

沙發(fā)
ID:475402 發(fā)表于 2019-12-13 17:26 | 只看該作者
學(xué)習(xí)并支持
回復(fù)

使用道具 舉報

板凳
ID:315554 發(fā)表于 2020-3-2 17:53 | 只看該作者
好象下過,再下,謝謝樓主,測試一下!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片色一级 | 久久高清免费视频 | 中文字幕亚洲一区二区va在线 | 日韩国产欧美一区 | 国产日韩一区二区三免费高清 | 日韩中文字幕一区二区 | 国产 欧美 日韩 一区 | 亚洲综合网站 | www.亚洲精品 | 日日爱视频 | 狠狠爱免费视频 | 久婷婷| 99热播放 | 欧美性视频在线播放 | 日本电影韩国电影免费观看 | 中文字幕精品一区二区三区精品 | 精品无码久久久久久久动漫 | 精品视频在线播放 | 成人在线亚洲 | 日韩 欧美 二区 | 久久精品这里精品 | 成人一区二区视频 | 欧美精品一区三区 | 精品欧美乱码久久久久久1区2区 | 中文字幕日韩欧美 | 欧美精品一二三区 | 精品免费视频一区二区 | 久久国产日本 | 精品国产乱码久久久久久丨区2区 | 91在线精品一区二区 | 免费成人在线网站 | 久久久tv | 欧美美女爱爱 | 亚洲精品久久区二区三区蜜桃臀 | 91高清视频在线观看 | 久久青视频 | 老外几下就让我高潮了 | av黄色在线 | 日本黄视频在线观看 | 久久久久久中文字幕 | 操久久|