中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

        基于PIC16F877A單片機設(shè)計的萬年歷程序

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

        //-------------------------------------------------
        //啟動溫度轉(zhuǎn)換函數(shù)
        void get_temp()
        {
        int i;
        DQ_HIGH();
        reset(); //復(fù)位等待從機應(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)換完成所需要的時間
        }
        reset(); //再次復(fù)位,等待從機應(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.日歷顯示程序
        /***************************************************
        * 標題:DS1302讀寫 *
        * 作者:Wujieflash *
        * 日期:2008年1月14日 *
        * 說明:日歷顯示范圍: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;// 從最低位開始接收
        SCLK = 1; //下降沿接收
        SCLK = 0;
        }
        return(val);
        }
        ///////先寫地址,后寫命令/數(shù)據(jù)//////////////////////////
        void W1302(uch ucAddr, uch ucDa)
        {
        RST = 0;
        SCLK = 0;
        RST = 1; //打開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寫入 秒 分 時 日 月 星期 年 */////////////
        void Set1302(uch *pClock)
        {
        uch i;
        uch ucAddr = 0x80; //起使地址
        W1302(0x8e,0x00); ///* 控制命令,WP=0,允許寫操作*/
        for(i =7; i>0; i--)
        {
        W1302(ucAddr,*pClock); ///* 秒 分 時 日 月 星期 年 */
        pClock++;
        ucAddr +=2; //寫地址加2
        }
        W1302(0x8e,0x80); // /* 控制命令,WP=1,寫保護*/
        }
        ////////從1302讀出 秒 分 時 日 月 星期 年 *//////////////////
        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ù)程序
        /***************************************************
        * 標題:按鍵掃描和服務(wù) *
        * 作者:Wujieflash *
        * 日期:2008年1月17日 *
        * 說明:當按鍵按下,選中的單元就會閃爍 *
        ***************************************************/
        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;//等待按鍵松開
        }
        switch(k)//鍵盤服務(wù)入口
        {
        case 1://設(shè)置秒
        {
        d=R1302(0x81);//讀取秒
        d=d/16*10+d%16;//轉(zhuǎn)換為16進制
        second=flag; //設(shè)置秒的閃爍標志
        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;//等待鍵松開
        }
        }
        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.液晶顯示程序
        /***************************************************
        * 標題:LCD操作 *
        * 作者:Wujieflash *
        * 日期:2008年1月12日 *
        * 說明:液晶不帶字庫 *
        ***************************************************/
        #include
        #define E RA0 //液晶使能端
        #define RW RA1 //讀寫控制端
        #define DI RA2 //數(shù)據(jù)/指令通道
        #define CSA RA5 //片選
        #define CSB RA3 //片選
        #define nop() asm("nop")
        ////////////////////////基本子函數(shù)///////////////////////
        //延時
        void delay(char x,char y)
        {
        char z;
        do{
        z=y;
        do{;}while(--z);
        }while(--x);
        }
        //其指令時間為:7+(3*(Y-1)+7)*(X-1)如果再加上函數(shù)調(diào)用的call 指令、頁面設(shè)定、傳遞參數(shù)花掉的7 個指令。
        //則是: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; //當4、7位為0時為正常狀態(tài)
        E=0;
        if(dat==0x00)break;
        }
        TRISB=0x00; //恢復(fù)口為輸出
        }



        關(guān)鍵詞: PIC16F877A 萬年歷 KS0108系列

        評論


        相關(guān)推薦

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

        關(guān)閉