機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
PIC16F72-讀寫EEPROM程序-使用AT2401+按鍵+顯示(C程序)
PIC16F72-讀寫EEPROM程序-使用AT2401+按鍵+顯示(C程序)
 更新時間:2008-7-26 17:03:31  點擊數(shù):3
【字體: 字體顏色

 

0 onclick="javascript:window.open(this.src);" style="cursor:pointer;" onload="javascript:if(this.width>600)this.style.width='600px';" border="0" />0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}" border=0>

//*******************硬件說明**************************
//;EEPROM讀寫子程序-使用AT2401+按鍵+顯示
//****************************************************
   ________________
//    MCLR/VPP/TH-| 1        28 |-RB7/PGD
//RA0/AN0-| 2           27 |-RB6/PGC
//        RA1/AN1-| 3        26 |-RB5
// RA2/AN2/VRref--| 4           25 |-RB4
// RA3/AN3/VRref+-| 5           24 |-RB3/PGM
//     RA4/TOCKI-| 6           23 |-RB2
//     RA5/AN4/SS-| 7           22 |-RB1
//                  VSS-| 8           21 |-RB0/INT
//    OSC1/CLKIN-| 9           20 |-VDD
//  OSC2/CLKOUT-| 10        19 |-VSS
//RC0/TISO/TICKI-| 11          18 |-RC7/RX/DT
//RC1/T1OSI/CCP2-| 12          17 |-RC6/TX/CK
//  RC2/CCP1-| 13          16 |-RC5/SDO
//   RC3/SCK/SCL-| 14          15 |-RC4/SDA
//   ________________
//        16F72
//;***************************************************
#include<pic.h>
#include<string.h>
#define uchar  unsigned char
#define uint   unsigned int

#define bitset(var,bitno)((var)|=1<<(bitno))
#define bitclr(var,bitno)((var)&=~(1<<(bitno)))

static volatile unsigned char acc @ 0x20;
static volatile bit acc0     @ (unsigned)&acc*8+0;
static volatile bit acc7     @ (unsigned)&acc*8+7;

static volatile unsigned char err @ 0x21;
static volatile bit err0     @ (unsigned)&err*8+0;
static volatile bit err3     @ (unsigned)&err*8+3;
static volatile bit err6     @ (unsigned)&err*8+6;
static volatile bit err7     @ (unsigned)&err*8+7;


#define  SCL   RA1 //1  ;24C01-6
#define  SDA   RA2 //2  ;24C01-5
#define  SCLIO  TRISA1 //1
#define  SDAIO  TRISA2 //2
#define  SLAW   0x0A0//尋址字節(jié)寫
#define  SLAR   0x0A1//尋址字節(jié)讀
#define  KS1   RA3
#define  KS2   RA4
#define  KS3   RA5
#define  Ksec  RC0
#define  Kmin  RC1
const   unsigned char table[11]={ 0x0C0, 0x0F9, 0x0A4,0x0B0, 0x99, 0x92,0x82, 0x0F8,0x80,0x90,0x0ff};
unsigned  char  y,Tsmh, sec, min,hour ;
uchar  BCD[4];//數(shù)據(jù)送LED的數(shù)據(jù) 暫存區(qū)
uchar  Reeprom[5];
/////中斷//////////////////
void  interrupt  adint( )
  {  uchar x,y,z;
      TMR0=39;
     OPTION =0x87;// B'10000111'    //取消B口上拉電阻    1:256 預(yù)分頻器分配給定時器0,分頻比1:64
      //ADIF=0;//清/AD中斷標(biāo)志位
      T0IF=0;//        ;清定時器0溢出中斷標(biāo)志位
      x++;// 記 數(shù)器
      if(x==18)
      { 
         x=0;
         sec--; //秒-1 
          y++;   //秒   記 數(shù)器
          if(y==60)
                {
                  y=0;
                  min--;//分-1
                  z++;  // 記 數(shù)器
                  if(z==60)
                          {
                            z=0;
                            hour--; //時-1
                           }
                 }
         }       
  }
