<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 點陣萬年歷(帶時間、年月日星期調(diào)整及鬧鐘功能)C程序

          點陣萬年歷(帶時間、年月日星期調(diào)整及鬧鐘功能)C程序

          作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏

          if(f!=0)//如果標(biāo)志位不為0,則執(zhí)行以下內(nèi)容-------調(diào)整日
          {
          xianriyue(yue,ri);
          if(key1==0)//加日部分
          {
          delay(10);
          if(key1==0)
          {
          xianriyue(yue,ri);
          ri++;
          if(ri==32)
          ri=1;
          write1302(0x8e,0x00);//去掉保護(hù)
          write1302(0x86,((ri/10)<<4)|(ri%10));//日數(shù)據(jù)寫入
          write1302(0x8e,0x80);//打開保護(hù)
          readvalue=read1302(0x87);
          ri=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);
          while(!key1);
          }
          }
          if(key2==0)//減日部分
          {
          delay(10);
          if(key2==0)
          {
          xianriyue(yue,ri);
          ri--;
          if(ri==(1-1))
          ri=31;
          write1302(0x8e,0x00);//去掉保護(hù)
          write1302(0x86,((ri/10)<<4)|(ri%10));//日數(shù)據(jù)寫入
          write1302(0x8e,0x80);//打開保護(hù)
          readvalue=read1302(0x87);
          ri=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);
          while(!key2);
          }

          }
          }
          if(g!=0)//如果標(biāo)志位不為0,則執(zhí)行以下內(nèi)容-----星期調(diào)整部分
          {
          xi(xin);
          if(key1==0)//星期加部分
          {
          delay(10);
          if(key1==0)
          {
          xi(xin);
          xin++;//將星期+1
          if(xin==8)//如果星期到了8就清它清1
          xin=1;//清1
          write1302(0x8e,0x00);//去掉保護(hù)
          write1302(0x8a,((xin/10)<<4)|(xin%10));//顯示星期天
          write1302(0x8e,0x80);//打開保護(hù)
          readvalue=read1302(0x8b);//讀星期
          xin=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//將星期值還原
          while(!key1);
          }
          }
          if(key2==0)//星期減部分
          {
          delay(10);
          if(key2==0)
          {
          xi(xin);
          xin--;//減1
          if(xin==(1-1))//如果到了(1-1)就給它7,因為星期只1---7
          xin=7;//將它給7
          write1302(0x8e,0x00);//去掉保護(hù)
          write1302(0x8a,((xin/10)<<4)|(xin%10));//顯示星期天
          write1302(0x8e,0x80);//打開保護(hù)
          readvalue=read1302(0x8b);
          xin=((readvalue&0xf0)>>4)*10+(readvalue&0x0f);//讀星期值
          while(!key2);
          }

          }
          }
          if(h!=0)////如果標(biāo)志位不為0,則執(zhí)行以下內(nèi)容------------以下是鬧鐘小時調(diào)整部分
          {
          xianniao(shin,fenn,2);//調(diào)整鬧鐘小時與分鐘顯示子程序
          if(key1==0)//鬧鐘小時加處理
          {
          delay(10);
          if(key1==0)
          {
          xianniao(shin,fenn,2);
          shin++;//將星期+1
          if(shin==24)//如果星期到了8就清它清1
          shin=0;//清1
          while(!key1);
          }
          }
          if(key2==0)//鬧鐘小時減處理
          {
          delay(10);
          if(key2==0)
          {
          xianniao(shin,fenn,2);
          shin--;
          if(shin==(0-1))
          shin=23;
          while(!key2);
          }

          }
          }
          if(i!=0)//如果標(biāo)志位不為0,則執(zhí)行以下內(nèi)容----------鬧鐘分鐘調(diào)整
          {
          xianniao(shin,fenn,2);
          if(key1==0)//鬧鐘分鐘加處理
          {
          delay(10);
          if(key1==0)
          {
          xianniao(shin,fenn,2);
          fenn++;//將星期+1
          if(fenn==60)//如果星期到了8就清它清1
          fenn=0;//清1
          while(!key1);
          }
          }
          if(key2==0)//鬧鐘分鐘減處理
          {
          delay(10);
          if(key2==0)
          {
          xianniao(shin,fenn,2);
          fenn--;
          if(fenn==(0-1))
          fenn=59;
          while(!key2);
          }

          }
          }
          }
          /******************************************************/
          /*******************響鬧子程序*************************/
          /******************************************************/
          void xiangniao()
          {
          bit clock;//定義一個標(biāo)志位
          if(clockbiao==0)//鬧鐘總標(biāo)志為0時才可以執(zhí)行鬧鐘處理程序
          {
          if(clock==0)//如果標(biāo)志位為0,就執(zhí)行下面內(nèi)容
          {
          if(shin==shi)//主時間小時與鬧鐘小時相等嗎?
          {
          if(fenn==fen)//主時間分鐘與鬧鐘分鐘相等嗎?
          bbtsoud();//相等了就執(zhí)行鬧鐘響一聲子程序,即小時與分鐘都相等了就執(zhí)行鬧鈴
          }
          }
          if(fenn!=fen)//如果分鐘不等
          clock=0;//將標(biāo)志位清0,以便下次再響鈴
          if(key1==0)//判斷加"+"按鍵有沒有被按下,如果按下了,就讓鬧鈴?fù)V鬼?br />{
          delay(10);
          if(key1==0)
          {
          clock=1;//將標(biāo)志位清0,讓鬧鐘在響鈴時立馬停下來
          while(!key1);
          }
          }
          }
          if(key2==0)//如果減按鍵按下了,則則關(guān)閉鬧鈴全部功能
          {
          delay(10);
          if(key2==0)//如果加按鍵按下了,則全部復(fù)位
          {
          clockbiao=~clockbiao;
          bbtsoud();//蜂鳴器響一聲子程序
          while(!key2);//按鍵釋放
          }
          }
          }

          本文引用地址:http://www.ex-cimer.com/article/201611/323389.htm

          /******************************************************/
          /******************************************************/
          /**********主程序(包括主顯示/鬧鐘/按鍵處理)************/
          /******************************************************/
          /******************************************************/
          void main()
          {
          init1302();
          TMOD=0X11;//寄存器工作方式
          EA=1;//開總中斷
          TR0=1;//開定時器
          ET0=1;//開定時器中斷
          TH0=(65536-20000)/256;//賦值給高位
          TL0=(65536-20000)%256;//賦值給低位
          TR1=1;//開定時器
          ET1=1;//開定時器中斷
          TH1=(65536-50000)/256;//賦值給高位
          TL1=(65536-50000)%256;//賦值給低位
          while(1)
          {
          if(flag==0)//如果標(biāo)志位為0,就讓它執(zhí)行主程序,不讓它讀按鍵處理部分,省資源
          {
          value();//調(diào)用DS1302時間轉(zhuǎn)換子程序
          xianzhu(nian,yue,ri,xin);//調(diào)用主顯示
          xiangniao();//調(diào)用響鬧子程序
          }
          skey();//調(diào)用按鍵處理子程序
          }
          }
          /******************************************************/
          /*******************定時中斷0子程序********************/
          /******************************************************/
          void zhong() interrupt 3
          {
          uchar ding;
          TH1=(65536-50000)/256;
          TL1=(65536-50000)%256;
          ding++;
          if(ding>=10)//模擬普通鬧鐘小數(shù)閃爍處理部分
          {
          ding=0;
          dian=~dian;//0.5秒閃一次,它不參與具體計時,具體計時只是DS1302內(nèi)部
          }
          }
          /******************************************************/
          /*******************定時中斷1子程序********************/
          /******************************************************/
          void zhong1() interrupt 1//T1中斷服務(wù)程序
          {
          uchar ding1,ding2;
          TH0=(65536-10000)/256;//賦值給高位
          TL0=(65536-10000)%256;//賦值給低位
          ding1++;
          ding2++;
          if(ding2>=50)//進(jìn)入調(diào)整模式時閃爍標(biāo)志位處理
          {
          ding2=0;
          flag1=~flag1;
          }
          switch(yin)//以下是主功能按鍵處理子程序
          {
          case 0:if(ding1>=250)//長按功能按鍵進(jìn)入調(diào)整模式,否則怕誤按-------------進(jìn)入查看年月日功能
          {
          ding1=0;//將定時器清0
          if(key==0)
          {
          delay(100);
          if(key==0)
          {
          yin++;//將標(biāo)志位加1
          lk=8;//些句是調(diào)用"年月日星期"顯示的關(guān)鍵一步,即打開下屏顯示
          shr=1;//將標(biāo)志位置1
          bbtsoud();//蜂鳴器響一聲
          while(!key);//按鍵釋放
          }
          }
          }
          break;
          case 1:if(key==0)//-----------------------------進(jìn)入調(diào)整模式閃爍功能
          {
          delay(100);
          if(key==0)
          {
          yin++;//以便進(jìn)入一個功能
          a=1;//標(biāo)志位置1,以便進(jìn)入按鍵功能
          shr=0;//將上次標(biāo)志位清0,以免與現(xiàn)在的鍵值產(chǎn)生沖突
          lk=0;//將下半屏清掉
          flag=1;//將主程序中的標(biāo)志位置1
          bbtsoud();//蜂鳴器響一聲
          TR1=0;//將定時器關(guān)掉
          dian=0;//將主時間中的兩位小數(shù)點標(biāo)志位打開
          write1302(0x8e,0x00);//去掉DS1302保護(hù)
          write1302(0x80,0x80);//當(dāng)它等于0X80時,讓DS1302時間停下來,以便調(diào)整
          write1302(0x8e,0x80);//讓DS1302保護(hù)
          while(!key);
          }
          }
          break;
          case 2: if(key==0)//-----------------------------進(jìn)入主時間小時調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;//以下便進(jìn)行下一功能
          b=1;//標(biāo)志位置1
          a=0;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 3: if(key==0)//---------------------------進(jìn)入主時間分鐘時調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          b=0;
          c=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 4: if(key==0)//---------------------------------進(jìn)入日期年調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          c=0;
          d=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 5:if(key==0)//-----------------------------------進(jìn)入日期月調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          d=0;
          e=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 6: if(key==0)//-----------------------------------進(jìn)入日期日調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          e=0;
          f=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 7:if(key==0)//---------------------------------進(jìn)入日期星期調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          f=0;
          g=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 8: if(key==0)//------------------------------進(jìn)入鬧鐘小時調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          g=0;
          h=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 9:if(key==0)//------------------------------進(jìn)入鬧鐘分鐘調(diào)整功能
          {
          delay(100);
          if(key==0)
          {
          yin++;
          h=0;
          i=1;
          bbtsoud();
          while(!key);
          }
          }
          break;
          case 10:if(key==0)//----------------------將系統(tǒng)全部復(fù)位,即回到主程序
          {
          delay(100);
          if(key==0)
          {
          yin=0;//總計數(shù)器復(fù)位為0
          i=0;//上次功能標(biāo)志位清0
          flag=0;//主程序標(biāo)志位清0
          TR1=1;//打開定時器
          write1302(0x8e,0x00);//去掉DS1302保護(hù)
          write1302(0x80,0x00);//當(dāng)它等于0X00時,讓時間就開始走 即0X00就讓時間開始走,0X80讓時停
          write1302(0x8e,0x80);//讓時間停下來
          bbtsoud();
          while(!key);
          }
          }
          break;
          }
          }


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 點陣萬年歷STC12C5204A

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();