1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 求教,對射式光電開關連接單片機的使用方法 [打印本頁]

作者: carrot1111    時間: 2020-5-30 15:27
標題: 求教,對射式光電開關連接單片機的使用方法
      需要使用51單片機做一個模擬流水線產品計數器的設計,之前沒有用過對射式光電開關(如下圖1)。仿真圖和單片機程序都設計得差不多,現在拿到器件,看著說明書也不太懂,希望用過這個器件或者知道怎么用的朋友幫忙解釋一下,非常感謝。仿真圖里接單片機中斷串口的開關,模擬光電開關的作用,之前閱讀資料后寫的代碼,當開關輸入一個低電平的時候,單片機外部中斷計數一次。本人是初學單片機的小白==

#include<AT89x51.H>
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;
uchar duan[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位碼
uchar wei[2]={0X01,0X02}; //位的控制端
uint c,v,date; //定義數據類型
uint dispcount=0;

sbit led=P1^4;         //定義P1.4口是led
/*****延時函數*****/
void delay(uchar t)
{
        uchar i,j;
        for(i=0;i<t;i++)
                for(j=13;j>0;j--);
}
/*****數碼管動態掃描:數據轉換的實現*****/
void xianshi()
{
        c=date/10;      //求十位
        v=date%10;      //求個位
        P2=wei[0];                //2.0口位選高位
        P0=duan[c];                //十位數的段選
        delay(50);
        P2=wei[1];                //2.1口位選地位
        P0=duan[v];                //個位數的段選
        delay(50);
}
/*****中斷函數:外部中斷的實現*****/
void ExtInt0() interrupt 0   //中斷服務程序
{
        dispcount++;        //外部中斷一次,計數加一
        if(dispcount>50)   //計數范圍0~50
                dispcount=1;
}
/***** Timer0Init : 定時器0初始化*****/
void Timer0Init()
{
        TMOD|=0X01; //選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
        TH0=0XFC;   //給定時器高八位賦初值,定時1ms
        TL0=0X18;        
        ET0=1;      //打開定時器0中斷允許
        EA=1;       //打開中斷總開關
        TR0=1;      //打開定時器0                        
}
/*****主函數*****/
void main()
{
//        static u16 i;
        TCON=0x01;     //中斷設置 TCON寄存器(外部中斷觸發方式設)
        IE|=0x81;       //IE外部中斷0請求標志位   (總中斷開關)
        Timer0Init();  //定時器0初始化
        while(1)
        {
                date=dispcount;
                xianshi();           //調用數碼管顯示   
        }
}
/*****void Timer0() interrupt 1 : 定時器1中斷函數*****/
void Timer0() interrupt 1
{
        static u16 i;
        TH0=0XFC;        //給定時器賦初值,定時1ms
        TL0=0X18;
        if(dispcount%10==0&&dispcount!=0)          //判斷外部中斷是否達到10的整數倍,達到時使led閃爍兩秒
        {
                i++;
                if(i%100==0)       //100ms
                        led=~led;  //led閃爍
                if(i>=2000)       //當時間大于2s后,led熄滅
                {
                        i=2000;
                        led=1;
                }
        }
        else                 //當不滿足外部中斷條件時,led保持關閉狀態
        {
                led=1;   
                i=0;
        }
}


7KM3WM8DBFY[MA45SV0K$W6.png (368.52 KB, 下載次數: 61)

圖一

圖一

NGEFDNWMCOYI2E[XE2~K{{4.png (58.24 KB, 下載次數: 41)

光電開關使用說明

光電開關使用說明

F8`B]Z$%L{9386`5(T{YA{7.png (47.23 KB, 下載次數: 39)

仿真電路圖

仿真電路圖

作者: xuyaqi    時間: 2020-5-30 16:14
說明已經很清楚,三根線一個接電源負,一根接電源正,信號輸出接計數中斷輸入,模塊槽中有東西經過計數一次。
作者: carrot1111    時間: 2020-5-30 17:51
xuyaqi 發表于 2020-5-30 16:14
說明已經很清楚,三根線一個接電源負,一根接電源正,信號輸出接計數中斷輸入,模塊槽中有東西經過計數一次 ...

有物體經過時,開關輸出高電平是嗎?程序是按照單片機輸入低電平寫的,那就要改一下?
作者: wulin    時間: 2020-5-30 18:01
本帖最后由 wulin 于 2020-5-30 21:22 編輯

使用說明很清楚:槽中無遮擋輸出低電平,有遮擋輸出高電平。你對產品計數,傳送帶上就得滿足上述條件。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1