//延時子程序
void delay()

  unsigned  int i=300;
   while(i--); //for(i=300;0<i; --i) continue;
}
//十六進制轉(zhuǎn)十進制程序
void  H_BCD (uchar x,uchar i)

        
    BCD [1]=x%10;
    BCD [0]=x/10;
    BCD [3]=i%10;
    BCD [2]=i/10;              // BCD [0]=x/100;
}
   
void display()//顯示程序
    {  
       unsigned char b,c;
         b=0x10;
        for(c=0;c<4;c++)
         {
      PORTB=table[BCD[c]] ;     
      PORTC=(PORTC&8)|b;
            CLRWDT();
      delay();
            b=b<<1;
          
          
         }  PORTB=err;
            PORTC=(PORTC&8)|4;
            CLRWDT();
      delay();
            PORTC=PORTC&8;
}
//系統(tǒng) 各I/O初始化子程序
void  initial ()
{   TRISB=0;
    TRISC=3;
    ADCON1=7;;//設(shè)置RA為IO口
    TRISA=0x0ff;
  
   OPTION=135;//取消B口上拉電阻  B'10000111';   1:256     B'10000101'1:64
             // 預(yù)分頻器分配給定時器0,
    T0IF= 0; // 清溢出中斷標(biāo)志位
    T0IE=1;    //定時器0溢出中斷允許
  //  GIE=1;    //總中斷允許
    TMR0=39;
}
//////////////24C01/////////////////
//--------應(yīng)答位檢查---------
void  Cack()
{ SCL=1;
  SDAIO=1;//輸入1
  SCLIO=0;
  err7=SDA;//c=1錯誤ERR
  SCL=0;
}
///--------發(fā)送非應(yīng)答位----------
void  Mnack()

   SDA=1;
   SCLIO=0;
   SDAIO=0;//輸出
   SCL=1;
   NOP();
   NOP();
   SCL=0;
   SDA=0;
}
//-------發(fā)送應(yīng)答位---------------
void  Mack()
{
  SDA=0;
  SCLIO=0;
  SDAIO=0;//輸出
  SCL=1;
  NOP();
  NOP();
  SCL=0;
  SDA=1;
}
//--------停止IC總線---------------
void  Stop()
{
     SDA=0;
     SCLIO=0;
     SDAIO=0;//輸出
     SCL=1;
     NOP();
     NOP();
     SDA=1;
     NOP();
     NOP();
}
//--------;啟動IC總線-------------
void  Sta()
{
    SDAIO=0;//輸出
    SCLIO=0;
    SDA=1;
    SCL=1;
    NOP();
    NOP();
    SDA=0;
    NOP();
    NOP();
    SCL=0;
}
   
