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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1857|回復: 4
打印 上一主題 下一主題
收起左側

關于單片機定時器中用按鍵控制蜂鳴器

[復制鏈接]
跳轉到指定樓層
樓主
ID:1000562 發表于 2022-2-25 10:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
其中,我設置的按鍵對蜂鳴器進行控制,但是在仿真的時候,按鍵按下,蜂鳴器并不響,同時數碼管的倒計時顯示也受到了影響
#define _MAIN_C
#include "use.h"
#include "main.h"
#include "time.h"
#include "key.h"
bit flag1s;
sbit nsg = P2^0;
sbit nsy = P2^1;
sbit nsr = P2^2;
sbit weg = P2^5;
sbit wey = P2^4;
sbit wer = P2^3;
sbit k1 = P3^5;
sbit k2 = P3^6;
sbit bp = P1^0;
int key1 = 1;
int key2 = 1;
int Bun=0;

uchar count1s,NS_time,WE_time;
uchar GreenTime=30,RedTime=35;
uchar index=0;
enum eStaSysterm StaSysterm=NormalRun;
void Beep_on()
{
        bp=~bp;
        Delay10us(2000);
}
void keypros1()
{
        if(k1 == 0)                  
        {         
                if(wer == 1)
                {
                                key1 = 2;
                                Bun=10;
                }
        }
        while(!k1);                        
}
void keypros2()
{
        if(k2 == 0)                  
        {        
                if(nsr == 1)
                {
                        key2 = 2;
                        Bun=10;
                }
        while(!k2);        
        }               
}

void main()
{
        EA=1;                                                                  
        InintTimer0();                                                  
        while(1)
        {        
                LEDScan();                                                  
                KeyDriver();        
                keypros2();
                keypros1();
                if((Bun > 0 && key1 == 2) || (Bun > 0 && key2 == 2)  )
                {
                        Beep_on();
                        Bun--;
                }
                if(Bun<0)
                {
                        key1=1;
                        key2=1;
                }
                if(flag1s)
                {
                        flag1s=0;
                        NS_time--;                                          
                        WE_time--;
                }
        }
}
void InintTimer0()
{
        TMOD=0X01;
        TH0=0X4C;
        TL0=0X00;
        ET0=1;
        TR0=1;
}
void Timer0() interrupt 1
{
        TH0=0XBB;
        TL0=0X00;
        KeyScan();
        if(++count1s<50)        return;
        count1s=0;
        if(StaSysterm==NormalRun) flag1s=1;         
}
void LEDScan()
{
         if(StaSysterm==NormalRun)                        
         {
                if(NS_time==0 || WE_time==0)
                {
                        switch(index)                              
                        {
                                case 0:
                                {
                                        index=1;
                                        NS_time=GreenTime;
                                        WE_time=RedTime;
                                        P2=0x09;
                                }break;
                                case 1:
                                {
                                        index=2;
                                        NS_time=RedTime-GreenTime;
                                        P2=0X0A;                                       
                                }break;
                                case 2:
                                {
                                        index=3;
                                        NS_time=RedTime;
                                        WE_time=GreenTime;
                                        P2=0X24;
                                }break;
                                case 3:
                                {
                                        index=0;
                                        WE_time=RedTime-GreenTime;
                                        P2=0X14;        
                                }break;
                                default:break;
                        }
                }
                Seg_Display(NS_time/10,0);
                Seg_Display(NS_time%10,1);
                Seg_Display(WE_time/10,2);
                Seg_Display(WE_time%10,3);
        }
        else if(StaSysterm==UrgentRun)
        {                                                               
                P2=0x12;
                Delayms(200);
                P2=0x00;
                Delayms(200);
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2022-2-25 15:23 | 只看該作者
void Beep_on()
{
        bp=~bp; //蜂鳴器分有源、無源,不響是用了后者或器件問題
        Delay10us(2000);//蜂鳴器觸發后延時,程序中更新顯示要等這個結束
}
回復

使用道具 舉報

板凳
ID:1006187 發表于 2022-2-25 15:33 | 只看該作者
沒仔細看,不過你KEYSCAN放中斷里不對,軟件邏輯有問題
回復

使用道具 舉報

地板
ID:135723 發表于 2022-2-25 21:48 | 只看該作者
蜂鳴器,按鍵掃描中都不應該有軟件延時這種阻塞延時,通過定時器計數方式實現無阻塞延時。
回復

使用道具 舉報

5#
ID:123289 發表于 2022-2-26 10:50 | 只看該作者
不看程序了,查查有沒有在中斷中用了DELAY()!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黑人狂野猛交老妇 | 久久免费观看视频 | 天天想天天干 | 日韩av在线免费 | 欧美精品成人影院 | 国产在线播 | 日韩一区二区在线视频 | 91麻豆精品国产91久久久更新资源速度超快 | 日本黄色大片免费 | av天天干 | 一区二区三区四区不卡视频 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 精品国产免费一区二区三区演员表 | 91精品国产一区二区三区香蕉 | 精品日本久久久久久久久久 | 天天天天操 | 毛片99| 亚洲狠狠爱一区二区三区 | 成人网在线观看 | 日韩在线欧美 | av在线电影网站 | 亚洲一区二区中文字幕 | 99re视频 | 国产成人精品免费 | 成人在线免费观看 | av日韩高清| 欧美8一10sex性hd | 亚洲精品美女视频 | 九九亚洲 | 羞羞的视频在线 | 亚洲国产成人在线 | 91久久精品一区二区二区 | 中文字幕亚洲区一区二 | 午夜性色a√在线视频观看9 | 国产高清自拍视频在线观看 | 午夜不卡一区二区 | 精品亚洲91| 玩丰满女领导对白露脸hd | 亚洲欧美综合精品久久成人 | 日本一区二区三区四区 | 亚洲成人一区 |