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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3519|回復(fù): 12
收起左側(cè)

請(qǐng)問(wèn)怎么寫(xiě)這個(gè)10s燈滅的語(yǔ)句 幫下忙解解惑

  [復(fù)制鏈接]
ID:241249 發(fā)表于 2018-2-8 21:52 | 顯示全部樓層 |閱讀模式
按下按鍵燈亮 松按鍵燈滅
按下按鍵10s燈滅(一直按按鍵不松燈也滅)

用計(jì)時(shí)器完成10s的計(jì)時(shí)

請(qǐng)問(wèn)怎么寫(xiě)這個(gè)10s燈滅的語(yǔ)句

關(guān)鍵是一直按著按鍵如何能讓燈滅呢

寫(xiě)了if語(yǔ)句不能保證按鍵按著還能夠燈滅
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2018-2-9 08:29 | 顯示全部樓層
weiwei850113 發(fā)表于 2018-2-8 21:53
困擾我好幾天了

就是寫(xiě)不出按鍵按著燈滅的語(yǔ)句

給你一個(gè)例程,按鍵和LED端口根據(jù)你的實(shí)際電路定義
#include <AT89X52.H>
#define uint unsigned int
#define uchar unsigned char
sbit key=P3^4;                                        //按鍵端口定義       
sbit LED=P1^0;                                        //發(fā)光管端口定義
uchar Cnt50ms=0;                                //中斷計(jì)數(shù)變量

void Timer0Init()                                //50毫秒@12.000MHz
{
        TMOD= 0x01;                                        //設(shè)置定時(shí)器模式
        TL0 = 0xB0;                                        //設(shè)置定時(shí)初值
        TH0 = 0x3C;                                        //設(shè)置定時(shí)初值
//        TF0 = 0;                                                //清除TF0標(biāo)志
//        TR0 = 1;                                                //定時(shí)器0開(kāi)始計(jì)時(shí)
        EA=1;                                                        //開(kāi)總中斷
        ET0=1;                                                //開(kāi)定時(shí)器0中斷       
}
void keyscan()                                        //按鍵識(shí)別子程序
{
        static bit key_sign=0;        //按鍵有效標(biāo)志
        static uint  count=0;        //計(jì)數(shù)變量                       
        if(key==0)                                        //檢測(cè)按鍵如果為0
        {
                count++;                                        //消抖計(jì)數(shù)
                if((count>=500)&&(key_sign==0))
                {                       
                        key_sign=1;                        //按鍵有效標(biāo)志置1
                        Cnt50ms=0;                        //中斷計(jì)數(shù)變量清0
                        TR0 = 1;                                //啟動(dòng)定時(shí)器
                        LED=0;                                //發(fā)光管亮
                }
        }
        else                                                        //按鍵抬起
        {
                key_sign=0;                                //按鍵有效標(biāo)志清0
                count=0;                                        //消抖計(jì)數(shù)清0
                LED=1;                                        //發(fā)光管滅
                TR0=0;                                        //關(guān)閉定時(shí)器
        }
}
void main()
{
        Timer0Init();                                //定時(shí)器0初始化
        while(1)
        {
                keyscan();                                //按鍵掃描
        }
}
void timer0() interrupt        1        //定時(shí)器0中斷
{
        TL0 = 0xB0;                                        //設(shè)置定時(shí)初值
        TH0 = 0x3C;                                        //設(shè)置定時(shí)初值
        Cnt50ms++;
        if(Cnt50ms>=200)                        //10秒
        {
                Cnt50ms=0;
                LED=1;                                        //發(fā)光管滅
                TR0=0;                                        //關(guān)閉定時(shí)器
        }
}

評(píng)分

參與人數(shù) 2黑幣 +18 收起 理由
通天塔 + 8 很給力!
weiwei850113 + 10 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:47286 發(fā)表于 2018-2-10 22:30 | 顯示全部樓層
隨便寫(xiě)了下思路 供你參考吧

這個(gè)思路的問(wèn)題是 不管什么時(shí)候 都有個(gè)防抖延時(shí)的損失 等于程序的實(shí)時(shí)性有點(diǎn)差 不過(guò)一般防抖都是15~20ms 對(duì)于你初學(xué) 不要求運(yùn)行精度的情況下沒(méi)什么影響 至少人去按鍵時(shí)感覺(jué)不出來(lái)有什么差別

嚴(yán)謹(jǐn)?shù)脑掃是用標(biāo)記或者進(jìn)程來(lái)控制狀態(tài)好 你慢慢來(lái) 將來(lái)會(huì)搞得很好的