//--------寫一字節(jié)------------------------
void  Wrbyt(uchar x)
{
  uchar i;
  acc=x;
  SCLIO=0;
  SDAIO=0;
  for(i=8;i>0;i--)
  {
  
   SDA=acc7;
   SCL=1;
   NOP();
   NOP();
   SCL=0;
   SDA=0;
   acc=acc<<1;
   }
}
//---------讀一字節(jié)-----------------
uchar   Rdbyt( )
{
    uchar i;
    SCLIO=0;
    SDAIO=1;//;輸入
    for(i=8;i>0;i--)
     { 
         acc=acc<<1;//接收數(shù)據(jù)左移寄存器
         SCL=1;
         acc0=SDA;
         SCL=0;
         NOP();
       }
     return(acc);
}
////---------讀n個數(shù)據(jù)----------------
void  Rdnbyt (uchar SLARtemp ,uchar Repromn,uchar temp2) //Repromn傳送數(shù)據(jù)個數(shù)
  {  
     uchar i;
     i= temp2;
     do{
        Sta();           //啟動IC總線-//    
        Wrbyt(SLARtemp); //寫一字節(jié)
        Cack();          //應(yīng)答位檢查-
       } while(err7==1);
    
       while(Repromn--)
       {
        Reeprom[i]=Rdbyt();  //讀一字節(jié)
         i++;
         Mack(); //發(fā)送應(yīng)答位
        }
      Mnack();  // 發(fā)送非應(yīng)答位
      Stop();   //停止IC總線
}
//---------寫n個數(shù)據(jù)---------------
void  Wrnbyt(uchar SLAwtemp , uchar Wepromn,uchar temp1)
{  uchar i;
   i= temp1;
    err7=1;

  while(Wepromn--)
     {
       if(err7==1)            //c=1E0,ERR
         {   i=temp1;
             Sta();           //啟動IC總線
             Wrbyt(SLAwtemp); //寫一字節(jié)
             Cack();          //應(yīng)答位檢查-
           }
          Wrbyt( Reeprom[i]);// Reeprom[t]);//寫一字節(jié)
          i++;
          Cack();//應(yīng)答位檢查
     }
    Stop();   //停止IC總線   
}
//////////按鍵掃描/////////////////////////////////////////////////
void   Key()
   {
       uchar a,b,i,c,d;
      if( KS3==0)
      {  a=20;
          while(a--) display();
         if(56!=(PORTA&56))
         {
            while( KS3==0) display(); di();
            if (Ksec ){b=1;i=3;c=1;}//是秒???
            else      {b=3;i=5;c=3;}//
               d=0; 
            while (b<i&&d<20)//選擇被調(diào)整數(shù)
             {   
                 uchar  z,x;
                 for(z=50;z>0&&b<i;z--)//亮50次
                  {   z--;
                      H_BCD (Reeprom[c],Reeprom[c+1] );  //十六進制轉(zhuǎn)十進制程序
                      display();
                      a=PORTA&56 ;
                      switch(a)
                        {
                           case 48 : if(Reeprom[b]!=99) //110 ks1=0
                                        Reeprom[b]++;
                                     for(x=10;x>0&&56!=(PORTA&56);x--)
                                        display();d=0; break;
                           case 40 : if(Reeprom[b]!=0) //101 ks2=0
                                       Reeprom[b]--;
                                    for(x=10;x>0&&56!=(PORTA&56);x--)
                                       display(); d=0; break;
                            case 24 :  b++;   while( KS3==0) display();d=0; break; //011 ks3=0
                         }
                    }
                      if (b<i)
                      {
                        for(z=50; z>0&&56==(PORTA&56);z--)//被調(diào)整數(shù)閃爍程序
                        { 
                          if (b==1||b==3) { BCD[0]=10; BCD[1]=10;}
                          else            { BCD[2]=10; BCD[3]=10;}
                          display( );
                          //z--;
                        
                        } d++;
                       }
                }
                 while( KS3==0)display( );
                Wrnbyt( SLAW ,5,0); //寫2個數(shù)據(jù)
                Tsmh=0;
                err3=1; //開機結(jié)束
               
           }
     }
}
void main()
  {
        initial ();  //系統(tǒng) 各I/O初始化子程序
        Wrnbyt ( SLAW ,1,0); //寫1個數(shù)據(jù)=0
        Rdnbyt ( SLAR ,4,1); //尋址字節(jié)讀#0A1
        sec= Reeprom[1];
        min= Reeprom[3];
        err3=0;
        bitclr( err,0);
        Tsmh=1;
       while(1)
       {  
           while (Tsmh)
           {    ei();
                if(err3==0){ if (Ksec ){H_BCD (sec,Reeprom[2]);Tsmh=sec;}//秒
                            else      {H_BCD (min,Reeprom[4]);Tsmh=min;}//分
                            RC3=0; bitclr( err,1); bitset( err,2);
                           } //關(guān)機
                else      { if (Ksec ){H_BCD (Reeprom[1],sec);Tsmh=sec;}//秒
                            else      {H_BCD (Reeprom[3],min);Tsmh=min;}//分
                            RC3=1; bitset( err,1); bitclr( err,2);
                           } //開機
               display(); //顯示程序
               Key();     //按鍵掃描
              if(err6!=Ksec){Tsmh=0;err6=Ksec;  err3=1;} //判斷是否轉(zhuǎn)換//開機結(jié)束
            }
          if(err3==0) {err3=1;sec=Reeprom[2];min=Reeprom[4];} //送開機 數(shù)據(jù)
          else        {err3=0;sec=Reeprom[1];min=Reeprom[3];} //送關(guān)機 數(shù)據(jù)
          if (Ksec ) Tsmh=sec;
          else       Tsmh=min;
        }
}


 

  • 上一篇: PIC單片機開發(fā)的若干問題
  • 下一篇: 基于PIC16F72的兩路交流信號AD轉(zhuǎn)換(C程序)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1