久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 采用AH3503的磁條檢測的單片機程序 [打印本頁]

作者: clarksmj    時間: 2019-6-24 11:39
標題: 采用AH3503的磁條檢測的單片機程序
設(shè)計思路:1、AH3503進行檢測磁條


電路原理圖如下:

2、STC15單片機檢測AH3503的電壓變化

以下為單片機程序請參照!!
#include"STC15.H"
#include"intrins.h"

typedef unsigned char uint8;
typedef unsigned int uint16;

uint8 CH_1=0;
uint16 ADC_16RES[8];
uint16 CONVERT_TEMP;
uint8 ADC_8RES=0;
uint8 COUNTER_1=0;

uint16 JUDGE_16RES[8];

sbit EEPROM_KEY=P4^5;

bit JUDGE_FLAG=0;

void delay_ms(uint16 ms)//延時函數(shù)
{
          uint16 i;
          while( (ms--) != 0)
           {
            for(i = 0; i < 600; i++);
           }            
}

void ADCINIT()//數(shù)模轉(zhuǎn)換寄存器 初始化函數(shù)
{  
        P1ASF=0XFF;     //配置P1端口為模擬輸入端口
        ADC_CONTR=0x88;        //打開ADC轉(zhuǎn)換的電源,并且開始轉(zhuǎn)換(轉(zhuǎn)換完畢后ADC_FLAG(B4)=1; 要軟件清零,ADC_START(B3)=1開始轉(zhuǎn)換,轉(zhuǎn)換完畢后硬件置零)
        ADC_RES=0X00;
        ADC_RESL=0X00;
        EA=1;        
        delay_ms(5);
        EADC=1;

}

void JUDGE_8_RES()//判斷AH3503上的電壓是否高于 基準值(是否檢測到了磁條)
{        
        uint8 J;
        uint8 K;

    for(J=0,K=0x80;J<8;J++)        
          {
                if(ADC_16RES[J]>JUDGE_16RES[J])
                   {
                           
                        ADC_8RES|=(K>>J);
        
                   }
            else
                   {
                    
                           ADC_8RES&=~(K>>J);        
                           
                   }

                }

        P3=~ADC_8RES;
}
void EEPROM_CLOSE()//關(guān)閉STC上的自帶EEPROM
{
        IAP_CONTR=0X00;  //禁止IAP動作
        IAP_CMD=0X00; //MS1:0 MS0:0對應(yīng)的是IAP無動作
        IAP_TRIG=0X00;
        IAP_ADDRH=0XFF;
        IAP_ADDRL=0XFF;

}
void EEPROM_ERASE(uint16 ADDR_ERASE)//擦除指定地址的EEPROM 的內(nèi)容
{
        IAP_CONTR=0X84;//由于我打算用11.0592M的晶振根據(jù)手冊推薦WT2:1 WT1:0 WT0:0
        IAP_CMD=0X03;//MS1:1 MS0:1對應(yīng)的是扇區(qū)擦除
        IAP_ADDRL=ADDR_ERASE;
        IAP_ADDRH=ADDR_ERASE>>8;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
        _nop_();

        //EEPROM_CLOSE();
               
}

uint8 EEPROM_READ(uint16 ADDR_READ)//讀取指定地址 EEPROM中的內(nèi)容
{
        uint8 DATA_READ;

        IAP_CONTR=0X84;//由于我打算用11.0592M的晶振根據(jù)手冊推薦WT2:1 WT1:0 WT0:0
        IAP_CMD=0X01; //MS1:0 MS0:1對應(yīng)的是讀取數(shù)據(jù)
    IAP_ADDRL=ADDR_READ;
        IAP_ADDRH=ADDR_READ>>8;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
        _nop_();

        DATA_READ=IAP_DATA;

        //EEPROM_CLOSE();
        return DATA_READ;

}
void EEPROM_PROGRAM(uint16 ADDR_PROGRAM,uint8 DATA_PROGRAM)        //將基準值寫入EEPROM中
{
        IAP_CONTR=0X84;//由于我打算用11.0592M的晶振根據(jù)手冊推薦WT2:1 WT1:0 WT0:0
        IAP_CMD=0X02; //MS1:1 MS0:0對應(yīng)的是對IC進行編程(將數(shù)據(jù)寫入IC中)
    IAP_ADDRL=ADDR_PROGRAM;
        IAP_ADDRH=ADDR_PROGRAM>>8;
        IAP_DATA=DATA_PROGRAM;
        IAP_TRIG=0x5a;
        IAP_TRIG=0xa5;
        _nop_();
        //EEPROM_CLOSE();

}

