在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)+LCD+DS1302+AD程序

            PIC單片機(jī)+LCD+DS1302+AD程序

            作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
            //初學(xué)C按鍵LCD+DS1302+AD程序

            //;*******************************************

            本文引用地址:http://www.biyoush.com/article/201611/315932.htm

            0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0>


            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            static volatile unsigned char acc @ 0x20;
            static volatile bit acc0 @ (unsigned)&acc*8+0;
            static volatile bit acc7 @ (unsigned)&acc*8+7;
            #define PORTAIT(add,bit) ((unsigned)(&add)*8+(bit))
            #define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
            #define PORTCIT(add,bit) ((unsigned)(&add)*8+(bit))

            static bit RS @ PORTCIT(PORTC,0);
            static bit RW @ PORTCIT(PORTC,1);
            static bit E @ PORTCIT(PORTC,2);
            static bit T_RST @ PORTCIT(PORTC,5);
            static bit T_CLK @ PORTCIT(PORTC,6);
            static bit T_IO @ PORTCIT(PORTC,7);

            static bit PORTA_0 @ PORTAIT(PORTA,0); ///*定義PORTA 0位*/
            static bit PORTA_1 @ PORTAIT(PORTA,1); ///*定義PORTA 1位*/
            static bit PORTA_2 @ PORTAIT(PORTA,2); ///*定義PORTA 2位*/
            static bit PORTA_5 @ PORTAIT(PORTA,5);

            static bit RB_7 @ PORTBIT(PORTB,7);
            const unsigned char Data[ ]={0, 1, 2,3,4, 5, 6,7, 8,9, };
            const unsigned char Ds1302[] = {9, 9, 0, 7, 1, 9 ,3,9, 2,4, 5, 9 ,5,9,};
            // // 年 星期 月 日 時 分 秒
            const unsigned char ds1302_sub[ ]={0};
            uchar DisCash[]={0x00,0x30,0x09,0x1,0x06,0x06,0x06};
            //初始化參數(shù) 秒 分 時 日 月 星期 年
            unsigned char y,i;
            char *pc;
            uchar BCD[3];
            uchar get1302[7];
            uchar appear[]={0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0};
            void Delay ( );
            void enable ();
            void display();//顯示程序
            //延時子程序
            void delay()
            {
            unsigned int i=1000;
            while(i--) //for(i=6000;0 {
            ; // continue;
            }
            }
            ////////////////十六進(jìn)制轉(zhuǎn)十進(jìn)制程序

            void H_BCD (uchar x)
            {
            //i,j,t1,t2;
            BCD [2]=x%10;
            BCD [1]=(x%100)/10;
            BCD [0]=x/100;
            }

            //////////寫入數(shù)據(jù)子程序////////////////////////////
            void W_data ()
            {
            Delay();//判斷液晶顯示器是否忙
            RS=1;
            RW=0;
            PORTB=y;
            // enable();//寫入控制命令子程序
            E=1;
            E=0;
            }

            //////寫入控制命令子程序////////////////////////////
            void enable ()
            { Delay();
            RS=0;
            RW=0;
            PORTB =y;
            E=1;
            E=0;
            }
            ///////判斷液晶顯示器是否忙///////////////////////
            void Delay ()
            {
            RS=0;
            RW=1;
            E=0;
            NOP();
            TRISB=0x80;
            E=1;
            while(RB_7==1 )
            {
            RS=0;
            RW=1;
            E=0;
            NOP();
            E=1;
            }
            TRISB=0x00;
            }
            ///////////////////////////////////////////////////////////////////////////

            void interrupt adint(void)
            {
            ADIF=0;//清/AD中斷標(biāo)志位
            }

            ////////系統(tǒng) 各I/O初始化子程序///////////////////////////////////////////
            void initial ()
            { TRISB=0;
            TRISC=0;
            TRISA=0x0ff;
            }
            //////////A/D轉(zhuǎn)換初始化子程序//////////////////////////////
            void adinitial()
            {
            ADCON1=15;//;設(shè)置RA為A/D甬道模擬輸入
            //;RC時鐘。打開A/D轉(zhuǎn)換器。先中通道0
            ADCON0=0x0c1;// B11000001 // ;A/D時鐘為RC。RA0作A/D輸入等
            ADIE=1; //時。開放中斷
            ADIF=0; //清/AD中斷標(biāo)志位 PIR1,
            PEIE=1; //開放外圍部件中斷INTCON,
            GIE=1; //開放總中斷 INTCON,
            }
            /////往1302寫入1Byte數(shù)據(jù)////////////////////////
            void RTInputByte(uchar d)
            {
            uchar i;
            acc = d;
            TRISC=0x00;
            for(i=8; i>0; i--)
            {
            T_IO = acc0;//CARRY;//ACC0; //*相當(dāng)于匯編中的 RRC */
            T_CLK = 1;
            T_CLK = 0;
            acc = acc >> 1;
            }
            }
            ///////從1302讀取1Byte數(shù)據(jù)////////////////////////
            uchar RTOutputByte(void)
            {
            uchar i;
            TRISC=0x80;
            for(i=8; i>0; i--)
            {
            acc = acc >>1; //*相當(dāng)于匯編中的 RRC */
            acc7= T_IO;// CARRY
            T_CLK = 1;
            T_CLK = 0;
            }
            return(acc);
            }
            ///////先寫地址,后寫命令/數(shù)據(jù)//////////////////////////
            void W1302(uchar ucAddr, uchar ucDa)
            {
            T_RST = 0;
            T_CLK = 0;
            T_RST = 1;
            RTInputByte(ucAddr); // /* 地址,命令 */
            RTInputByte(ucDa); // /* 寫1Byte數(shù)據(jù)*/
            T_CLK = 1;
            T_RST = 0;
            }
            ///////先寫地址,后讀命令/數(shù)據(jù)////////////////////////
            uchar R1302(uchar ucAddr)
            {
            uchar ucData;
            T_RST = 0;
            T_CLK = 0;
            T_RST = 1;
            RTInputByte(ucAddr); // /* 地址,命令 */
            ucData = RTOutputByte(); // /* 讀1Byte數(shù)據(jù) */
            T_CLK = 1;
            T_RST = 0;
            return(ucData);
            }
            /////////向1302寫入 秒 分 時 日 月 星期 年 */////////////
            void Set1302(uchar *pClock)
            {
            uchar i;
            uchar ucAddr = 0x80;
            W1302(0x8e,0x00); ///* 控制命令,WP=0,允許寫操作*/
            for(i =7; i>0; i--)
            {
            W1302(ucAddr,*pClock); ///* 秒 分 時 日 月 星期 年 */
            pClock++;
            ucAddr +=2;
            }
            W1302(0x8e,0x80); // /* 控制命令,WP=1,寫保護(hù)*/
            }
            ////////從1302讀出 秒 分 時 日 月 星期 年 *//////////////////
            void v_Get1302(unsigned char ucCurtime[])
            {
            unsigned char i;
            unsigned char ucAddr = 0x81;
            for (i=0;i<7;i++)
            {
            ucCurtime[i] = R1302(ucAddr);///*格式為: 秒 分 時 日 月 星期 年 */
            ucAddr += 2;
            }
            }
            //////////拆字子程序///////////////////////////////////////
            void bcd_bcd( )
            { uchar a=6;


            for (i=0;i<=15;)
            {
            appear[i]=(get1302[a]&0xf0)/16;
            i++;
            appear[i]=get1302[a]&0x0f;
            i++;
            a--;
            }
            }
            ////////按鍵掃描///////////////////////////////////////////////////

            //////////按鍵掃描/////////////////////////////////////////////////
            void Key()
            {
            uchar a,b,c,i;
            di();
            a=PORTA ;
            if(56!=(a&56))
            {
            display();
            a=PORTA ;
            if(56!=(a&56))
            {
            for (b=0;b<14;)
            {
            uchar z,x;

            for(z=50;z>0&&b<14;z--)
            { z--;
            display();// delay();
            delay();
            a=PORTA;
            a=a&56;
            switch(a)
            {

            case 48 :
            if(Ds1302[b]!=appear[b] )
            (appear[b])++;
            a=PORTA ;
            for(x=20;x>0&&56!=(a&56);x--)
            { display();// delay();
            delay();
            } break; // 年 星期 月 日 時 分 秒
            case 40 : if(appear[b]!=0)(appear[b])--;
            a=PORTA ;
            for(x=20;x>0&&56!=(a&56);x--)
            { display();// delay();
            delay();
            } break;// 年 星期 月 日 時 分 秒
            case 24 : b++; while( PORTA_5==0); break;
            }
            }

            a=PORTA ;
            for(z=50;( z>0&&56==(a&56));z--)
            {

            i=appear[b];
            appear[b]=10;
            display( );
            delay();
            appear[b]=i;
            a=PORTA;
            //a=a&56;
            z--;

            }

            }
            while( PORTA_5==0);
            i=13;
            c=12;
            for(b=0;b<7;b++)
            {
            DisCash[b]=((appear[c]&0x0f)*16)|(appear[i]&0x0f);
            i=i-2;
            c=c-2;
            }
            Set1302(&DisCash[0]);
            a=PORTA ;
            }
            }
            }
            //////////顯示子程序/////////////////////////////////////////////
            void display()//顯示程序
            {
            y=0x80;//0x0C0;寫入起始地址
            enable();//寫入控制命令子程序

            for(i=0;i<8;)
            {
            y=Data[ appear[i]]; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            // delay();
            i++;
            y=Data[ appear[i]]; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            // delay();
            i++;
            y=-; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            //delay();
            }
            y=0x0C0;
            enable();//寫入控制命令子程序
            for(i=8;i<14;)
            {
            y=Data[appear[i]]; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            //delay();
            i++;
            y=Data[appear[i]]; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            // delay();
            i++;
            y=:; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            // delay();

            }
            y=-; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            // delay();

            for(i=0;i<3;i++)
            {

            y=Data[ BCD[i]]; // 1;//0x47;
            W_data ();//寫入數(shù)據(jù)子程序
            }
            }
            ///////主程序//////////////////////////////////////////////////////
            void main()
            {
            // TRISB=0x00;
            // TRISC=0x00;
            Set1302(&DisCash[0]);
            initial ();//系統(tǒng) 各I/O初始化子程序
            adinitial();//A/D轉(zhuǎn)換初始化子程序/
            y=0x01;//PORTB
            enable();//寫入控制命令子程序
            y=0x38;//8位2行5X7點(diǎn)陣0x3c
            enable();//寫入控制命令子程序
            y=0x0C;//顯示器開,F(xiàn)=光標(biāo)開,閃爍開。
            enable();//寫入控制命令子程序
            y=0x06; //文字不動,光標(biāo)自動右移。
            enable();//寫入控制命令子程序

            ///////////////////////////////////////////////////
            while(1)
            {
            v_Get1302(get1302);//從1302讀出 秒 分 時 日 月 星期 年
            bcd_bcd(get1302);//拆字子程序
            H_BCD ( ADRES ); //十六進(jìn)制轉(zhuǎn)十進(jìn)制程序
            ei();
            ADGO=1; //啟動A/D轉(zhuǎn)換 ADCON0,

            display();
            Key();
            }
            }



            關(guān)鍵詞: PIC單片機(jī)LCDDS1302AD程

            評論


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

            關(guān)閉