亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2705|回復(fù): 3
收起左側(cè)

單片機(jī)程序應(yīng)該加入什么關(guān)于蜂鳴器的代碼可以讓它實(shí)現(xiàn)鬧鈴的功能

[復(fù)制鏈接]
ID:812792 發(fā)表于 2020-8-11 15:15 | 顯示全部樓層 |閱讀模式
這個(gè)是51單片機(jī)電子日歷并且可以顯示溫度的DS1302時(shí)鐘+12864LCD顯示,現(xiàn)在想要給這個(gè)程序通過(guò)加入一個(gè)蜂鳴器以讓它實(shí)現(xiàn)在特定時(shí)間發(fā)出聲音的功能,也就是一個(gè)鬧鈴的功能,菜雞請(qǐng)問(wèn)大家應(yīng)該加入什么樣的代碼可以讓它實(shí)現(xiàn)這樣的功能呢?

單片機(jī)顯示時(shí)間(可調(diào)整)(DS1302時(shí)鐘 12864LCD顯示).docx

54.14 KB, 下載次數(shù): 3

回復(fù)

使用道具 舉報(bào)

ID:812792 發(fā)表于 2020-8-11 15:17 | 顯示全部樓層
/****************************************/
/*        帶溫度顯示的電子日歷                */
/****************************************/

#include<reg51.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^7;
sbit CS1=P2^1;    //定義選擇芯片左半屏信號(hào)
sbit CS2=P2^2;    //定義選擇芯片右半屏信號(hào)
sbit DI=P2^5;     //定義選擇顯示類(lèi)型
sbit RW=P2^4;     //定義讀寫(xiě)信號(hào)
sbit E=P2^3;      //定義數(shù)據(jù)鎖存信號(hào)
sbit IO=P1^0;          //DS1302數(shù)據(jù)線(xiàn)
sbit CLK=P1^1;          //DS1302時(shí)鐘線(xiàn)
sbit RST=P1^2;          //DS1302復(fù)位線(xiàn)
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;                 
uchar Time_Buffer[7]; //日期緩存,0-6依次為秒、分、時(shí)、日、月、周日、年
uint Temp,Temp1;
bit Temp_Flag;
uchar s1num;
uchar flag_year=0,flag_moon=0,flag_day=0,flag_hour=0,flag_min=0,flag_sec=0,flag_week=0;
uchar tempa;
uchar t0_num;
void delayms(uint xms);
void Write_1302(uchar addr,uchar dat);
void keyscan();
void time_adj();

/*--年,月,日,星期,時(shí),分,秒,漢字點(diǎn)陣(16*16)--*/
uchar code Date_Time_Words[]=
{
0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,//年
0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,//月
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,//日
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,//星
0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,
0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,//期
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,
0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,//時(shí)
0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,//分
0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,
0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,//秒
0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00
} ;
//星期幾的漢字點(diǎn)陣
uchar code Weekday_Words[]=
{
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,//日
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00,//一
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,//二
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,//三
0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0xFE,0x02,0x02,0x02,0xFE,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,//四
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,
0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00,//五
0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,
0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,//六
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00
};

//溫度顯示漢字點(diǎn)陣
uchar code Templt[]=
{
0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,//溫
0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,
0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00,//度
0x40,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00,
0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//:
0x00,0x00,0x00,0x00,0x31,0x7B,0x7B,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x05,0xE2,0x18,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,//℃
0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x18,0x00,0x00

};

//半角數(shù)字點(diǎn)陣
uchar code Digits[]=
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00        //' '
};

/*--屏幕顯示--*/
void left()//左半屏顯示
{
CS1=1;
CS2=0;
}
void right()//右半屏顯示
{
CS1=0;
CS2=1;
}

/*--判斷LCD是否繁忙--*/
void LCD_Check_Busy()
{       
do
{
E=0;
DI=0;
RW=1;
P0=0xff;
E=1;
_nop_();
E=0;
}
while(P0&0x80);//P0.7口
}

/*--向LCD發(fā)送命令--*/
void LCD_Write_Command(uchar c)
{
        LCD_Check_Busy();
        P0=0xFF ;
RW=0;
DI=0;
        P0=c ;
        E=1;
E=0;
}

