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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

已經寫好的程序 差整點報時功能 設置鬧鐘功能 求個大神幫忙看看 想了很久了

[復制鏈接]
跳轉到指定樓層
樓主
ID:412862 發表于 2018-10-24 14:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


#include<reg51.h>
#include"lcd.h"
#include"ds1302.h"
typedef unsigned int u16;          //?????????????????????
typedef unsigned char u8;
                                                                                                                  
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
sbit beep=P1^5;
u8 start=0;



void Int0Configuration();
void LcdDisplay();
unsigned char SetState,SetPlace;
void Delay10ms(void);   //??? 0us

/*******************************************************************************
* ??????         : main
* ????????                   : ??????
* ????           : ??
* ???                  : ??
*******************************************************************************/

void delay(u16 y)
{
        while(y--);       
}

void sound()
{
        u8 y=100;
        while(y--)
        {
                beep=~beep;
                delay(100);       
        }
}
void keypros()
{
        if(K1==0&&K2==0)                         //???
        {
                delay(1000);
                if(K1==0&&K2==0)
                {
                        start=1;               
                }
                while(!(K1&&K2));
        }
        if(K4==0&&K1==0)                          //??
        {
                delay(1000);
                if(K4==0&&K1==0)
                {
                        start=0;               
                }
                while(!K4&&K1);
        }
}

void main()
{
                unsigned char i;
                unsigned char U;

       
        Int0Configuration();
        LcdInit();
        Ds1302Init();
       
        while(1)                         
        {       
                if(SetState==0)
                {
                        Ds1302ReadTime();                                                                                                                 
                }
                else
                {
                        if(K1==0)                //?????K1?????
                        {
                                Delay10ms();        //????????
                                if(K1==0)
                                {
                                        SetPlace++;                                                               
                                        if(SetPlace>=7)
                                                SetPlace=0;                                       
                                }

                                while((i<50)&&(K1==0))         //???????????
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;
                        }
                        if(K2==0)                //?????K2?????
                        {
                                Delay10ms();        //????????
                                if(K2==0)
                                {
                                        TIME[SetPlace]++;
                                        if((TIME[SetPlace]&0x0f)>9)                                         //????BCD??
                                        {
                                                TIME[SetPlace]=TIME[SetPlace]+6;
                                        }
                                        if((TIME[SetPlace]>=0x60)&&(SetPlace<2))                //????????59
                                        {
                                          
                                                TIME[SetPlace]=0;
                                                               
                                        }
                                        if((TIME[SetPlace]>=0x24)&&(SetPlace==2))                //С?????23
                                        {
                                                TIME[SetPlace]=0;
                                        }
                                        if((TIME[SetPlace]>=0x32)&&(SetPlace==3))                //??????31
                                        {
                                                TIME[SetPlace]=0;       
                                        }
                                        if((TIME[SetPlace]>=0x13)&&(SetPlace==4))                //??????12
                                        {
                                                TIME[SetPlace]=1;
                                        }       
                                        if((TIME[SetPlace]>=0x7)&&(SetPlace==5))                //??????7
                                        {
                                                TIME[SetPlace]=1;
                                        }
                               
                                               
//                                        if(SetPlace==5)                //??????12
//                                        {
//                                                TIME[SetPlace]=;
//                                        }       
                                }
                               
                                while((i<50)&&(K2==0))         //???????????
                                {
                                        Delay10ms();
                                        i++;
                                }
                                i=0;       
                        }
                                if(K4==0)                //?????K2?????
                        {
                                Delay10ms();        //????????
                                if(K4==0)
                                {
                                        TIME[SetPlace]--;
                                        if((TIME[SetPlace]&0x0f)>9)                                         //????BCD??
                                        {
                                                TIME[SetPlace]=TIME[SetPlace]+6;
                                        }
                                        if((TIME[SetPlace]==0x00)&&(SetPlace<2))                //????????59
                                        {
                                          
                                                TIME[SetPlace]=60;
                                                               
                                        }
                                        if((TIME[SetPlace]==0x00)&&(SetPlace==2))                //С?????23
                                        {
                                                TIME[SetPlace]=24;
                                        }
                                        if((TIME[SetPlace]==0x00)&&(SetPlace==3))                //??????31
                                        {
                                                TIME[SetPlace]=31;       
                                        }
                                        if((TIME[SetPlace]==0x01)&&(SetPlace==4))                //??????12
                                        {
                                                TIME[SetPlace]=12;
                                        }       
                                        if((TIME[SetPlace]==0x1)&&(SetPlace==5))                //??????7
                                        {
                                                TIME[SetPlace]=7;
                                        }
                               
                                               
       
                                }
                               
                                while((U<50)&&(K4==0))         //???????????
                                {
                                        Delay10ms();
                                        U++;
                                }
                                U=0;       
                        }
                                                                       
                }
                LcdDisplay();
                        keypros();
                if(start==1)
                {
                        sound();
                }
                else
                {
                        beep=1;
                }
                if((TIME[1]==0)&&(TIME[2]==0))
                {
             while(1)
            {
                sound();
            }
            }
                               

       
        }
       
             
/*        if(TIME[1]==0&&TIME[2]==0)
        {
        while(1)
        {
         sound();
        }
        }*/

       
}
/*******************************************************************************
* ??????         : LcdDisplay()
* ????????                   : ???????
* ????           : ??
* ???                  : ??
*******************************************************************************/

