在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于PIC16F877A單片機(jī)設(shè)計(jì)的萬(wàn)年歷程序

            基于PIC16F877A單片機(jī)設(shè)計(jì)的萬(wàn)年歷程序

            作者: 時(shí)間:2012-11-27 來(lái)源:網(wǎng)絡(luò) 收藏

            //-------------------------------------------------
            //啟動(dòng)溫度轉(zhuǎn)換函數(shù)
            void get_temp()
            {
            int i;
            DQ_HIGH();
            reset(); //復(fù)位等待從機(jī)應(yīng)答
            write_byte(0XCC); //忽略ROM匹配
            write_byte(0X44); //發(fā)送溫度轉(zhuǎn)化命令
            for(i=10;i>0;i--)
            {
            delay(201,132); //調(diào)用多次延遲函數(shù),確保溫度轉(zhuǎn)換完成所需要的時(shí)間
            }
            reset(); //再次復(fù)位,等待從機(jī)應(yīng)答
            write_byte(0XCC); //忽略ROM匹配
            write_byte(0XBE); //發(fā)送讀溫度命令
            TLV=read_byte(); //讀出溫度低8
            THV=read_byte(); //讀出溫度高8位
            DQ_HIGH(); //釋放總線
            TZ=(TLV>>4)|(THV4);
            }

            3.日歷顯示程序
            /***************************************************
            * 標(biāo)題:DS1302讀寫 *
            * 作者:Wujieflash *
            * 日期:2008年1月14日 *
            * 說(shuō)明:日歷顯示范圍:2000年--2099年 *
            ***************************************************/
            #define RST RC0
            #define SCLK RC1
            #define IO RC2
            uch flag=0;
            uch second=1,minute=1,hour=1,year=1,month=1,date=1,day=1;
            uch clock[]={0};
            uch DisCash[]={0x00,0x30,0x09,0x16,0x01,0x03,0x09};
            /////往1302寫入1Byte數(shù)據(jù)////////////////////////
            void RTInputByte(uch d)
            {
            uch i;
            TRISC=0x00;
            for(i=8; i>0; i--)
            {
            IO = d0x01; //取最低位
            SCLK = 1; //上升沿發(fā)送
            SCLK = 0; //恢復(fù)
            d = d >> 1;
            }
            }
            ///////從1302讀取1Byte數(shù)據(jù)////////////////////////
            uch RTOutputByte(void)
            {
            uch i,val=0;
            TRISC2=1; //設(shè)置為輸入
            for(i=8; i>0; i--)
            {
            val = val >>1;
            if(IO)val=val|0x80;// 從最低位開(kāi)始接收
            SCLK = 1; //下降沿接收
            SCLK = 0;
            }
            return(val);
            }
            ///////先寫地址,后寫命令/數(shù)據(jù)//////////////////////////
            void W1302(uch ucAddr, uch ucDa)
            {
            RST = 0;
            SCLK = 0;
            RST = 1; //打開(kāi)DS1302
            RTInputByte(ucAddr); // /* 地址,命令 */
            RTInputByte(ucDa); // /* 寫1Byte數(shù)據(jù)*/
            SCLK = 1;
            RST = 0; //關(guān)閉DS1302
            }
            ///////先寫地址,后讀命令/數(shù)據(jù)////////////////////////
            uch R1302(uch ucAddr)
            {
            uch ucData;
            RST = 0;
            SCLK = 0;
            RST = 1;
            RTInputByte(ucAddr); // /* 地址,命令 */
            ucData = RTOutputByte(); // /* 讀1Byte數(shù)據(jù) */
            SCLK = 1;
            RST = 0;
            return(ucData);
            }
            /////////向1302寫入 秒 分 時(shí) 日 月 星期 年 */////////////
            void Set1302(uch *pClock)
            {
            uch i;
            uch ucAddr = 0x80; //起使地址
            W1302(0x8e,0x00); ///* 控制命令,WP=0,允許寫操作*/
            for(i =7; i>0; i--)
            {
            W1302(ucAddr,*pClock); ///* 秒 分 時(shí) 日 月 星期 年 */
            pClock++;
            ucAddr +=2; //寫地址加2
            }
            W1302(0x8e,0x80); // /* 控制命令,WP=1,寫保護(hù)*/
            }
            ////////從1302讀出 秒 分 時(shí) 日 月 星期 年 *//////////////////
            void v_Get1302(unsigned char ucCurtime[])
            {
            unsigned char i;
            unsigned char ucAddr = 0x81;
            for(i=0;i
            /////////與LCD的顯示接口//////////////////////
            void display()
            {
            uch i;
            for(i=0;i

            4.按鍵掃描與服務(wù)程序
            /***************************************************
            * 標(biāo)題:按鍵掃描和服務(wù) *
            * 作者:Wujieflash *
            * 日期:2008年1月17日 *
            * 說(shuō)明:當(dāng)按鍵按下,選中的單元就會(huì)閃爍 *
            ***************************************************/
            uch k=0;
            //鍵盤初始化子程序
            void keyinit()
            {
            TRISD0=1;
            TRISD0=1;
            TRISD0=1;
            }
            /*----------------------------------------------------------*/
            //鍵盤掃描子程序
            void KeyScan()
            {
            int d;
            if(RD0==0) //設(shè)置鍵按下
            {
            k++; //選定入口值
            k=k%8;
            }
            while(1)
            {
            if(RD0==1)break;//等待按鍵松開(kāi)
            }
            switch(k)//鍵盤服務(wù)入口
            {
            case 1://設(shè)置秒
            {
            d=R1302(0x81);//讀取秒
            d=d/16*10+d%16;//轉(zhuǎn)換為16進(jìn)制
            second=flag; //設(shè)置秒的閃爍標(biāo)志
            minute=1; //其余變量不閃爍
            hour=1;
            year=1;
            month=1;
            date=1;
            day=1;
            if(second==0) //閃爍
            {
            Show8X16_2(0,111,noshu);
            Show8X16_2(0,119,noshu);
            }
            if(RD1==0) //秒數(shù)值加1
            {
            d++;
            if(d>0x3b)d=0;//大于59就為0
            d=d/10*16+d%10;
            W1302(0x80,d);//寫入DS1302
            while(1)
            {
            if(RD1==1)break;//等待鍵松開(kāi)
            }
            }
            if(RD2==0)//數(shù)值減1
            {
            d--;
            if(d0x3b)d=0;
            d=d/10*16+d%10;
            W1302(0x82,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            d--;
            if(d0x17)d=0;
            d=d/10*16+d%10;
            W1302(0x84,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            d--;
            if(d0x1f)d=1;
            d=d/10*16+d%10;
            W1302(0x86,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            d--;
            if(d0x0c)d=1;
            d=d/10*16+d%10;
            W1302(0x88,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            d--;
            if(d0x07)d=1;
            d=d/10*16+d%10;
            W1302(0x8a,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            d--;
            if(d0x63)d=0;
            d=d/10*16+d%10;
            W1302(0x8c,d);
            while(1)
            {
            if(RD1==1)break;
            }
            }
            if(RD2==0)
            {
            ……

            5.液晶顯示程序
            /***************************************************
            * 標(biāo)題:LCD操作 *
            * 作者:Wujieflash *
            * 日期:2008年1月12日 *
            * 說(shuō)明:液晶不帶字庫(kù) *
            ***************************************************/
            #include
            #define E RA0 //液晶使能端
            #define RW RA1 //讀寫控制端
            #define DI RA2 //數(shù)據(jù)/指令通道
            #define CSA RA5 //片選
            #define CSB RA3 //片選
            #define nop() asm("nop")
            ////////////////////////基本子函數(shù)///////////////////////
            //延時(shí)
            void delay(char x,char y)
            {
            char z;
            do{
            z=y;
            do{;}while(--z);
            }while(--x);
            }
            //其指令時(shí)間為:7+(3*(Y-1)+7)*(X-1)如果再加上函數(shù)調(diào)用的call 指令、頁(yè)面設(shè)定、傳遞參數(shù)花掉的7 個(gè)指令。
            //則是:14+(3*(Y-1)+7)*(X-1)。
            //--------------------------------------------------
            void LCDdelay()
            {
            unsigned int i=500;
            while(i--)
            {;}
            }
            /*----------------------------------------------------*/
            //狀態(tài)檢查
            void CheckState()
            {
            unsigned int dat;
            RW=1; //讀狀態(tài)
            DI=0;
            TRISB=0xff; //設(shè)置口為輸入
            while(1)
            {
            E=1; //高電平讀數(shù)據(jù)
            dat=PORTB0x90; //當(dāng)4、7位為0時(shí)為正常狀態(tài)
            E=0;
            if(dat==0x00)break;
            }
            TRISB=0x00; //恢復(fù)口為輸出
            }



            評(píng)論


            相關(guān)推薦

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

            關(guān)閉