如果 按鍵按下
{
        防抖延時(shí)
        如果 按鍵依舊按下
        {
                如果 計(jì)數(shù)器01清零標(biāo)記==0
                {
                        計(jì)數(shù)器01清零
                        計(jì)數(shù)器01清零標(biāo)記置位
                }
                如果 燈為滅狀態(tài)
                {
                        開(kāi)燈
                }
                如果 計(jì)數(shù)器01達(dá)到設(shè)定值
                {
                        如果 燈為開(kāi)狀態(tài)
                        {
                                關(guān)燈
                                等待按鍵釋放
                                計(jì)數(shù)器01清零標(biāo)記清零
                        }
                }
        }
}

如果 按鍵松開(kāi)(等同于未按下)
{
        防抖延時(shí)
        如果 按鍵松開(kāi)
        {
                如果 等為亮狀態(tài)
                {
                        關(guān)燈
                }
        }
        計(jì)數(shù)器01清零標(biāo)記清零
}

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:241249 發(fā)表于 2018-2-8 21:53 | 顯示全部樓層
困擾我好幾天了

就是寫(xiě)不出按鍵按著燈滅的語(yǔ)句
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2018-2-8 23:17 | 顯示全部樓層
用同一個(gè)按鍵 利用外部雙向中斷(上升沿+下降沿)處理。
回復(fù)

使用道具 舉報(bào)

ID:280994 發(fā)表于 2018-2-8 23:44 | 顯示全部樓層
按鍵觸發(fā)檢測(cè)的方式改為邊沿檢測(cè),這樣按住的話沒(méi)有邊沿信號(hào)不久可以了嘛

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:126165 發(fā)表于 2018-2-9 09:59 | 顯示全部樓層
按鍵觸發(fā)的是計(jì)時(shí)器的亮燈程序即可,如果不能用中斷,可以選擇在計(jì)時(shí)程序中加入if (key==0)break,直接跳出子程序。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:282917 發(fā)表于 2018-2-10 19:59 | 顯示全部樓層
掃描到按鍵按下以后,計(jì)時(shí)器開(kāi)始計(jì)時(shí),計(jì)時(shí)時(shí)間大概10ms一次,按鍵還是按著的,計(jì)數(shù),滿10
s就燈滅,如果中途掃到按鍵不安著了,關(guān)中斷,滅燈

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:89515 發(fā)表于 2018-2-14 13:07 | 顯示全部樓層
不知問(wèn)題可有解決。你想一想按鍵按下為什么燈不滅。按鍵一直按下是會(huì)造成cpu時(shí)間堵塞的。這樣常規(guī)的按鍵檢測(cè)方式會(huì)有意想不到的后果。所以你有兩種常用的方法可以解決,第一按鍵程序?qū)憺闋顟B(tài)機(jī)的方式,但是你必須懂這種方式,第二把按鍵程序?qū)懗芍袛嗟姆绞剑嵌〞r(shí)器中斷不是外部中斷。狀態(tài)機(jī)的方式可以在網(wǎng)上學(xué)習(xí)。定時(shí)器中斷就很簡(jiǎn)單了,當(dāng)主程序檢測(cè)到按鍵按下,不要延時(shí)消除抖動(dòng),直接啟動(dòng)定時(shí)器。在定時(shí)器中斷里對(duì)按鍵端口進(jìn)行判斷,如果端口為低電平就不用關(guān)閉定時(shí)器,反之關(guān)閉。這里你要按下多久,就多久關(guān)閉就行了。定時(shí)器的溢出時(shí)間可以是10毫秒級(jí),這樣不用浪費(fèi)CPU資源.你可以做很多事情,就不要說(shuō)改變LED狀態(tài)了。狀態(tài)機(jī)的方式與之有些類似,但學(xué)好了要強(qiáng)大很多。所有的程序都可以用。而且用好了都不會(huì)遇到CPU堵塞的情況

評(píng)分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:964852 發(fā)表于 2021-11-18 10:03 | 顯示全部樓層
wulin 大神!膜拜
回復(fù)

使用道具 舉報(bào)

ID:554500 發(fā)表于 2021-11-18 10:55 | 顯示全部樓層
//用定時(shí)器100ms調(diào)用一次
sbit key=P1^0;
void key_scan()
{
        static u8 i=0,n=0;
       
        if(key==0)
        {
                if(i==0)
                {
                        if(key==0&&n++>100) //100ms *100=10000ms=10s
                        {
                                i=1;
                                //燈滅
                        }
                }
        }
        else
        {
                i=0;
                n=0;
        }
}
回復(fù)

