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

標題: 萬年歷制作過程中鬧鐘功能無法實現 [打印本頁]

作者: wasj    時間: 2017-11-30 12:58
標題: 萬年歷制作過程中鬧鐘功能無法實現
本帖最后由 wasj 于 2017-11-30 13:03 編輯

本人剛開始學習單片機,根據郭天祥的視頻學習制作萬年歷,結果在設置鬧鐘時出現問題,到達設定時間時蜂鳴器沒有反應,不知道哪里出了問題,希望各位前輩給予解答。還有就是,如果要添加溫度的話,要如何添加?程序:#include<reg52.h>#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit rs=P3^5;
sbit lcden=P3^4;
sbit s1=P1^0;//按鍵
sbit s2=P1^1;//+1
sbit s3=P1^2;//-1
sbit s4=P1^3;//鬧鐘
sbit rd=P3^7;
sbit dscs=P1^4;
sbit dsas=P1^5;
sbit dsrw=P1^6;
sbit dsds=P1^7;
sbit dsirq=P3^3;
sbit beep=P2^3;//蜂鳴器
uchar count,s1num;
uchar flag,flag1;//暫停與運行
char miao,shi,fen;
uchar ashi,afen,amiao;
char nian,yue,ri,week;
uchar code table[]=" 2017-11-29 WED";
uchar code table1[]="      :  :  ";
void delay(uint z)//延時
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)//1602
{
        rs=0;
        lcden=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;       
}

void write_date(uchar date)//1602
{
        rs=1;
        lcden=0;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;       
}
void di();
void set_time();
void write_ds(uchar add,uchar date);
uchar read_ds(uchar add);
void set_alarm(uchar ashi,uchar afen,uchar amiao);
void init()//初始化
{
        uchar num;
        EA=1;EX0=1;IT0=1;
        dula=0;
        wela=0;
        lcden=0;
        set_time();
        set_alarm(19,11,00);//輸入鬧鐘時間
        write_ds(0x0a,0x20);//打開振蕩器(打開DS12887時鐘,時間開始動)
        write_ds(0x0b,0x26);//定時器開啟
        read_ds(0x0c);
//        fen=59;
//        miao=53;
//        shi=23;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);//清零
        write_com(0x80);//第一行
        for(num=0;num<15;num++)//NUM?table????????
                {
                        write_date(table[num]);
                        delay(5);
                }
        write_com(0x80+0x40);//第二行
        for(num=0;num<12;num++)
                {
                        write_date(table1[num]);
                        delay(5);
                }
/*        TMOD=0x01;//???   時鐘延時
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;*/
}

void write_sfm(uchar add,uchar date)//?????????時分秒
{
        uchar shi,ge;
        shi=date/10;
        ge=date%10;
        write_com(0x80+0x40+add);//??
        write_date(0x30+shi);
        write_date(0x30+ge);
}
void write_nyr(uchar add,uchar date)//?????????年月日
{
        uchar shi,ge;
        shi=date/10;
        ge=date%10;
        write_com(0x80+add);//??
        write_date(0x30+shi);
        write_date(0x30+ge);
}
void write_week(char we)  //1602液晶刷新星期函數
        {   write_com(0x80+12);  
                switch(we)  
        {   case 1:  write_date('M');delay(5);      write_date('O');delay(5);      write_date('N');      break;   
        case 2:  write_date('T');delay(5);      write_date('U');delay(5);      write_date('E');      break;   
        case 3:  write_date('W');delay(5);      write_date('E');delay(5);      write_date('D');      break;   
        case 4:  write_date('T');delay(5);      write_date('H');delay(5);      write_date('U');      break;   
        case 5:  write_date('F');delay(5);      write_date('R');delay(5);      write_date('I');      break;   
        case 6:  write_date('S');delay(5);      write_date('A');delay(5);      write_date('T');      break;   
        case 7:  write_date('S');delay(5);      write_date('U');delay(5);      write_date('N');      break;        } }
