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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)+LCD+DS1302+AD程序

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

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

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

          本文引用地址:http://www.ex-cimer.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,};
          // // 年 星期 月 日 時(shí) 分 秒
          const unsigned char ds1302_sub[ ]={0};
          uchar DisCash[]={0x00,0x30,0x09,0x1,0x06,0x06,0x06};
          //初始化參數(shù) 秒 分 時(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();//顯示程序
          //延時(shí)子程序
          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;
          }

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

          //////寫(xiě)入控制命令子程序////////////////////////////
          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時(shí)鐘。打開(kāi)A/D轉(zhuǎn)換器。先中通道0
          ADCON0=0x0c1;// B11000001 // ;A/D時(shí)鐘為RC。RA0作A/D輸入等
          ADIE=1; //時(shí)。開(kāi)放中斷
          ADIF=0; //清/AD中斷標(biāo)志位 PIR1,
          PEIE=1; //開(kāi)放外圍部件中斷INTCON,
          GIE=1; //開(kāi)放總中斷 INTCON,
          }
          /////往1302寫(xiě)入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);
          }
          ///////先寫(xiě)地址,后寫(xiě)命令/數(shù)據(jù)//////////////////////////
          void W1302(uchar ucAddr, uchar ucDa)
          {
          T_RST = 0;
          T_CLK = 0;
          T_RST = 1;
          RTInputByte(ucAddr); // /* 地址,命令 */
          RTInputByte(ucDa); // /* 寫(xiě)1Byte數(shù)據(jù)*/
          T_CLK = 1;
          T_RST = 0;
          }
          ///////先寫(xiě)地址,后讀命令/數(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寫(xiě)入 秒 分 時(shí) 日 月 星期 年 */////////////
          void Set1302(uchar *pClock)
          {
          uchar i;
          uchar ucAddr = 0x80;
          W1302(0x8e,0x00); ///* 控制命令,WP=0,允許寫(xiě)操作*/
          for(i =7; i>0; i--)
          {
          W1302(ucAddr,*pClock); ///* 秒 分 時(shí) 日 月 星期 年 */
          pClock++;
          ucAddr +=2;
          }
          W1302(0x8e,0x80); // /* 控制命令,WP=1,寫(xiě)保護(hù)*/
          }
          ////////從1302讀出 秒 分 時(shí) 日 月 星期 年 *//////////////////
          void v_Get1302(unsigned char ucCurtime[])
          {
          unsigned char i;
          unsigned char ucAddr = 0x81;
          for (i=0;i<7;i++)
          {
          ucCurtime[i] = R1302(ucAddr);///*格式為: 秒 分 時(shí) 日 月 星期 年 */
          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; // 年 星期 月 日 時(shí) 分 秒
          case 40 : if(appear[b]!=0)(appear[b])--;
          a=PORTA ;
          for(x=20;x>0&&56!=(a&56);x--)
          { display();// delay();
          delay();
          } break;// 年 星期 月 日 時(shí) 分 秒
          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;寫(xiě)入起始地址
          enable();//寫(xiě)入控制命令子程序

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

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

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

          y=Data[ BCD[i]]; // 1;//0x47;
          W_data ();//寫(xiě)入數(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();//寫(xiě)入控制命令子程序
          y=0x38;//8位2行5X7點(diǎn)陣0x3c
          enable();//寫(xiě)入控制命令子程序
          y=0x0C;//顯示器開(kāi),F(xiàn)=光標(biāo)開(kāi),閃爍開(kāi)。
          enable();//寫(xiě)入控制命令子程序
          y=0x06; //文字不動(dòng),光標(biāo)自動(dòng)右移。
          enable();//寫(xiě)入控制命令子程序

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

          display();
          Key();
          }
          }



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

          評(píng)論


          技術(shù)專(zhuān)區(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); })();