使用道具 舉報(bào)

ID:554500 發(fā)表于 2021-11-18 11:23 | 顯示全部樓層

51hei截圖20211118011759.jpg
#include<reg52.h>
#include "LCD1602.H"
#define u8 unsigned char
#define u16 unsigned int
sbit LED=P2^0;
sbit KEY=P2^1;
bit Time_f=0;
void Timer0_init() //50毫秒@12.000MHz
{
  TMOD|=0x01;
TL0 = (65536-50000)%256;  //設(shè)置定時(shí)初始值
TH0 = (65536-50000)/256;  //設(shè)置定時(shí)初始值
TF0 = 0;  //清除TF0標(biāo)志
TR0 = 1;  //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0=1;
EA=1;
}
void isr_timer0()interrupt 1  //定時(shí)器0中斷服務(wù)子函數(shù)
{
TL0 = (65536-50000)%256;  //設(shè)置定時(shí)初始值
TH0 = (65536-50000)/256;  //設(shè)置定時(shí)初始值
Time_f=1;
}
//50ms調(diào)用一次
//短按燈亮,長(zhǎng)按燈滅
void KEY_SCAN()
{
static u8 i=0,c=0;

if(KEY==0)
{
  if(i==0)
  {
   if(KEY==0&&c++>=200) //50ms*200=10000ms=10s
   {
    i=1;
    LED=1; //燈滅
   }
  }
}
else
{
  if(c>1&&c<200)
   LED=0; //燈亮
  
  i=0;
  c=0;
}
}
void main()
{

Timer0_init();
  while(1)
{
  if(Time_f)
  {
   Time_f=0;
   KEY_SCAN();
  }
}
}

51單片機(jī)定時(shí)器proteus仿真.zip

103.31 KB, 下載次數(shù): 1

回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2021-11-18 12:53 | 顯示全部樓層
要點(diǎn)如下:
1、按鍵確認(rèn):彈動(dòng)處理,略。
2、按鍵邊沿識(shí)別:通過(guò)【按鍵確認(rèn)】后是0,是1,并與上次鍵值比較是否相同,達(dá)成【按鍵前沿確認(rèn)】的目的。如按下=0,則上次為1,本次為0時(shí),為前沿;如按下=1,則上次為0,本次為1時(shí),為前沿。上次鍵值要做好標(biāo)記。
3、用定時(shí)器計(jì)時(shí):做個(gè)標(biāo)記T,T=1 時(shí)計(jì)時(shí)器增加,T=0不計(jì)。
4、計(jì)時(shí)起動(dòng):【按鍵前沿確認(rèn)】時(shí)置T=1。
5、計(jì)時(shí)器停止:當(dāng)計(jì)時(shí)器增加達(dá)到10秒時(shí),清T0。
6、顯示:T=1時(shí)亮,T=0時(shí)滅。可以只有4、5、時(shí)變動(dòng)一下。

記住:寫(xiě)程序最重要的是構(gòu)思,邏輯上先要說(shuō)得通!而后再據(jù)此寫(xiě)程序。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 1级毛片 | 久久一 | 亚洲精品日韩精品 | 美女视频久久 | 亚洲热在线视频 | 欧美一级大片免费观看 | 亚洲欧洲在线观看视频 | aaaa网站| 久久av网站 | 在线观看成人 | 国产东北一级毛片 | 午夜精品久久久久久久久久久久 | 欧美成人二区 | chengrenzaixian| 日本一区二区不卡视频 | 福利国产| 成人a视频在线观看 | 亚洲高清视频一区二区 | 黄视频网站免费观看 | 欧美日韩综合视频 | 中文字幕第49页 | 99亚洲精品 | 国产小视频在线观看 | 久久免费高清视频 | 国产精品有限公司 | 久久av一区二区三区 | 欧美日韩不卡在线 | 成人在线黄色 | 一级片在线观看 | 国产日韩精品视频 | 精品美女久久久 | 在线观看视频亚洲 | 91久久精品国产免费一区 | 国产精品久久久久久福利一牛影视 | 国产精品国产精品国产专区不卡 | 亚洲国产专区 | 国产精品一区在线 | 91影院| 日韩精品在线视频免费观看 | 亚洲综合无码一区二区 | 99久久日韩精品免费热麻豆美女 |