void keyscan()
{
        rd=0;//
        if(flag1==1){//按任意鍵停止
        if(s2==0)
        {
     delay(10);
                 if(s2==0)
                 {while(!s2);
        flag1=0;}
        }
        if(s3==0)
        {
     delay(10);
                 if(s3==0)
                 {while(!s3);
        flag1=0;}
        }}
        if(s1==0)//?????       
        {
                delay(5);//??
                if(s1==0)//?????0
                {        s1num++;
                        flag=1;flag1=0;
                        while(!s1);
                        if(s1num==1)//???
                        {
                                TR0=0;//????
                                write_com(0x80+0x40+10);//????
                                write_com(0x0f);//????
                        }
        }
                        if(s1num==2)//???
                        {
                                write_com(0x80+0x40+7);//?分
                        }
                        if(s1num==3)
                        {
                                write_com(0x80+0x40+4);//?時
                        }
                        if(s1num==4)
                        {
                                write_com(0x80+12);//?周
                        }
                        if(s1num==5)
                        {
                                write_com(0x80+9);//?日
                        }
                        if(s1num==6)
                        {
                                write_com(0x80+6);//?月
                        }
                        if(s1num==7)
                        {
                                write_com(0x80+3);//?年
                        }
                        if(s1num==8)
                        {
                                s1num=0;//??歸零
                                write_com(0x0c);//??????
                                flag=0;write_ds(0,miao);
                                write_ds(2,fen);
                                write_ds(4,shi);
                                write_ds(6,ri);
                                write_ds(7,week);
                                write_ds(8,yue);
                                write_ds(9,nian);
                                //TR0=1;
                        }

                               
                }
                if(s1num!=0)
                {
                        if(s2==0)
                        {
                                delay(5);
                                if(s2==0)//+1
                                {
                                        while(!s2);//????
                                        if(s1num==1)
                                        {
                                                miao++;
                                                if(miao==60)
                                                        miao=0;
                                                write_sfm(10,miao);
                                                write_com(0x80+0x40+10);
                                        }
                                        if(s1num==2)
                                        {
                                                fen++;
                                                if(fen==60)
                                                        fen=0;
                                                write_sfm(7,fen);
                                                write_com(0x80+0x40+7);
                                        }
                                        if(s1num==3)
                                        {
                                                shi++;
                                                if(shi==24)
                                                        shi=0;
                                                write_sfm(4,shi);
                                                write_com(0x80+0x40+4);
                                        }
                                        if(s1num==4)
                                        {
                                                week++;
                                                if(week==8)
                                                        week=1;
                                                write_week(week);
                                                write_com(0x80+12);
                                        }
                                        if(s1num==5)
                                        {
                                                ri++;
                                                if(ri==31)
                                                        ri=1;
                                                write_nyr(9,ri);
                                                write_com(0x80+9);
                                        }
                                        if(s1num==6)
                                        {
                                                yue++;
                                                if(yue==13)
                                                        yue=1;
                                                write_nyr(6,yue);
                                                write_com(0x80+6);
                                        }
                                        if(s1num==7)
                                        {
                                                nian++;
                                                if(nian==100)
                                                        nian=0;
                                                write_nyr(3,nian);
                                                write_com(0x80+3);
                                        }
                                }
                        }
                        if(s3==0) //-1
                        {   delay(1);   if(s3==0)   
          {    while(s3==0);        switch(s1num)   
          { case 1:  miao--; if(miao==-1) miao=59;   write_sfm(10,miao);    write_com(0x80+0x40+10) ;        break;      
          case 2:  fen--;    if(fen==-1)  fen=59;    write_sfm(7,fen);     write_com(0x80+0x40+7) ;        break;     
          case 3:  shi--;    if(shi==-1)  shi=23;    write_sfm(4,shi);     write_com(0x80+0x40+4) ;        break;      
          case 4:  week--;   if(week==0)  week=7;    write_week(week);     write_com(0x80+12) ;        break;     
          case 5:  ri--;    if(ri==0)   ri=31;    write_nyr(9,ri);     write_com(0x80+9) ;        break;      
          case 6:  yue--;  if(yue==0) yue=12;  write_nyr(6,yue);   write_com(0x80+6) ;        break;      
          case 7:  nian--;   if(nian==-1) nian=99;   write_nyr(3,nian);    write_com(0x80+3) ;        break;     }   }  }  }   
                }

