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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1635|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

用紅外光發(fā)射接收管做輸入 單片機(jī)輸出一個(gè)低電平的程序問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
新手,做了一個(gè)用紅外光發(fā)射接收管做輸入,用用STC8G1K08A-8P做控制輸出一個(gè)低電平的程序,就是發(fā)射接收中間有東西,STC8G1K08A-8P的P33就輸出低電平。
電路和程序做好之后,實(shí)際測(cè)試發(fā)現(xiàn)STC8G1K08A-8P的P55輸入低電平之后,P33沒有反應(yīng),程序編譯能通過,不知道什么問題,是光控接收檢測(cè)的程序有問題嗎?但是直接把P55接地,P33也是一樣沒反應(yīng),找不到問題,求教大佬們能不能指點(diǎn)1,2。
電路和程序附上,請(qǐng)多多指教
下面是單片機(jī)程序,請(qǐng)多指教,謝謝(有些語句沒用上,忽略它)
#include <stc8g.h>
#include "intrins.h"
#include  "Timer0.h"
#include  "Timer1.h"
#include  "Delayms.h"
#include  "Delay_Long.h"

/*——————宏定義——————*/
#define FOSC 35000000L

#define const_IR_time1   25        /*光控觸發(fā)去抖動(dòng)延時(shí)的時(shí)間*/
#define const_BLow_time2   20    /*低電壓觸發(fā)去抖動(dòng)延時(shí)的時(shí)間*/


/*——————變量函數(shù)定義及聲明——————*/
unsigned char ucKeySec = 0;                        /*被觸發(fā)的編號(hào)*/

unsigned int  uiIRTimeCnt1 = 0;   /*光控觸發(fā)時(shí)去抖動(dòng)延時(shí)計(jì)數(shù)器*/
unsigned char ucIRLock1 = 0;      /*光控觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int  uiBLowTimeCnt2 = 0;   /*低電壓觸發(fā)后去抖動(dòng)延時(shí)計(jì)數(shù)器*/
unsigned char ucBLowLock2 = 0;      /*低電壓觸發(fā)后自鎖的變量標(biāo)志*/

unsigned int  uiHVTimeCnt = 0;     /*觸發(fā)后輸出延時(shí)計(jì)數(shù)器*/

//unsigned int  uiVoiceCnt = 0;      /*蜂鳴器鳴叫的持續(xù)時(shí)間計(jì)數(shù)器*/

unsigned int  HVDTcnt = 3000;           //輸出延時(shí) 時(shí)間(mS)

//unsigned int  uiVoiceCnt = 0;  /*蜂鳴器鳴叫的持續(xù)時(shí)間計(jì)數(shù)器*/

/* IO口定義 */
sbit IR_IN = P5^5;        /*定義接收光控輸入引腳,光控對(duì)射時(shí)此腳為高電平*/
sbit IT_OUT = P5^4;            /*定義發(fā)射光控輸出   方波*/
sbit BUZZER = P3^3;     /*定義蜂鳴器,低電壓時(shí)發(fā)出嘀嘀音,重置滿電電池后消聲*/
sbit HV_OUT = P3^2;     /*輸出引腳,低電平時(shí)輸出電壓給后級(jí)*/
sbit BLOW = P3^1;        /*電池電壓低于6V檢測(cè),蜂鳴報(bào)警提醒*/

/* IO口模式定義 */
void  Init_Pin(void)
{
//        P3M0 = 0x08;    //P33,推挽輸出,P32高陰輸入
//        P3M1 = 0x04;         //P31,P30準(zhǔn)雙向口
//        P3DR |= 0x0e;
//     P3IE = (P3IE & ~0x08) | 0x06;
        P3M0 = 0x0c;         //P33,推挽輸出,P32開渥輸入,P3.1雙向,P30高阻
        P3M1 = 0x05;


      
        P5M0 = 0x10;   //設(shè)置P5.4為推挽輸出,P5.5為雙向模式
        P5M1 = 0x00;
  }

/* IO口初始狀態(tài)定義 */
void  Init_IO(void)
{
        BUZZER = 0;
        HV_OUT = 1;
        IR_IN  = 1;
        BLOW = 1;
        IT_OUT = 1;
}


/* 定時(shí)器T0初始化為1ms產(chǎn)生中斷 @35MHz */
void Timer0Init(void)               
{
        AUXR |= 0x80;        //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0xF0;        //設(shè)置定時(shí)器模式
      
        TMOD |= 0x01;                    /*set timer0 as mode1 (16-bit)*/
      
//        TL0 = T1MS % 256;                /*initial timer0 low byte*/
//        TH0 = T1MS / 256;                /*initial timer0 high byte*/
      
        TL0 = 0x48;                //設(shè)置定時(shí)初值 65536-35*1000
        TH0 = 0x77;                //設(shè)置定時(shí)初值
      
        TF0 = 0;                //清除TF0標(biāo)志
      
//        ET0 = 1;    //允許定時(shí)器T0溢出中斷
//        TR0 = 1;        //定時(shí)器0開始計(jì)時(shí)
//        EA = 1;     // 打開總中斷
   }