void LcdDisplay()
{
        LcdWriteCom(0x80+0X40);
        LcdWriteData('0'+TIME[2]/16);                                //?
        LcdWriteData('0'+(TIME[2]&0x0f));                                 
        LcdWriteData('-');
        LcdWriteData('0'+TIME[1]/16);                                //??
        LcdWriteData('0'+(TIME[1]&0x0f));       
        LcdWriteData('-');
        LcdWriteData('0'+TIME[0]/16);                                //??
        LcdWriteData('0'+(TIME[0]&0x0f));

        LcdWriteCom(0x80);
        LcdWriteData('2');
        LcdWriteData('0');
        LcdWriteData('0'+TIME[6]/16);                        //??
        LcdWriteData('0'+(TIME[6]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[4]/16);                        //??
        LcdWriteData('0'+(TIME[4]&0x0f));
        LcdWriteData('-');
        LcdWriteData('0'+TIME[3]/16);                        //??
        LcdWriteData('0'+(TIME[3]&0x0f));
        LcdWriteCom(0x8D);
        LcdWriteData('0'+(TIME[5]&0x07));        //????                         
}
/*******************************************************************************
* ??????         : Int0Configuration()
* ????????                   : ???????ж?0
* ????           : ??
* ???                  : ??
*******************************************************************************/

void Int0Configuration()
{
        //????INT0
        IT0=1;//????????????????????
        EX0=1;//??INT0???ж??????
        EA=1;//?????ж?       
}
/*******************************************************************************
* ??????         : Int0()
* ????????                   : ???ж?0 ?ж????
* ????           : ??
* ???                  : ??
*******************************************************************************/

void Int0() interrupt 0                 
{
        Delay10ms();
        if(K3==0)
        {
                SetState=~SetState;
                SetPlace=0;
                Ds1302Init();       
        }
}
/*******************************************************************************
* ??????         : Delay10ms
* ????????                   : ????????????10ms
* ????           : ??
* ???                  : ??
*******************************************************************************/
void Delay10ms(void)   //??? 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);

下面是
#include"lcd.h"

/*******************************************************************************
* ?? ?? ??         : Lcd1602_Delay1ms
* ????????                   : ????????????1ms
* ??    ??         : c
* ??    ??         : ??
* ?    ??         : ?ú???????12MHZ?????£?12???????????????
*******************************************************************************/

void Lcd1602_Delay1ms(uint c)   //??? 0us
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
           
}