/*--向LCD發(fā)送數(shù)據(jù)--*/
void LCD_Write_Date(uchar d)
{
        LCD_Check_Busy();
        P0=0xFF ;
RW=0;
DI=1;
E=1;
_nop_();
        P0=d ;
        E=0;
_nop_();
}

/*--設(shè)置初始頁(yè)--*/
void page_first(uchar p)
{
uchar i=p;
p=i|0xb8;
LCD_Check_Busy();
        LCD_Write_Command(p);
}

/*--設(shè)置初始列--*/
void col_first(uchar c)
{
        uchar i=c;
        c=i|0x40;
        LCD_Check_Busy();
        LCD_Write_Command(c);
}

/*--任意位置顯示漢字--*/
void Display_Word(uchar page,uchar col,uchar*s)
{
        uchar i,j;
        page_first(page);//上半部
        col_first(col);
        for(i=0;i<16;i++)
        {
                LCD_Write_Date(*s);
s++;
        }
        page_first(page+1);//下半部
        col_first(col);
        for(j=0;j<16;j++)
        {
                LCD_Write_Date(*s);
                s++;
        }
}

/*--任意位置顯示字符--*/
void Display_Char(uchar page,uchar col,uchar*s)
{
        uchar i,j;
        page_first(page);//上半部
        col_first(col);
        for(i=0;i<8;i++)
        {
                LCD_Write_Date(*s);
s++;
        }
        page_first(page+1);//下半部
        col_first(col);
        for(j=0;j<8;j++)
        {
                LCD_Write_Date(*s);
                s++;
        }
}

/*--初始化LCD --*/
void LCD_initialize()
{
        CS1=1;
    CS2=1;
        LCD_Write_Command(0x38); //8位形式,2行字符
        LCD_Write_Command(0x0F); //開(kāi)顯示
        LCD_Write_Command(0x01); //清屏
        LCD_Write_Command(0x06); //畫(huà)面不動(dòng)光標(biāo)右移
        LCD_Write_Command(0xC0);//設(shè)置起始行
}

/*--向DS1302寫(xiě)入一字節(jié)--*/
void Write_A_Byte_To_1302(uchar x)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                 IO=x&0x01; CLK=1;CLK=0;x>>=1;
        }
}
/*--從DS1302讀取一字節(jié)--*/
uchar Receive_A_Byte_From_1302()
{
        uchar i,b=0x00;
        for(i=0;i<8;i++)
        {
                 b |= _crol_((uchar)IO,i);
                CLK=1;CLK=0;
        }
        return b/16*10+b%16;
}

/*--從DS1302指定位置讀數(shù)據(jù)--*/
uchar Read_1302(uchar addr)
{
        uchar dat;
        RST = 0;CLK=0;RST=1;
           Write_A_Byte_To_1302(addr);
        dat = Receive_A_Byte_From_1302();
           CLK=1;RST=0;
        return dat;
}

/*--向DS1302某地址寫(xiě)入數(shù)據(jù)--*/
void Write_1302(uchar addr,uchar dat)
{
         CLK=0; RST=0;
         Write_A_Byte_To_1302(addr);
         Write_A_Byte_To_1302(dat);
         CLK=0;RST=0;
}

/*--讀取當(dāng)前日期時(shí)間--*/
void Get_Time()
{
        uchar i;
        for(i=0;i<7;i++)
        {
                Time_Buffer[i]=Read_1302(0x81+2*i);
        }
}