/* 定時(shí)器T1初始化為1ms產(chǎn)生中斷 @35MHz */
void Timer1Init(void)  //1毫秒@35MHz
{
        AUXR |= 0x40;                       //定時(shí)器時(shí)鐘1T模式
        TMOD &= 0x0F;                        //設(shè)置定時(shí)器模式
        TL1 = 0x48;                        //65536-35/1000
        TH1 = 0x77;
      
//        TL0 = T1MS % 256;                /*initial timer0 low byte*/
//        TH0 = T1MS / 256;                /*initial timer0 high byte*/
      
        TF1 = 0;
      
//        ET1 = 1;                        //使能定時(shí)器中斷
//        TR1 = 1;                        //啟動(dòng)定時(shí)器
}



/* 固定延時(shí)1毫秒 @35MHz */
void Delay1ms()                //@35MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 46;
        j = 113;
        do
        {
          while (--j);
        } while (--i);
}

/* n毫秒延時(shí)函數(shù) 參數(shù)給幾 就延時(shí)幾毫秒 */
void delay_ms(unsigned int ms)
{
        while(ms--)
        {
                Delay1ms();
        }
}


/**
* @brief  打開定時(shí)器
* @param  無
* @retval 開定時(shí)器
**/
void Init_Peripheral(void)
{
        ET0 = 1;    /*允許定時(shí)中斷*/
        TR0 = 1;    /*啟動(dòng)定時(shí)中斷*/
      
        ET1 = 1;    /*允許定時(shí)中斷*/
        TR1 = 1;    /*啟動(dòng)定時(shí)中斷*/
      
        EA = 1;     /*開總中斷*/

}

/* 系統(tǒng)初始化 */
void  Init(void)    //初始化
{
         Init_Pin();
         Init_IO();
         Timer0Init();
         Timer1Init();
//         Init_Peripheral();

}
void Key_Scan(void);

/* 定時(shí)器T0中斷處理函數(shù),輸出  方波 */
void TM0_Isr() interrupt 1
{
        static unsigned int cnt = 0;
        static bit flag = 0;
        cnt++;
       if(cnt >= 10)
        {
           cnt = 0;
           flag = ~flag;
           IT_OUT = flag;
           }
        TF0 = 0;
        TL0 = 0x48;                //設(shè)置定時(shí)初值 65536-35*1000
        TH0 = 0x77;                //設(shè)置定時(shí)初值
  }

/* 檢測(cè)P55,P31口是否為低電平 */
void TM1_Isr() interrupt 3
{
        Key_Scan();   //檢測(cè)P55口為低電平時(shí),P32輸出低電平,p31為低電平時(shí),p33間隔0.5秒輸出高低電平
}

/* 掃描光控和低電壓輸入,低電平為有動(dòng)作 */
void Key_Scan(void)   //掃描P55,P31口函數(shù)
{
        /*掃描P55,光控對(duì)射中間物體有無檢測(cè)*/
  if(IR_IN == 1)        /*如果光控中間沒有遮擋(3腳P55為高電平),將一些標(biāo)志位及時(shí)清零*/
        {
                ucIRLock1 = 0;     /*光控自鎖標(biāo)志位清0*/
                uiIRTimeCnt1 = 0;  /*光控觸發(fā)去抖動(dòng)延時(shí)計(jì)數(shù)器清零*/
            }
      
        else if(ucIRLock1 == 0)  /*如果光控中間有被遮擋,(外部給3腳P55拉低為低電平),*/
        {
                uiIRTimeCnt1 ++;
                if(uiIRTimeCnt1 > const_IR_time1)          //消抖
                {
                        uiIRTimeCnt1 = 0;
                        ucIRLock1 = 1;         /*自鎖標(biāo)志位置位,避免一直觸發(fā)*/

                        ucKeySec = 1;      /*觸發(fā)*/
//                        uiVoiceCnt = const_voice_short;  /*蜂鳴器短叫*/      
                }
        }
                       
//  }
//         }
      
        /*掃描P31,電池電壓大于6.1V時(shí)為高電平*/
        if(BLOW == 1)                        /*電池電壓大于6.1V時(shí)此Pin為高電平,將一些標(biāo)志位及時(shí)清零*/
          {
                ucBLowLock2 = 0;                        /*低電壓自鎖標(biāo)志位清0*/
                uiBLowTimeCnt2 = 0;                /*低電壓去抖動(dòng)延時(shí)計(jì)數(shù)器清零*/

           }
      
         else if(ucBLowLock2 == 0)          /*如果電池電壓低于6.1V, 外部給P31拉低為低電平;*/
           {
                uiBLowTimeCnt2 ++;
                if(uiBLowTimeCnt2 > const_BLow_time2)
                 {
                        uiBLowTimeCnt2 = 0;
//                        ucBLowLock2 = 1;     /*自鎖標(biāo)志位置位,避免一直觸發(fā)*/
                        ucKeySec = 2;          /*低電壓觸發(fā)*/
                   }
             }      
}

