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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2118|回復: 4
收起左側

求改進一下單片機程序,使我可以只通過一個按鍵達到開關蜂鳴器的效果

[復制鏈接]
ID:474631 發表于 2019-2-5 22:56 | 顯示全部樓層 |閱讀模式
下面的單片機代碼只能按住k1時開松開就關 不能達到按一次改變一次狀態的效果 求大神解釋一下為什么 多謝了


#include "reg51.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit k1=P2^1;
sbit beep=P1^5;
void delay(u16 i)
{
        while(i--);
}
void jiao()
{
        beep=~beep;
        delay(2000);
}
u8 key()
{
        if(k1==0)
        {
                delay(1000);
                if(k1==0)
                {
                        delay(1000);
        return 1;
                }
                while(k1==0);
        }
        else
                return 0;
}
void main()
{
        while(1)
        {
                if(key()==1)
                jiao();
                else
                beep=1;
                        
        }

}


回復

使用道具 舉報

ID:94031 發表于 2019-2-6 08:51 | 顯示全部樓層
應該設一個標志,記錄按下并彈上的次數,蜂鳴器根據按下并彈上的次數執行響與不響。你現在是按下響,放開不響。
回復

使用道具 舉報

ID:164602 發表于 2019-2-6 09:18 | 顯示全部樓層
你的程序就是這樣的功能——按著響,松手停。而且不一直按著,只快速地按一下都是不會響的——全靠while(1)才響的。
你的思路,使得程序不好改了,換個新的吧
#include<reg51.h>
sbit k3=P3^2;
sbit Beep =  P1^5 ;
void Delay(unsigned int i);
void Delay10ms(unsigned int c);
void main(void)
{
        unsigned int i,n,f;
        while(1)
        {       
                if(k3==0)
                {
                        Delay10ms(1);
                        if(k3==0)
                        {
                            if(f==0)
                            {n=0;
                        while(n<1000)
                        {
                        Beep= 1;
                        Delay(100);
                        Beep= 0;
                        Delay(100);
                    n++;
                        }
                                    f=1;
                             }
                                 else
                 {n=0;
                         while(n<750)
                         {
                         Beep= 1;
                         Delay(150);
                         Beep= 0;
                         Delay(150);
                         n++;
                         }
                                     f=0;
                             }
                            while((i<50)&&(k3==0))
                            {
                                    Delay10ms(1);
                                    i++;
                            }
                            i=0;
                        }
                }
        }               
}
void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void Delay(unsigned int i)
{
    for(i; i > 0; i--);
}
程序功能:按奇數次按鍵一個音,按偶數次響另一個音。
回復

使用道具 舉報

ID:474631 發表于 2019-2-6 12:50 來自觸屏版 | 顯示全部樓層
HC6800-ES-V2.0 發表于 2019-2-6 09:18
你的程序就是這樣的功能——按著響,松手停。而且不一直按著,只快速地按一下都是不會響的——全靠while(1) ...

感謝 不過那個f的作用是啥...看不懂誒
回復

使用道具 舉報

ID:7485 發表于 2019-2-6 18:43 | 顯示全部樓層
設置一個標志位,按鍵每按一次,標志位取反一次。然后根據標志位來判斷是否驅動蜂鳴器。

按鍵的檢測和普通的按鍵檢測相同。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品日韩在线 | 五月天国产在线 | 黄网站色大毛片 | 日本一本在线 | 日韩毛片中文字幕 | 国产日产欧产精品精品推荐蛮挑 | 中文字幕1区2区3区 日韩在线视频免费观看 | 久久久久国产精品午夜一区 | 一区二区三区免费观看 | 亚洲综合婷婷 | 日韩精品999 | 国产视频中文字幕在线观看 | 日韩av免费在线观看 | 国产精品久久久久无码av | 成人精品毛片国产亚洲av十九禁 | 国产亚洲一区二区三区 | 91精品国产91久久久久久吃药 | 巨大荫蒂视频欧美另类大 | 久久国产美女视频 | 九九亚洲 | 亚洲区在线| 精品欧美一区二区精品久久久 | 国产欧美日韩一区二区三区在线观看 | 久久i | 蜜桃免费av| 精品一二三 | 欧美人妖网站 | 国产精品91久久久久久 | 一级黄a视频 | 国产中文字幕在线 | 国产高清在线精品 | 青青久在线视频 | 色视频在线播放 | 欧美成人免费在线 | 午夜视频精品 | 欧美性另类 | 国产精品夜间视频香蕉 | 操久久 | 一区| 五月综合激情婷婷 | 国产成人在线播放 |