/*--定時(shí)器0每秒刷新LCD顯示--*/
void T0_INT() interrupt 1
{
        TH0=(65536-50000)/256;
           TL0=(65536-50000)%256;
        t0_num++;
    left();//顯示左半屏
        if(flag_year==0)          
         {
          Display_Char(0,16,Digits+ Time_Buffer [6]/10*16);//顯示年的十位數(shù),占8列
          Display_Char(0,24,Digits+ Time_Buffer [6]%10*16); //顯示年的個(gè)位數(shù),占8列
         }
        else
         {
          if(t0_num<=5)
           {
                Display_Char(0,16,Digits+ Time_Buffer [6]/10*16);//顯示年的十位數(shù),占8列
            Display_Char(0,24,Digits+ Time_Buffer [6]%10*16); //顯示年的個(gè)位數(shù),占8列
           }
          if(t0_num>5&&t0_num<=10)
           {
                if(t0_num==10)t0_num=0;
                Display_Char(0,16,Digits+ Digits[11]/10*16);//顯示年的十位數(shù),占8列
            Display_Char(0,24,Digits+ Digits[11]%10*16); //顯示年的個(gè)位數(shù),占8列
           }
         }
        Display_Char(0,48,Digits+ Time_Buffer [4]/10*16); //顯示月的十位數(shù),占8列
        Display_Char(0,56,Digits+ Time_Buffer [4]%10*16); //顯示月的個(gè)位數(shù),占8列
        right();//顯示右半屏
        Display_Char(0,80,Digits+ Time_Buffer [3]/10*16); //顯示日的十位數(shù),占8列
        Display_Char(0,88,Digits+ Time_Buffer [3]%10*16); //顯示日的個(gè)位數(shù),占8列
        left();//顯示左半屏
        Display_Char(2,16,Digits+ Time_Buffer [2]/10*16); //顯示時(shí)的十位數(shù),占8列
        Display_Char(2,24,Digits+ Time_Buffer [2]%10*16); //顯示時(shí)的個(gè)位數(shù),占8列
        left();//顯示左半屏
        Display_Char(2,48,Digits+ Time_Buffer [1]/10*16); //顯示分的十位數(shù),占8列
        Display_Char(2,56,Digits+ Time_Buffer [1]%10*16); //顯示分的個(gè)位數(shù),占8列
        right();//顯示右半屏,秒顯示在右半屏部分
        Display_Char(2,80,Digits+ Time_Buffer [0]/10*16); //顯示秒的十位數(shù),占8列
        Display_Char(2,88,Digits+ Time_Buffer [0]%10*16); //顯示秒的個(gè)位數(shù),占8列
        right();//顯示右半屏
        Display_Word(4,64,Weekday_Words+( Time_Buffer [5]-1)*32);//顯示周日,占16列       
        left();//顯示左半屏,溫度
        Display_Char(6,48,Digits+ Temp1/100*16); //顯示溫度十位數(shù),占8列
        Display_Char(6,56,Digits+ Temp1%100/10*16); //顯示溫度個(gè)位數(shù),占8列
    right();//顯示右半屏
        Display_Char(6,64,Digits+ 10*16); //顯示溫度小數(shù)點(diǎn),占8列
        Display_Char(6,72,Digits+ Temp%10*16); //顯示溫度十分位數(shù),占8列
}

/*--定時(shí)器0初始化程序--*/
void Time0_initialize()
{
        EA=1;//開(kāi)總中斷
        ET0=1;//開(kāi)定時(shí)/計(jì)數(shù)器0中斷
        TMOD=0x01;//設(shè)置工作方式1
        TH0=(65536-50000)/256;//放入計(jì)數(shù)初值
        TL0=(65536-50000)%256;//放入計(jì)數(shù)初值
        TR0=1;//開(kāi)定時(shí)/計(jì)數(shù)器0
}

/*--顯示固定漢字:年月日 ,星期,時(shí)分秒*/
void Display()
{
        left();//左半屏顯示
        Display_Char(0,0,Digits+2*16);//顯示2
        Display_Char(0,8,Digits);//顯示0
        /*--顯示固定漢字:年月日 ,星期,時(shí)分秒*/
        Display_Word(0,32,Date_Time_Words+0*32);        //"年"字的顯示
        right();//右半屏顯示
        Display_Word(0,64,Date_Time_Words+1*32);        //"月"字的顯示
        Display_Word(0,96,Date_Time_Words+2*32);        //"日"字的顯示
    left();//左半屏顯示
    Display_Word(2,32,Date_Time_Words+5*32);    //"時(shí)"字的顯示
        right();//右半屏顯示
        Display_Word(2,64,Date_Time_Words+6*32);    //"分"字的顯示
        Display_Word(2,96,Date_Time_Words+7*32);    //"秒"字的顯示,秒顯示在右半屏
        left();//左半屏顯示
        Display_Word(4,32,Date_Time_Words+3*32);     //"星"字的顯示
        Display_Word(4,48,Date_Time_Words+4*32);    //"期"字的顯示
        left();//左半屏顯示
    Display_Word(6,0,Templt+0*32);    //"溫"字的顯示
        Display_Word(6,16,Templt+1*32);    //"度"字的顯示
        Display_Word(6,32,Templt+2*32);    //":"字的顯示
        right();//右半屏顯示
        Display_Word(6,80,Templt+3*32);     //"℃"字的顯示
}