/**
* @brief  服務(wù)函數(shù)
* @param  無
* @retval 根據(jù)掃描得到的值,進(jìn)行處理
**/
void key_Service(void)
{
        switch(ucKeySec)
        {
                case 1: /*觸發(fā)*/
                                 
//                                HV_OUT = 0;         //輸出低電平,打開PMOS管
                                while(--HVDTcnt)
                                {  
                                  HV_OUT = 0;         //輸出低電平,打開PMOS管,給后面電路供電
//                   uiHVTimeCnt ++;
//                if(uiHVTimeCnt > count_HV_time1)                //輸出低電平延時(shí)
//                {
//                      uiHVTimeCnt = 0;
                                  }
                        HV_OUT = 1;
                             ucKeySec = 0;     /*響應(yīng)光控觸發(fā)服務(wù)處理程序后,編號(hào)清零,避免一直觸發(fā)*/
                    break;

                case 2:   /*電壓低于6V,蜂鳴器斷續(xù)響提示*/
                       if(BLOW == 0)
                           {
                                BUZZER = !BUZZER;
                               delay_ms(500);
                            }
                          
                                else if(BLOW == 1)
                                {
                                        BUZZER = 0;
                                        ucKeySec = 0;
                                 }
                   break;                       
        }
  }

void main()                //主函數(shù)
{
        Init();
//        Delay_Long(100);
        Init_Peripheral();

        while(1)
        {
            key_Service();
                //Key_Scan();
                }
}

20231230_140446.png (22.95 KB, 下載次數(shù): 45)

20231230_140446.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 2024-1-2 10:55 | 只看該作者
你的接收處理代碼在中斷里運(yùn)行
但又不開啟中斷
當(dāng)然沒反應(yīng)



回復(fù)

使用道具 舉報(bào)

板凳
ID:1075398 發(fā)表于 2024-1-2 13:46 | 只看該作者
lkc8210 發(fā)表于 2024-1-2 10:55
你的接收處理代碼在中斷里運(yùn)行
但又不開啟中斷
當(dāng)然沒反應(yīng)

感謝大佬回復(fù),中斷是打開了的,在主程序里面打開的,現(xiàn)在上傳的是修改后的,可以有反應(yīng)了,但是時(shí)間很短,但其實(shí)程序里寫了如果P55低電平,P32就輸出低電平3秒時(shí)間,就是沒找到它為什么不能延時(shí)3秒的原因
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2024-1-2 15:53 | 只看該作者
Lthrwy 發(fā)表于 2024-1-2 13:46
感謝大佬回復(fù),中斷是打開了的,在主程序里面打開的,現(xiàn)在上傳的是修改后的,可以有反應(yīng)了,但是時(shí)間很短 ...

應(yīng)為那斷
                        while(--HVDTcnt)
                        {
                                HV_OUT = 0;         //輸出低
                        }
沒加延時(shí)
所以幾十毫秒后就會(huì)跳出循環(huán)
在循環(huán)里加個(gè)delay1ms()延時(shí)就可以了
回復(fù)

使用道具 舉報(bào)

5#
ID:1075398 發(fā)表于 2024-1-2 18:25 | 只看該作者
我這樣寫,while(--HVDTcnt); 它應(yīng)該延時(shí)才對(duì),好像也沒延時(shí),
所以就改成這樣了
while(--HVDTcnt)
  {
      HV_OUT = 0;         //輸出低
                        }
這 樣,好像就是一下子就出去了,問題應(yīng)該就是出在這兒,明天改成delay1ms()再試
回復(fù)

使用道具 舉報(bào)

6#
ID:1075398 發(fā)表于 2024-1-3 10:49 | 只看該作者
lkc8210 發(fā)表于 2024-1-2 15:53
應(yīng)為那斷
                        while(--HVDTcnt)
                        {

確定了,就是延時(shí)這里有問題,程序邏輯沒有問題,出問題的是賦的初值,3000只有大約1mS左右,而不是我想的3秒,但我一直當(dāng)是3秒,,學(xué)藝不精害人,
再次感謝大佬,
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 超碰精品在线 | 亚洲欧洲成人av每日更新 | 国产片一区二区三区 | 精品综合久久久 | 免费一级黄色录像 | 久久伊人影院 | 欧美一级免费看 | 国产欧美日韩一区二区三区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 久久精品国产一区二区三区 | 在线视频 欧美日韩 | 久久人人网 | 精品国产成人 | 九九热精品在线 | 一区二区三区亚洲视频 | 天堂在线中文字幕 | 成人二区| 亚洲欧洲小视频 | 久草久草久草 | 精品一区二区三区免费毛片 | 午夜爱爱网 | 亚欧午夜| 亚洲男人的天堂网站 | 国产区精品 | 日日爱夜夜操 | 成人在线国产 | 日本精品免费 | 在线国产一区 | 国产乱精品一区二区三区 | 国产一级片 | 欧美成人激情视频 | 中文字幕在线第一页 | 国产在线播 | 国产一级片网站 | 亚洲精品美女视频 | 夜夜草| 99亚洲精品 | 成人在线免费视频 | 99九九久久 | 色婷婷久久久久swag精品 | 天天干天天玩天天操 |