一、系統(tǒng)綜述: 該項(xiàng)設(shè)計(jì)的主要目的是設(shè)計(jì)一種數(shù)控穩(wěn)壓電源。它利用單片機(jī)STC89C51作為主控芯片,控制數(shù)字/模擬轉(zhuǎn)換器(TLC5615)的輸出電壓的大小,經(jīng)過(guò)運(yùn)算放大器(OPA2107)與IRF9Z24N構(gòu)成負(fù)反饋系統(tǒng),從而輸出恒定電壓。最后通過(guò)電位器分壓將輸出信號(hào)反饋到運(yùn)算放大器(OPA2107)上,使輸出準(zhǔn)確度可以調(diào)節(jié)。此設(shè)計(jì)通過(guò)鍵盤(pán)電路與單片機(jī)連接,讀入控制數(shù)據(jù),利用軟件進(jìn)行判斷,從而起到控制電源輸出的作用。通過(guò)LCD1602(或LED數(shù)碼管)顯示數(shù)控電源的輸出電壓,實(shí)現(xiàn)簡(jiǎn)單的人機(jī)對(duì)話。該項(xiàng)設(shè)計(jì)具有設(shè)計(jì)簡(jiǎn)單,控制靈活,調(diào)節(jié)方便,攜帶方便、成本低等優(yōu)勢(shì),具有較強(qiáng)的實(shí)用性。 總體電路圖(數(shù)碼管版) 要求有短路保護(hù)的才有對(duì)應(yīng)的電路,此圖為完整版及帶短路保護(hù)的。 總體電路圖(液晶版) 要求有短路保護(hù)的才有對(duì)應(yīng)的電路,此圖為完整版及帶短路保護(hù)的。 圖中采用網(wǎng)絡(luò)標(biāo)號(hào)的方式,標(biāo)號(hào)相同的代表有電氣連接! 二、原理講解: 供電部分: P2為接線柱,是整個(gè)系統(tǒng)的輸入電壓端口,整個(gè)數(shù)控電源有此輸入能量。D1、D2、D3、D4為四個(gè)二極管(in4007),起整流的作用,C6為濾波電容。整流濾波電路是使供電可以為交流,同時(shí)也可以用直流供電(交流供電不要超過(guò)20V,直流不要超過(guò)35V)。受電壓限制的主要是后級(jí)運(yùn)放耐壓、TL431耐壓以及7812的耐壓值。7812主要為保護(hù)7805,7805穩(wěn)出5V電壓共單片機(jī)供電使用。但是7805耐壓值是15V,所以前級(jí)要加7812保護(hù)7805。
晶振部分: C2、C3、Y1(12MHZ)與單片機(jī)端口構(gòu)成震蕩電路,為51單片機(jī)提供時(shí)鐘。 復(fù)位電路: RST連接單片機(jī)復(fù)位管腳,此電路及有上電復(fù)位功能,又有手動(dòng)復(fù)位功能。C1、R2構(gòu)成上電復(fù)位電路,上電瞬間C1導(dǎo)通,則RST為高電平,單片機(jī)將復(fù)位,電壓穩(wěn)定后C1儲(chǔ)存的電能通過(guò)R2對(duì)地釋放掉,單片機(jī)將正常運(yùn)行。同樣K2按下時(shí)RST為高電平,單片機(jī)復(fù)位,彈起來(lái)時(shí)RST為低電平,單片機(jī)正常運(yùn)行。
單片機(jī)部分: 單片機(jī)默認(rèn)選用STC89C51,同時(shí)兼容STC89C52、AT89S52、AT89S51、AT89C51等51單片機(jī)。 按鍵部分: 按鍵選用獨(dú)立按鍵,掃描時(shí)間短,使程序更簡(jiǎn)單且掃描時(shí)間更短,從而提高穩(wěn)定性。按鍵彈起時(shí)P20、P21、P22、P23為弱上拉狀態(tài),所以為高電平。按鍵按下時(shí)對(duì)應(yīng)的I/O口為低電平,可以被程序中的掃描函數(shù)檢測(cè)到。(寫(xiě)文檔時(shí)沒(méi)什么寫(xiě)的,可以在此講解自彈按鍵與自鎖按鍵區(qū)別和原理,在此朱老師省略。)
數(shù)碼管顯示部分: (寫(xiě)文檔時(shí),可以在此講解共陽(yáng)數(shù)碼管與共陰數(shù)碼管的區(qū)別和原理,在此朱老師省略。) 數(shù)碼管顯示采用四位一體共陽(yáng)數(shù)碼管,這樣使電路更為簡(jiǎn)單,只需四個(gè)8550三極管就可以將其驅(qū)動(dòng)。P24、P25、P26、P27分別作為數(shù)碼管的位選端,控制是否選通哪一位數(shù)碼管。采用PNP型三極管,低電平導(dǎo)通,高電平截止(寫(xiě)文檔時(shí)可以在此處講解8550三極管的參數(shù)等信息,朱老師在此省略)。R20、R30、R40、R50為三極管基極限流電阻,此電阻及能保護(hù)三極管又能保證三極管導(dǎo)通時(shí)處于完全導(dǎo)通狀態(tài)。R51為限流電阻,此電阻的大小直接決定數(shù)碼管的亮暗成都,在此選擇220歐姆、1/4色環(huán)電阻。數(shù)碼管的陰極端直接接單片機(jī)的P0口,而不需上拉電阻。STC89C51的單片機(jī)P0口為漏極開(kāi)路,所以作為輸出時(shí)必須接上拉電路,而作為輸入時(shí)相當(dāng)于數(shù)碼管作為上拉,所以不再需要上拉電阻,及簡(jiǎn)化了電路又節(jié)省了成本。 數(shù)模轉(zhuǎn)換部分:(此為數(shù)控電壓數(shù)控調(diào)壓關(guān)鍵所在) (寫(xiě)文檔時(shí)沒(méi)什么寫(xiě)的,可以在此講解TLC5615技術(shù)參數(shù)和原理,特別是轉(zhuǎn)換公式和數(shù)據(jù)協(xié)議,在此朱老師簡(jiǎn)單介紹。) 數(shù)模轉(zhuǎn)換采用德州儀器的TLC5615,此為一片10位串行單5V電源DAC,直接電壓輸出。單片機(jī)P33、P32、P34分別連接TLC5615的時(shí)鐘端、片選端、數(shù)據(jù)端即可控制它輸出想要的電壓。此時(shí)TLC5615的6腳及參考電壓輸入端需接入2.5V的參考電壓。根據(jù)公式可知,當(dāng)參考電壓為2.5V時(shí),TLC5615將最大輸出5V電壓。 TL5615(DAC)電壓計(jì)算公式
Vout為7腳輸出電壓,Vrefin為6腳參考電壓輸入端,N為單片機(jī)通過(guò)1、2、3管腳向TLC5615寫(xiě)入的數(shù)據(jù),1024是根據(jù)這是一片10位數(shù)模轉(zhuǎn)換而計(jì)算出來(lái)的(210=1024),最后乘以二是因?yàn)門(mén)LC5615內(nèi)部有2倍的增益放大器。 TLC5615內(nèi)部原理圖: TLC5615邏輯時(shí)序圖:
在給TLC輸入2.5V參考電壓的時(shí)候,我們用了TL431芯片。TL431是可控精密穩(wěn)壓源。它的輸出電壓用兩個(gè)電阻就可以任意的設(shè)置到從Verf(2.5V)到36V范圍內(nèi)的任何值。該器件的典型動(dòng)態(tài)阻抗為0.2Ω,在很多應(yīng)用中用它代替穩(wěn)壓二極管。 同時(shí)用OPA2107作為跟隨器,減小2.5V基準(zhǔn)電源的阻抗,再送入TLC5615 參考電壓端。 (寫(xiě)文檔時(shí),可以在此講解TL41技術(shù)參數(shù)OPA2107技術(shù)參數(shù)和原理和跟隨器電路原理)
MOS放大部分: 將上述TLC5615輸出的可調(diào)電壓送到誤差放大器(OPA2107)的反相端,通過(guò)PMOS管(F9Z24N)放大。同時(shí)在F9Z24N的輸出端用RW1(10K)電位器分壓,取一定比例的輸出電壓反饋到比較器正相端,構(gòu)成一個(gè)負(fù)反饋系統(tǒng)(PMOS是反相放大,所以是負(fù)反饋)以保證輸出電壓的穩(wěn)定。C5作為輸出濾波電容,濾掉輸出電壓紋波。根據(jù)反饋系統(tǒng)的穩(wěn)定原理計(jì)算出輸出電壓的公式,如下: 設(shè):Vo為輸出電壓,Vin為OPA2107的2腳輸入電壓,RWH為電位器上部分電阻,RWL為電位器下部分電阻,RW為電位器阻值。 Vo=Vin×(RW/RWL); (寫(xiě)文檔時(shí),可以在此講解F9Z24N技術(shù)參數(shù)) 過(guò)流檢測(cè)及短路保護(hù): P1為電源輸出端,R11為電流檢測(cè)電阻,此電阻將電流變換成電壓。再通過(guò)U4A(OPA2107)反相放大一定的倍數(shù)。最后通過(guò)U4B與2.5V標(biāo)準(zhǔn)電平比較,若電壓大于2.5V則輸出低電平,送給單片機(jī)。單片機(jī)則認(rèn)為過(guò)流就會(huì)控制TLC5615將輸出將為0V。這樣就起到了限流與短路保護(hù)的作用。 (寫(xiě)文檔時(shí),可以在此講解反相比例運(yùn)算電路的原理) 報(bào)警電路:  此電路可以由單片機(jī)控制三極管(8550)的通斷來(lái)控制蜂鳴器的報(bào)警。當(dāng)P36為高時(shí),三極管不高通,為低時(shí)三極管導(dǎo)通蜂鳴器響。當(dāng)過(guò)流或短路時(shí),單片機(jī)切斷輸出,同時(shí)蜂鳴器報(bào)名。
單片機(jī)源程序如下:
- <font color="rgb(0, 0, 0)">#include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar a,miao,shi,fen,ri,yue,nian,week,key1n,key4n,key3n;alarmflag,temp;
- char amiao,afen,ashi;
- bit flag=0;
- #define yh 0x80
- #define er 0x80+0x40
- sbit rw=P3^6;
- sbit rs=P3^5;
- sbit en=P3^4;
- sbit IO=P1^1;
- sbit RST=P1^2;
- sbit SCLK=P1^0;
- sbit ACC0=ACC^0;
- sbit ACC7=ACC^7;
- //sbit key5=P1^3;
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- sbit beep=P2^4;
- uchar code tab1[]={"20 - - "};
- uchar code tab2[]={" : : "};
- uchar code tab3[]={" alarm setting: "};
- uchar code tab4[]={"Now is the time!"};
- uchar code tab5[]={"Get up quickly! "};
- uchar code tab6[]={"HAPPY EVERY DAY!"};
- uchar cnt;
- void delay(uint xms)
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
- void write_1602com(uchar com)
- {
- rs=0;
- rw=0;
- P0=com;
- delay(1);
- en=1;
- delay(1);
- en=0;
- }
- void write_1602dat(uchar dat)
- {
- rs=1;
- rw=0;
- P0=dat;
- delay(1);
- en=1;
- delay(1);
- en=0;
- }
- void lcd_init()
- {
- write_1602com(0x38);
- write_1602com(0x08);
- write_1602com(0x0c);
- write_1602com(0x06);
- write_1602com(0x01);
- write_1602com(yh+1);
- for(a=0;a<14;a++)
- {
- delay(5);
- write_1602dat(tab1[a]);
- }
- write_1602com(er+2);
- for(a=0;a<8;a++)
- {
- delay(5);
- write_1602dat(tab2[a]);
- }
- }
- void write_byte(uchar dat)
- {
- ACC=dat;
- RST=1;
- for(a=8;a>0;a--)
- {
- IO=ACC0;
- SCLK=0;
- SCLK=1;
- ACC=ACC>>1;
- }
- }
- uchar read_byte()
- {
- RST=1;
- for(a=8;a>0;a--)
- {
- ACC7=IO;
- SCLK=1;
- SCLK=0;
- ACC=ACC>>1;
- }
- return(ACC);
- }
- void write_1302(uchar add,uchar dat)
- {
- RST=0;
- SCLK=0;
- RST=1;
- write_byte(add);
- write_byte(dat);
- SCLK=1;
- RST=0;
- }
- uchar read_1302(uchar add)
- {
- uchar temp;
- RST=0;
- SCLK=0;
- RST=1;
- write_byte(add);
- temp=read_byte();
- SCLK=1;
- RST=0;
- return(temp);
- }
- uchar BCD_Decimal(uchar bcd)
- {
- uchar Decimal;
- Decimal=bcd>>4;
- return(Decimal=Decimal*10+(bcd&=0x0f));
- }
- void ds1302_init()
- {
- RST=0;
- SCLK=0;
- write_1302(0x8e,0x00);
- write_1302(0x8e,0x80);
- }
- void write_sfm(uchar add,uchar dat)
- {
- uchar gw,sw;
- gw=dat%10;
- sw=dat/10;
- write_1602com(er+add);
- write_1602dat(0x30+sw);
- write_1602dat(0x30+gw);
- }
- void write_nyr(uchar add,uchar dat)
- {
- uchar gw,sw;
- gw=dat%10;
- sw=dat/10;
- write_1602com(yh+add);
- write_1602dat(0x30+sw);
- write_1602dat(0x30+gw);
- }
- void write_week(uchar week)
- {
- write_1602com(yh+0x0c);
- switch(week)
- {
- case 1:write_1602dat('M');write_1602dat('O');write_1602dat('N');break;
- case 2:write_1602dat('T');write_1602dat('U'); write_1602dat('E');break;
- case 3:write_1602dat('W');write_1602dat('E');write_1602dat('D');break;
- case 4:write_1602dat('T');write_1602dat('H');write_1602dat('U');break;
- case 5:write_1602dat('F');write_1602dat('R');write_1602dat('T');break;
- case 6:write_1602dat('S');write_1602dat('T');write_1602dat('A');break;
- case 7:write_1602dat('S');write_1602dat('U');write_1602dat('N');break;
- }
- }
- void settime()
- {
- if(key4n==0)
- {
- if(key1==0)
- {
- delay(9);
- if(key1==0)
- {
- beep=0;//蜂鳴器短響一聲
- delay(50);
- beep=1;
- alarmflag=0;
- key1n++;
- while(!key1);
- switch(key1n)
- {
- case 1:TR0=0;
- write_1602com(er+0x09);
- write_1602com(0x0f);
- temp=(miao)/10*16+(miao)%10;
- write_1302(0x8e,0x00);
- write_1302(0x80,0x80|temp);//miao
- write_1302(0x8e,0x80);
- break;
- case 2:write_1602com(er+6);
- break;
- case 3:write_1602com(er+3);
- break;
- case 4:write_1602com(yh+0x0e);
- break;
- case 5:write_1602com(yh+0x0a);
- break;
- case 6:write_1602com(yh+0x07);
- break;
- case 7:write_1602com(yh+0x04);
- break;
- case 8:key1n=0;
- write_1602com(0x0c);
- alarmflag=1;
- TR0=1;
- temp=(miao)/10*16+(miao)%10;
- write_1302(0x8e,0x00);
- write_1302(0x80,0x00|temp);
- write_1302(0x8e,0x80);
- break;
- }
- }
-
- }
- if(key1n!=0)
- {
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- beep=0;//蜂鳴器短響一聲
- delay(50);
- beep=1;
- while(!key2);
- switch(key1n)
- {
- case 1:miao++;
- if(miao==60)
- miao=0;
- write_sfm(0x08,miao);
- temp=(miao)/10*16+(miao)%10;
- write_1302(0x8e,0x00);
- write_1302(0x80,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+0x09);
- break;
- case 2:fen++;
- if(fen==60)
- fen=0;
- write_sfm(0x05,fen);
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+6);
- break;
- case 3:shi++;
- if(shi==24)
- shi=0;
- write_sfm(2,shi);
- temp=(shi)/10*16+(shi)%10;
- write_1302(0x8e,0x00);
- write_1302(0x84,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+3);
- break;
- case 4:week++;
- if(week==8)
- week=1;
- write_1602com(yh+0x0e);
- write_week(week);
- temp=(week)/10*16+(week)%10;
- write_1302(0x8e,0x00);
- write_1302(0x8a,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+0x0e);
- break;
- case 5:ri++;
- if(ri==32)
- ri=1;
- write_nyr(9,ri);
- temp=(ri)/10*16+(ri)%10;
- write_1302(0x8e,0x00);
- write_1302(0x86,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+10);
- break;
- case 6:yue++;
- if(yue==13)
- yue=1;
- write_nyr(6,yue);
- temp=(yue)/10*16+(yue)%10;
- write_1302(0x8e,0x00);
- write_1302(0x88,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+7);
- break;
- case 7:nian++;
- if(nian==100)
- nian=0;
- write_nyr(3,nian);
- temp=(nian)/10*16+(nian)%10;
- write_1302(0x8e,0x00);
- write_1302(0x8c,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+4);
- break;
- }
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- beep=0;//蜂鳴器短響一聲
- delay(50);
- beep=1;
- while(!key3);
- switch(key1n)
- {
- case 1:miao--;
- if(miao==-1)
- miao=59;
- write_sfm(0x08,miao);
- temp=(miao)/10*16+(miao)%10;
- write_1302(0x8e,0x00);
- write_1302(0x80,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+0x09);
- break;
- case 2:fen--;
- if(fen==-1)
- fen=59;
- write_sfm(5,fen);
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+6);
- break;
- case 3:shi--;
- if(shi==-1)
- shi=23;
- write_sfm(2,shi);
- temp=(shi)/10*16+(shi)%10;
- write_1302(0x8e,0x00);
- write_1302(0x84,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+3);
- break;
- case 4:week--;
- if(week==-0)
- week=7;
- write_1602com(yh+0x0c);
- write_week(week);
- temp=(week)/10*16+(week)%10;
- write_1302(0x8e,0x00);
- write_1302(0x8a,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+0x0e);
- break;
- case 5:ri--;
- if(ri==0)
- ri=31;
- write_nyr(9,ri);
- temp=(ri)/10*16+(ri)%10;
- write_1302(0x8e,0x00);
- write_1302(0x86,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+10);
- break;
- case 6:yue--;
- if(yue==0)
- yue=12;
- write_nyr(6,yue);
- temp=(yue)/10*16+(yue)%10;
- write_1302(0x8e,0x00);
- write_1302(0x88,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+7);
- break;
- case 7:nian--;
- if(nian==-1)
- nian=99;
- write_nyr(3,nian);
- temp=(nian)/10*16+(nian)%10;
- write_1302(0x8e,0x00);
- write_1302(0x8c,temp);
- write_1302(0x8e,0x80);
- write_1602com(yh+4);
- break;
- }
- }
- }
-
- }
- }
- }
- void setalarm()
- { if(flag==0)
- {if(key1n==0)
-
- {if(key4==0)
- {
- delay(10);
- if(key4==0)
- {
- beep=0;
- delay(50);
- beep=1;
- while(!key4);
- write_1602com(0x80);
- for(a=0;a<16;a++)
- {
- write_1602dat(tab3[a]);
- }
- if(key4n==0)
- {
- write_1602com(er+0x09);write_sfm(8,amiao);
- write_1602com(er+6);write_sfm(5,afen);
- write_1602com(er+3);write_sfm(2,ashi);
- }
- beep=0;key4n++;
- switch(key4n)
- {
- case 1:
- write_1602com(er+0x06);
- write_1602com(0x0f);
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,0x82|temp);//miao
- write_1302(0x8e,0x80);
- break;
- case 2:write_1602com(er+3);
- break;
- case 3: key4n=0;
- write_1602com(0x0c);
- alarmflag=1;
- lcd_init();
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,0x00|temp);
- write_1302(0x8e,0x80);
- break;
- }
- }
-
- }
- if(key4n!=0)
- {
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- beep=0;//蜂鳴器短響一聲
- delay(50);
- beep=1;
- while(!key2);
- switch(key4n)
- {
- case 1:afen++;
- if(afen==60)
- afen=0;
- write_sfm(0x05,afen);
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+6);
- break;
- case 2:ashi++;
- if(ashi==24)
- ashi=0;
- write_sfm(2,ashi);
- temp=(shi)/10*16+(shi)%10;
- write_1302(0x8e,0x00);
- write_1302(0x84,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+3);
- break;
- }
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- beep=0;//蜂鳴器短響一聲
- delay(50);
- beep=1;
- while(!key3);
- switch(key4n)
- {
-
- case 1:afen--;
- if(afen==-1)
- afen=59;
- write_sfm(5,afen);
- temp=(fen)/10*16+(fen)%10;
- write_1302(0x8e,0x00);
- write_1302(0x82,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+6);
- break;
- case 2:ashi--;
- if(ashi==-1)
- ashi=23;
- write_sfm(2,ashi);
- temp=(shi)/10*16+(shi)%10;
- write_1302(0x8e,0x00);
- write_1302(0x84,temp);
- write_1302(0x8e,0x80);
- write_1602com(er+3);
- break;
- }
- }
-
- }
- }
- }
- }
- }
- void timealarm()
- {
- if(shi>7)//大于7點(diǎn)才啟動(dòng)報(bào)時(shí)
- {
- if(alarmflag==1)//不按下設(shè)置按鍵時(shí)才有效
- {
- if(fen==0 && miao<2)
- {
- beep=0;//啟動(dòng)蜂鳴器
- }
- else if(fen==30 && miao==5)
- {
- beep=0;
- }
- else beep=1;
- }
- }
- }
- void init()
- {
- TMOD=0X01;
- EA=1;
- TH0=(65536-60000)/256;
- TL0=(65536-60000)%256;
- ET0=1;
- TR0=1;
- }
- void nz()
- {
- beep=0;
- delay(500);
- }
- void alarmoff()//按任意鍵關(guān)閉鬧鈴函數(shù)
- {
- if(flag==1)
- {
- if(key1==0||key2==0||key3==0||key4==0)
- {
- delay(10);
- if(key1==0||key2==0||key3==0||key4==0)
- {
- while(key1==0||key2==0||key3==0||key4==0)
- flag=0;
- lcd_init();
- }
- }
- }
- }
- void main()
- { beep=1;
- alarmflag=1;
- lcd_init();
- flag=0;
- ds1302_init();
- init();
-
- delay(10);
- while(1)
- {
- timealarm();
- settime();
- if(flag==1)
- {
- write_1602com(yh);
- for(a=0;a<16;a++)
- {
- delay(5);
- write_1602dat(tab4[a]);
- }
- write_1602com(er);
- for(a=0;a<16;a++)
- {
- delay(5);
- write_1602dat(tab5[a]);
- }
- }
- else if(flag==0&&key1n==0&&key4n==0)
- {
- miao=BCD_Decimal(read_1302(0x81));
- fen=BCD_Decimal(read_1302(0x83));
- shi=BCD_Decimal(read_1302(0x85));
- ri=BCD_Decimal(read_1302(0x87));
- yue=BCD_Decimal(read_1302(0x89));
- week=BCD_Decimal(read_1302(0x8b));
- nian=BCD_Decimal(read_1302(0x8d));
- write_sfm(8,miao);
- write_sfm(5,fen);
- write_sfm(2,shi);
- write_nyr(9,ri);
- write_nyr(6,yue);
- write_nyr(3,nian);
- write_week(week);
- }
- if((shi==ashi)&&(fen==afen))
- {
- if(0<miao&&miao<2)
- { nz();
- flag=1;
- }
-
- } else flag=0;beep=1;
- setalarm();
- alarmoff();
- }
- }
復(fù)制代碼
僅供參考
|