void delayms(uint xms)
{
  uint y;
  while(xms--)for(y=110;y>0;y--);
}
//us級(jí)延時(shí)函數(shù)
void Delayus(uchar xus)//晶振為12MHz,延時(shí)時(shí)間為2i+5 us
{
        while(--xus);
}

//初始化DS18B20函數(shù)
bit Init_DS18B20(void)
{
        bit x;
        DQ=1;
        DQ=0;
        Delayus(250);
        DQ=1;
        Delayus(20);
        if(!DQ) x=0;
        else x=1;
        Delayus(250);
        DQ=1;
        return x;
}

//讀DS18B20函數(shù)
uchar Read_DS18B20(void)
{
        uchar i=0,Dat=0;
        for(i=0;i<8;i++)
        {
                DQ=1;
                DQ=0;
                Dat>>=1;
                DQ=1;
                if(DQ) Dat |= 0x80;
                DQ=1;
                Delayus(30);
        }
        return Dat;
}


//寫(xiě)DS18B20函數(shù)
void Write_DS18B20(uchar Dat)
{
        uchar i=0;
        for(i=0;i<8;i++)//循環(huán)8次,寫(xiě)入一個(gè)字節(jié)
        {
                DQ=1;//未發(fā)送前的狀態(tài)
                Dat >>= 1;//將要傳送的最低位放入CY
                DQ=0;//將總線(xiàn)拉低,產(chǎn)生寫(xiě)時(shí)序
                DQ=CY;//將要傳送的位狀態(tài)送到總線(xiàn)上
                Delayus(30);//延時(shí)50us,即保持總線(xiàn)狀態(tài),待DS18B20采樣
                DQ=1;//恢復(fù)期,總線(xiàn)置1
        }
}

//取溫度函數(shù)
void GetTemp(void)//獲取溫度函數(shù)
{
        uchar a=0,b=0;
        TR0=0;//關(guān)閉定時(shí)器,防止定時(shí)器中斷干擾DS18B20
        Init_DS18B20();
        Write_DS18B20(0xcc);//跳過(guò)ROM
        Write_DS18B20(0x44);//開(kāi)啟溫度轉(zhuǎn)換
        Init_DS18B20();
        Write_DS18B20(0xcc);//跳過(guò)ROM
        Write_DS18B20(0xbe);//讀暫存器
        a=Read_DS18B20();//讀取高速暫存字節(jié)0,溫度低8位
        b=Read_DS18B20();//讀取高速暫存字節(jié)1,溫度高8位
        TR0=1;//完成DS18B20讀取后打開(kāi)定時(shí)器
        Temp=b;
        Temp<<=8;
        Temp=Temp|a;//將高、低位溫度編碼合在一起
        if(b>=8)//判斷溫度值是否為負(fù),如果溫度高字節(jié)大于等于8說(shuō)明溫度值為負(fù)
        {
                Temp=~Temp+1;//將補(bǔ)碼轉(zhuǎn)換成原碼
                Temp_Flag=1;//溫度標(biāo)志為1,表示溫度為負(fù)
        }
        else
        {
                Temp_Flag=0;//溫度標(biāo)志為0,表示溫度為正
        }
        Temp1=Temp*0.0625*10;//將溫度編碼轉(zhuǎn)換成溫度值  放大10倍  加0.5是為了四舍五入
        TR0=1;
}