void write_ds(uchar add,uchar date)//DS12887  地址,數據
{
        dscs=0;
        dsas=1;
        dsds=1;
        dsrw=1;
        P0=add;
        dsas=0;
        dsrw=0;
        P0=date;
        dsrw=1;
        dsas=1;
        dscs=1;                               
}

uchar read_ds(uchar add)//DS12887   地址,數據
{
        uchar ds_date;
       
        dsas=1;
        dsds=1;
        dsrw=1;
        dscs=0;
        P0=add;
        dsas=0;
        dsds=0;
        P0=0xff;
        ds_date=P0;
        dsds=1;
        dsas=1;
        dscs=1;
        return ds_date;       
}
void set_time()//寫入時間
{
        //write_ds(0,00);//秒
        write_ds(4,19);//分
        write_ds(2,10);//時
        write_ds(9,2017);//年
        write_ds(8,11);//月
        write_ds(6,29);//日
        write_ds(7,1);  //星期       
}
void set_alarm(uchar ashi,uchar afen,uchar amiao)//鬧鐘時間
{
        write_ds(1,amiao);
        write_ds(3,afen);
        write_ds(5,ashi);
}
void di()
{        uint i=0;
        while(i==50)
        {beep=0;
        delay(50);
        beep=1;
        delay(100);
        beep=0;
        delay(50);
        beep=1;i++;}
}
void main()
{
        init();//???
        /*while(1){    //蜂鳴器調試
        di();}*/
        di();
        while(1)
        {
                keyscan();
                if(flag1==1)
                        di();
                if(flag==0)
                {
                miao=read_ds(0);
                fen=read_ds(2);
                shi=read_ds(4);
                /*ri=read_ds(6);
                yue=read_ds(8);
                nian=read_ds(9);
                week=read_ds(7);*/
                write_sfm(10,miao);
                write_sfm(7,fen);
                write_sfm(4,shi);
          /*write_nyr(3,ri);
                write_nyr(6,yue);
                write_nyr(9,nian);
                write_week(week);*/
        }}
//        while(1);
}

/*void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        count++;
  if(count==18)
                {
                        count=0;
                        miao++;
                        if(miao==60)
                        {
                                miao=0;
                                fen++;
                                if(fen==60)
                                {
                                        fen=0;
                                        shi++;
                                        if(shi==24)
                                        {
                                                shi=0;
                                        }
                                        write_sfm(4,shi);//?????4??
                                }
                                write_sfm(7,fen);
                        }
                        write_sfm(10,miao);
                       
                }       
}*/
void exter () interrupt 0
{while(1){
        uchar c;
   //beep=0;
         flag1=1;
         c=read_ds(0x0c);
}}



圖片1.png (99.68 KB, 下載次數: 37)

圖片1.png





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 在线观看国产视频 | 天天色影视综合 | 亚洲免费视频播放 | 欧产日产国产精品视频 | 久久久一区二区三区 | 亚洲天堂av网 | 成人毛片视频免费 | 日韩欧美一区二区三区免费观看 | 亚洲精品久久久久久久久久久 | 日韩欧美一区二区三区四区 | 亚洲欧美视频一区二区 | 久久精品aaa | 国产91av视频 | 亚洲精品视频免费观看 | 91aiai| www.激情.com | 日韩欧美国产精品 | 日韩不卡一二区 | hdfreexxxx中国妞 | 日日摸天天添天天添破 | 国产精品一区二 | 亚洲精品一二区 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲高清视频一区二区 | 亚洲精品欧美 | 国产乱码精品一区二区三区中文 | 国产美女一区二区 | av中文在线观看 | 性生生活大片免费看视频 | 欧美一区免费 | 91九色porny首页最多播放 | 伊人久久综合 | 欧美一区 | 国产有码 | 欧美中文字幕在线观看 | 欧美亚洲综合久久 | 日韩黄色免费 | 日本激情视频中文字幕 | 国产综合视频 | 天天射天天干 | 福利一区二区在线 |