void JUDGE_READ()//將基準值從EEPROM中讀出
{  uint8 r;
   uint8 DATA_TEMP;
        for(r=0;r<8;r++)
    {
          DATA_TEMP=EEPROM_READ(0XE600+r*2);
          JUDGE_16RES[r]=EEPROM_READ(0XE600+r*2+1);
          JUDGE_16RES[r]<<=8;
          JUDGE_16RES[r]|=DATA_TEMP;

         }
                 
}

void JUDGE_PROGRAM()//連續(xù)寫入數(shù)據(jù)到EEPROM中
{
        uint8 w;
        for(w=0;w<8;w++)
        {
           EEPROM_PROGRAM(0XE600+w*2,(uint8)JUDGE_16RES[w]);
           EEPROM_PROGRAM(0XE600+w*2+1,(uint8)(JUDGE_16RES[w]>>8));
        }
}

main()
{        
        P2M1=0X00;//設(shè)置P2口為準雙向口
        P2M0=0X00;
        P3M1=0X00;//設(shè)置P3口為準雙向口
        P3M0=0X00;
        P4M1=0X00;//設(shè)置P4口為準雙向口
        P4M0=0X00;

    ADCINIT();
        delay_ms(100);
   if(0==EEPROM_KEY)//如果按鍵閉合將基準值寫入EEPROM中
          {
                JUDGE_FLAG=1;
                delay_ms(1500);                  

            EEPROM_ERASE(0XE600);
                  JUDGE_PROGRAM();
               
                EEPROM_CLOSE();
          }
         else//如果按鍵沒有按下讀取EEPROM中的數(shù)據(jù)
         {        
                 JUDGE_FLAG=0;
                  JUDGE_READ();
            EEPROM_CLOSE();
         }

   while(1)
  {
          JUDGE_8_RES();
  }         
}
void ADC_ISR()interrupt 5
{
        COUNTER_1++;
        
        
    if(COUNTER_1>10) //AD轉(zhuǎn)換10次后才算轉(zhuǎn)換成功
         {
                 CONVERT_TEMP=0;
                 CONVERT_TEMP=ADC_RES;
            CONVERT_TEMP<<=2;
            CONVERT_TEMP|=ADC_RESL;
            ADC_16RES[CH_1]=CONVERT_TEMP;
                if(JUDGE_FLAG)//將沒有磁條是的狀態(tài)記錄在數(shù)值中
                {
                JUDGE_16RES[CH_1]=(ADC_16RES[CH_1]+7);
                }
                 if(++CH_1>7){CH_1=0;}
                COUNTER_1=0;
               
         }

        ADC_CONTR=0X88|CH_1;
}

HALL.pdf

46.65 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

原理圖


作者: admin    時間: 2019-6-25 02:30
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天爽天天操 | 久久久久久久电影 | 亚洲一二三区精品 | 怡红院怡春院一级毛片 | 亚洲精品久久久久久首妖 | 综合久久av | 影音先锋中文字幕在线观看 | 国产一区二区三区在线看 | 国产av毛片 | h片在线看 | 成人午夜av | 免费在线视频一区二区 | 91久久国产综合久久 | 久久y| 日韩欧美成人精品 | 亚欧洲精品在线视频免费观看 | 国产一级特黄真人毛片 | 国产在线精品一区二区三区 | 在线播放中文字幕 | 丁香综合 | 国产精品国产三级国产aⅴ中文 | av在线三级 | 国产激情视频在线观看 | 一区二区日韩 | www.伊人.com| 伊人99| 久久久青草 | 国产区精品在线观看 | 欧美性成人 | 日韩av在线中文字幕 | 亚洲欧美激情网 | 在线只有精品 | 精品久久久久国产 | 久热国产精品视频 | 精品免费 | 日韩欧美一区二区三区免费观看 | 欧美激情一区二区三区 | 欧美一级片a | 久久综合影院 | 可以在线看的黄色网址 | 超级黄色一级片 |