void keyscan()        //鍵盤(pán)掃描函數(shù)
{
   if(s1==0)
           {
             delayms(5);
                 if(s1==0)
                   {
                     while(!s1);
                         s1num++;
                         if(s1num==1)
                           {
                              flag_year=1;
                                 //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                 //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                 tempa=(Time_Buffer[6])/10*16+(Time_Buffer[6])%10;//年數(shù)據(jù)寫(xiě)入DS1302
                                 Write_1302(0x8e,0x00);
                                 Write_1302(0x8c,tempa);//改寫(xiě)年
                                 Write_1302(0x8e,0x80);
                           }
                         if(s1num==2)
                            {
                                  flag_moon=1;
                                 //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                 //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[4])/10*16+(Time_Buffer[4])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x88,tempa);//改寫(xiě)月
                                  Write_1302(0x8e,0x80);
                                }
                         if(s1num==3)
                            {
                                  flag_day=1;
                                  //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                  //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[3])/10*16+(Time_Buffer[3])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x86,tempa);//改寫(xiě)日
                                  Write_1302(0x8e,0x80);
                                }
                         if(s1num==4)
                           {
                              flag_hour=1;
                                  //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                  //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[2])/10*16+(Time_Buffer[2])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x84,tempa);//改寫(xiě)時(shí)
                                  Write_1302(0x8e,0x80);
                           }
                         if(s1num==5)
                           {
                              flag_min=1;
                                  //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                  //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[1])/10*16+(Time_Buffer[1])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x82,tempa);//改寫(xiě)分
                                  Write_1302(0x8e,0x80);
                           }
                        if(s1num==6)
                           {
                              flag_sec=1;
                                  //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                  //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[0])/10*16+(Time_Buffer[0])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x80,0x80|tempa);//改寫(xiě)秒
                                  Write_1302(0x8e,0x80);
                           }
                        if(s1num==7)
                           {
                              flag_week=1;
                                  //write_1602com(er+0x09); //設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo)
                  //write_1602com(0x0f);    //設(shè)置光標(biāo)為閃爍
                  tempa=(Time_Buffer[5])/10*16+(Time_Buffer[5])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                  Write_1302(0x8e,0x00);
                                  Write_1302(0x8a,tempa);//改寫(xiě)星期
                                  Write_1302(0x8e,0x80);
                           }
                        if(s1num==8)
                           {
                             s1num=0;
                                 flag_year=0;
                                 flag_moon=0;
                                 flag_day=0;
                                 flag_hour=0;
                                 flag_min=0;
                                 flag_sec=0;
                                 flag_week=0;
                                 tempa=(Time_Buffer[0])/10*16+(Time_Buffer[0])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                 Write_1302(0x8e,0x00);
                                 Write_1302(0x80,0x7f&tempa);//改寫(xiě)秒
                                 Write_1302(0x8e,0x80);
                           }
                   }
           }
}

