欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4160|回復: 3
收起左側

求教,對射式光電開關連接單片機的使用方法

[復制鏈接]
ID:676703 發表于 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;
        }
}


圖一

圖一

光電開關使用說明

光電開關使用說明

仿真電路圖

仿真電路圖
回復

使用道具 舉報

ID:94031 發表于 2020-5-30 16:14 | 顯示全部樓層
說明已經很清楚,三根線一個接電源負,一根接電源正,信號輸出接計數中斷輸入,模塊槽中有東西經過計數一次。
回復

使用道具 舉報

ID:676703 發表于 2020-5-30 17:51 | 顯示全部樓層
xuyaqi 發表于 2020-5-30 16:14
說明已經很清楚,三根線一個接電源負,一根接電源正,信號輸出接計數中斷輸入,模塊槽中有東西經過計數一次 ...

有物體經過時,開關輸出高電平是嗎?程序是按照單片機輸入低電平寫的,那就要改一下?
回復

使用道具 舉報

ID:213173 發表于 2020-5-30 18:01 | 顯示全部樓層
本帖最后由 wulin 于 2020-5-30 21:22 編輯

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表