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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3962|回復: 5
收起左側

STC89C52單片機問題,單個按鍵控制燈常亮和蜂鳴器響

[復制鏈接]
ID:601503 發表于 2019-8-19 10:45 | 顯示全部樓層 |閱讀模式
請教大家一個問題,我寫了一個程序用單個按鍵控制燈常亮和蜂鳴器響(警報狀態),另外一個按鍵按下后取消警報?墒窍螺d后發現,燈一開始就是閃爍狀態,按下按鍵后才變常亮。請大家幫我看看哪里的問題。以下是源碼。



#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

sbit k1=P3^1;
sbit k2=P3^0;
sbit P20=P2^2;

sbit beep=P1^5;

u8 start=0;

/*******************************************************************************
* 函 數 名         : delay
* 函數功能                   : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}

void sound()
{
        u8 i=100;
        while(i--)
        {
                beep=~beep;
                delay(100);        
        }
}
void keypros()
{
        if(k1==0)                         //開始
        {
                delay(1000);
                if(k1==0)
                {
                        start=1;               
                }
                while(!k1);
        }
        if(k2==0)                          //停止
        {
                delay(1000);
                if(k2==0)
                {
                        start=0;               
                }
                while(!k2);
        }
}
/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        P20=0;          //程序初始化,令二極管不發光
        while(1)
        {
               
                keypros();
                if(start==1)
//                if(k1==0)
                {        
                         delay(100);   //延時一下  

//               if(k1==0)  
                        sound();
                }
                else
                {
                        beep=1;
//                        while(k1==0);

                   delay(10000);
                 P20=~P20; //二極管轉換發光狀態,返回繼續循環檢測
                }               
        }               
}


回復

使用道具 舉報

ID:96682 發表于 2019-8-19 14:05 | 顯示全部樓層
樓主應該從主函數那里查找問題
回復

使用道具 舉報

ID:560467 發表于 2019-8-19 15:15 | 顯示全部樓層
這個可能是你外部的電路連接的問題,按下按鍵才是將引腳拉高而不是拉低,不按下就是將引腳拉低
回復

使用道具 舉報

ID:220936 發表于 2019-8-19 17:13 | 顯示全部樓層
開始u8 start=0;不按按鍵就到else了, P20=~P20; 一直在取反。
回復

使用道具 舉報

ID:588518 發表于 2019-8-19 18:06 | 顯示全部樓層
主函數分析一下,燈閃爍的觸發條件,應該是那里沒處理好。
回復

使用道具 舉報

ID:437615 發表于 2019-8-20 09:40 | 顯示全部樓層
這個程序我也有點看不懂,感覺樓主用start控制的輸出口,如果是輸出口的話start應該有引腳定義,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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