/*******************************************************************************
* ?? ?? ??         : LcdWriteCom
* ????????                   : ??LCDд?????????????
* ??    ??         : com
* ??    ??         : ??
*******************************************************************************/
#ifndef         LCD1602_4PINS         //????ж??????LCD1602_4PINS?
void LcdWriteCom(uchar com)          //д??????
{
        LCD1602_E = 0;     //???
        LCD1602_RS = 0;           //?????????
        LCD1602_RW = 0;           //???д??
       
        LCD1602_DATAPINS = com;     //????????
        Lcd1602_Delay1ms(1);                //??????????

        LCD1602_E = 1;                  //д?????
        Lcd1602_Delay1ms(5);          //???????
        LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)          //д??????
{
        LCD1602_E = 0;         //???????
        LCD1602_RS = 0;         //???д??????
        LCD1602_RW = 0;         //???д??

        LCD1602_DATAPINS = com;        //????4λ?????????P0??????λ????????????λ?????
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;         //д?????
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

//        Lcd1602_Delay1ms(1);
        LCD1602_DATAPINS = com << 4; //???????λ
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;         //д?????
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif
/*******************************************************************************
* ?? ?? ??         : LcdWriteData
* ????????                   : ??LCDд?????????????
* ??    ??         : dat
* ??    ??         : ??
*******************************************************************************/                  
#ifndef         LCD1602_4PINS                  
void LcdWriteData(uchar dat)                        //д??????
{
        LCD1602_E = 0;        //???????
        LCD1602_RS = 1;        //???????????
        LCD1602_RW = 0;        //???д??

        LCD1602_DATAPINS = dat; //д??????
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;   //д?????
        Lcd1602_Delay1ms(5);   //???????
        LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)                        //д??????
{
        LCD1602_E = 0;          //???????
        LCD1602_RS = 1;          //???д??????
        LCD1602_RW = 0;          //???д??

        LCD1602_DATAPINS = dat;        //????4λ?????????P0??????λ????????????λ?????
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;          //д?????
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;

        LCD1602_DATAPINS = dat << 4; //д?????λ
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;          //д?????
        Lcd1602_Delay1ms(5);
        LCD1602_E = 0;
}
#endif
/*******************************************************************************
* ?? ?? ??       : LcdInit()
* ????????                 : ?????LCD??
* ??    ??       : ??
* ??    ??       : ??
*******************************************************************************/                  
#ifndef                LCD1602_4PINS
void LcdInit()                                                  //LCD??????????
{
        LcdWriteCom(0x38);  //?????
        LcdWriteCom(0x0c);  //?????????????
        LcdWriteCom(0x06);  //д???????1
        LcdWriteCom(0x01);  //????
        LcdWriteCom(0x80);  //??????????????
}
#else
void LcdInit()                                                  //LCD??????????
{
        LcdWriteCom(0x32);         //??8λ??????4λ????
        LcdWriteCom(0x28);         //????λ???μ?????
        LcdWriteCom(0x0c);  //?????????????
        LcdWriteCom(0x06);  //д???????1
        LcdWriteCom(0x01);  //????
        LcdWriteCom(0x80);  //??????????????
}
#endif
再是ds1302時鐘芯片的程序
#include"ds1302.h"

uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};


uchar TIME[7] = {0, 0, 0x12, 0x20, 0x10, 0x02, 0x18};



void Ds1302Write(uchar addr, uchar dat)
{
        uchar n;
        RST = 0;
        _nop_();

        SCLK = 0;
        _nop_();
        RST = 1;
        _nop_();

        for (n=0; n<8; n++)
        {
                DSIO = addr & 0x01;
                addr >>= 1;
                SCLK = 1;
                _nop_();
                SCLK = 0;
                _nop_();
        }
        for (n=0; n<8; n++)
        {
                DSIO = dat & 0x01;
                dat >>= 1;
                SCLK = 1;
                _nop_();
                SCLK = 0;
                _nop_();       
        }       
                 
        RST = 0;
        _nop_();
}



uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;
        _nop_();
        RST = 1;
        _nop_();

        for(n=0; n<8; n++)
        {
                DSIO = addr & 0x01;
                addr >>= 1;
                SCLK = 1;//???????????????DS1302???????
                _nop_();
                SCLK = 0;//DS1302????????????????
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//???8λ????
        {
                dat1 = DSIO;//?????λ???????
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302????????????????
                _nop_();
        }

        RST = 0;
        _nop_();        //?????DS1302??λ????????,??????
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;       
}

/*******************************************************************************
* ?? ?? ??         : Ds1302Init
* ????????                   : ?????DS1302.
* ??    ??         : ??
* ??    ??         : ??
*******************************************************************************/

void Ds1302Init()
{
        uchar n;
        Ds1302Write(0x8E,0X00);                 //???д????????????д????????
        for (n=0; n<7; n++)//д??7??????????????????????????
        {
                Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);       
        }
        Ds1302Write(0x8E,0x80);                 //??д????????
}

/*******************************************************************************
* ?? ?? ??         : Ds1302ReadTime
* ????????                   : ?????????
* ??    ??         : ??
* ??    ??         : ??
*******************************************************************************/

void Ds1302ReadTime()
{
        uchar n;
        for (n=0; n<7; n++)//???7??????????????????????????
        {
                TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
        }
               
}


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

使用道具 舉報

沙發
ID:412862 發表于 2018-10-24 14:58 | 只看該作者
3個分開的頭文件
回復

使用道具 舉報

板凳
ID:303383 發表于 2018-10-24 17:49 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

地板
ID:412862 發表于 2018-10-24 21:08 | 只看該作者
小貓貓愛吃魚 發表于 2018-10-24 17:49
你好!
1、整點報時,是語音播報,幾點整嗎?
2、定時鬧鐘,需要幾個?

是幾點整 只要蜂鳴器響就ok
定時鬧鐘能設置一個就好
回復

使用道具 舉報

5#
ID:7485 發表于 2018-10-25 09:30 | 只看該作者
你走的像風 發表于 2018-10-24 21:08
是幾點整 只要蜂鳴器響就ok
定時鬧鐘能設置一個就好

將“時”另存一個單元,每次讀取時間值,檢測讀到的值“時”和另存的是否為相同,不同有進位,就是整點。給蜂鳴器高電平發聲。然后將“時”另存的值改為新值。

發聲“時長”,由于一般都在數秒以上,可以采用定時器延時,一般不要用程序循環延時。也可以使用ds1302定時,方法有多種,例如可以比較“秒”的值,大于5秒(假設響5秒)則關斷蜂鳴器。讀1302的次數、顯示的次數都可以用來延時。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文在线a在线 | 免费欧美| 久久婷婷av | 国产成人高清 | 天堂久久一区 | 欧美中文字幕在线观看 | 日韩国产欧美在线观看 | 免费国产一区二区 | 精品欧美色视频网站在线观看 | 日本高清中文字幕 | 成人二区 | 欧美一区二区在线 | 97超碰站 | 久草网址| 国产真实精品久久二三区 | 日韩免费看片 | 欧美在线二区 | 岛国av一区二区 | 日本午夜免费福利视频 | 少妇黄色| 日本特黄a级高清免费大片 成年人黄色小视频 | 国产精品久久久 | 91久久国产精品 | 99精品久久久久久 | 精品一区二区三区在线观看国产 | 一区二区三区欧美在线 | 国产色 | 国产激情一区二区三区 | 日韩国产在线 | 精品视频国产 | 久久这里有精品 | 自拍偷拍亚洲一区 | 亚洲精品乱码久久久久久按摩观 | 久草在线 | 黄网站在线观看 | 欧美日韩亚洲一区 | 久久久性色精品国产免费观看 | 伊人超碰| 超碰8 | 亚洲精品一二三 | 欧美一区二区激情三区 |