void time_adj()               //走時(shí)時(shí)間調(diào)整函數(shù)
{
   if(s1num!=0)
     {
           tempa=(Time_Buffer[0])/10*16+(Time_Buffer[0])%10;
           Write_1302(0x8e,0x00);
           Write_1302(0x80,0x80|tempa);//改寫(xiě)秒
           Write_1302(0x8e,0x80);
           if(s2==0)
             {
                   delayms(5);
                   if(s2==0)
                     {
                           while(!s2);
                           switch(s1num)
                             {
                                   case 1:
                                          Time_Buffer[6]++;
                                                  if(Time_Buffer[6]==100)
                                                    Time_Buffer[6]=0;
                                                  tempa=(Time_Buffer[6])/10*16+(Time_Buffer[6])%10;
                                                  Write_1302(0x8e,0x00);
                                          Write_1302(0x8c,tempa);//改寫(xiě)年
                                          Write_1302(0x8e,0x80);
                                                  break;
                                          
                                   case 2:
                                          Time_Buffer[4]++;
                                                  if(Time_Buffer[4]==13)
                                                    Time_Buffer[4]=0;
                                                  tempa=(Time_Buffer[4])/10*16+(Time_Buffer[4])%10;
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x88,tempa);//改寫(xiě)月
                                          Write_1302(0x8e,0x80);
                                                  break;
                                   case 3:
                                          Time_Buffer[3]++;
                                                  if(Time_Buffer[3]==30)
                                                    Time_Buffer[3]=0;
                                                  tempa=(Time_Buffer[3])/10*16+(Time_Buffer[3])%10;
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x86,tempa);//改寫(xiě)日
                                          Write_1302(0x8e,0x80);
                                                  break;
                                   case 4:
                                          Time_Buffer[2]++;
                                                  if(Time_Buffer[2]==24)
                                                    Time_Buffer[2]=0;
                                                  tempa=(Time_Buffer[2])/10*16+(Time_Buffer[2])%10;
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x84,tempa);//改寫(xiě)時(shí)
                                          Write_1302(0x8e,0x80);
                                                  break;
                                          
                                   case 5:
                                          Time_Buffer[1]++;
                                                  if(Time_Buffer[1]==60)
                                                    Time_Buffer[1]=0;
                                                  tempa=(Time_Buffer[1])/10*16+(Time_Buffer[1])%10;
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x82,tempa);//改寫(xiě)分
                                          Write_1302(0x8e,0x80);
                                                  break;
                                   case 6:
                                          Time_Buffer[0]++;
                                                  if(Time_Buffer[0]==60)
                                                    Time_Buffer[0]=0;
                                                  tempa=(Time_Buffer[0])/10*16+(Time_Buffer[0])%10;
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x80,0x80|tempa);//改寫(xiě)秒
                                          Write_1302(0x8e,0x80);
                                                  break;
                                   case 7:
                                          Time_Buffer[5]++;
                                                  if(Time_Buffer[5]==8)
                                                    Time_Buffer[5]=1;
                                                  tempa=(Time_Buffer[5])/10*16+(Time_Buffer[5])%10;//秒數(shù)據(jù)寫(xiě)入DS1302
                                          Write_1302(0x8e,0x00);
                                          Write_1302(0x8a,tempa);//改寫(xiě)星期
                                          Write_1302(0x8e,0x80);
                                                  break;
                                 }
                         }
                 }
           if(s3==0)
             {
                   delayms(5);
                   if(s3==0)
                     {
                           while(!s3);
                           switch(s1num)
                             {
                                   case 1:
                                          Time_Buffer[6]--;
                                                  if(Time_Buffer[6]==0)
                                                    Time_Buffer[6]=99;
                                                  break;
                                          
                                   case 2:
                                          Time_Buffer[4]--;
                                                  if(Time_Buffer[4]==0)
                                                    Time_Buffer[4]=12;
                                                  break;
                                   case 3:
                                          Time_Buffer[3]++;
                                                  if(Time_Buffer[3]==0)
                                                    Time_Buffer[3]=30;
                                                  break;
                                   case 4:
                                          Time_Buffer[2]--;
                                                  if(Time_Buffer[2]==0)
                                                    Time_Buffer[2]=23;
                                                  break;
                                          
                                   case 5:
                                          Time_Buffer[1]--;
                                                  if(Time_Buffer[1]==0)
                                                    Time_Buffer[1]=59;
                                                  break;
                                   case 6:
                                          Time_Buffer[0]--;
                                                  if(Time_Buffer[0]==0)
                                                    Time_Buffer[0]=59;
                                                  break;
                                   case 7:
                                          Time_Buffer[5]--;
                                                  if(Time_Buffer[5]==0)
                                                    Time_Buffer[5]=7;
                                                  break;
                                 }
                         }
                 }
         }
}

/*--主程序--*/
void main()
{
       
        LCD_initialize();    //LCD初始化
        Display();           //固定顯示的漢字
    Time0_initialize();  //中斷初始化,在中斷中顯示刷新的時(shí)間
        while(1)
                {
                  Get_Time();    //讀取并刷新時(shí)間
                  GetTemp();
                  keyscan();
              time_adj();
                  delayms(300);
                }
}
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
ID:654028 發(fā)表于 2020-8-12 09:25 | 顯示全部樓層
讀取數(shù)據(jù)和定時(shí)的時(shí)間對(duì)比,相同則打開(kāi)蜂鳴器,過(guò)一定時(shí)間自動(dòng)關(guān)閉或者按鍵關(guān)閉。我只能想到這個(gè)辦法。畢竟我也是菜鳥(niǎo)
回復(fù)

使用道具 舉報(bào)

ID:810978 發(fā)表于 2020-8-12 10:34 | 顯示全部樓層
設(shè)一個(gè)變量作為定時(shí)的時(shí)間,當(dāng)時(shí)鐘時(shí)間與它相同時(shí)啟動(dòng)蜂鳴器,最基礎(chǔ)的方法了吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表