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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)單獨(dú)按鍵時(shí)間長(zhǎng)短控制請(qǐng)教

[復(fù)制鏈接]
ID:634487 發(fā)表于 2019-12-18 22:54 | 顯示全部樓層 |閱讀模式
https://blog.csdn.net/Mr_jianfeng/article/details/79507108

按照這個(gè)抄的,關(guān)鍵新手沒抄好 。  現(xiàn)在 否則為短按有效果 不知道哪里沒抄到位。求大神指導(dǎo)。

程序見2樓
回復(fù)

使用道具 舉報(bào)

ID:634487 發(fā)表于 2019-12-18 22:56 | 顯示全部樓層
#include <STC15Wxx.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define count unsigned int
sbit key=P1^7;               
sbit k=P3^1;                       
sbit key1=P3^0;                       
sbit key2=P3^2;                       
sbit key3=P0^3;                                 

uchar key_flag = 0;
ulong numl;

void delayms (uint xms)           //添加延時(shí)
        {
          uint i, j;
                for(i=xms;i>0;i--)
                  for(j=110;j>0;j--);
        }


main()
{

           TMOD=0x01;
        TH0 = 0xB8;
        TL0 = 0x00;
         ET0=1;
     TR0=1;
     EA = 1;
while(1)
{
static key_flag;
   if(key == 0)
     {
            delayms (10);
                if(key == 0)
                {
                  key_flag = 1;
                   TR0 = 1;
                  while(!key);
                   TR0 = 0;
                }
           }
         if(key_flag)
           {
                  if(numl>= 10)
                  {
                   key2 = 0 ;
                              numl =0 ;
                   key_flag = 0;
                  }
                  else
                  {
                    key3 = ~key3 ;
                                numl =0 ;
                    key_flag = 0;
                  }
           }
           numl =0 ;
           key_flag = 0;
         }
}




回復(fù)

使用道具 舉報(bào)

ID:634487 發(fā)表于 2019-12-18 22:59 | 顯示全部樓層
怎么發(fā)程序    我這發(fā)的都是亂碼了
回復(fù)

使用道具 舉報(bào)

ID:210017 發(fā)表于 2019-12-18 23:19 | 顯示全部樓層
程序改成,按鍵按下后這個(gè)變量numl自加,然后判斷這個(gè)變量大小,確定是長(zhǎng)按還是短按
回復(fù)

使用道具 舉報(bào)

ID:634487 發(fā)表于 2019-12-19 01:11 | 顯示全部樓層
問題解決了  管理刪了吧
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-12-19 04:28 | 顯示全部樓層
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2019-12-19 08:19 | 顯示全部樓層
可以看看我的程序:
                if (Agoto==1)//如果相應(yīng)的鍵按下
                {
                        n=0;//時(shí)間計(jì)數(shù)復(fù)位
                        while(Agoto)//如果鍵一直按著
                        {
                                n++;//時(shí)間開始計(jì)數(shù)
                                Delay10ms(1);//計(jì)時(shí)一次0.01s
                                if (n>200)//如果長(zhǎng)時(shí)間按著不放,大于2s
                                {
                                        break;//則退出
                                }
                        }
                        if (n>30)//如果時(shí)間次數(shù)大于30次小于200,即大于0.3s小于2s
                        {
                                PWMD();//執(zhí)行這個(gè)
                        }
                        else//否則,時(shí)間小于0.3s
                        {
                                PU();//執(zhí)行這個(gè)
                        }
                }
是一鍵雙功能吧。
這個(gè)程序已經(jīng)在我的無線電遙控小車上真實(shí)使用通過。
對(duì)了,延時(shí)程序也給你:
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--);
}
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-12-19 10:11 | 顯示全部樓層
樓主按照原作示例寫的程序不成功是沒有充分理解原作意圖。樓主的頭文件#include <STC15Wxx.h>,想必是使用了STC15系列單片機(jī),由于STC15系列是1T單片機(jī),速度比51快許多,所以原來的延時(shí)函數(shù)要修改。原作是用定時(shí)器中斷計(jì)數(shù)的方式判斷長(zhǎng)、短按時(shí)間,樓主沒有開中斷,所以numl不可能>= 10,也就不會(huì)有長(zhǎng)按響應(yīng)。
給你的代碼補(bǔ)充完整:
  1. #include <STC15Wxx.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long

  6. sbit key        =P1^7;               
  7. sbit LED1=P3^0;                        
  8. sbit LED2=P3^1;                        
  9.                                 
  10. bit key_flag = 0;//按鍵有效標(biāo)志位變量
  11. uchar count = 0;//中斷計(jì)數(shù)變量
  12. /*
  13. void delayms(uint xms) //添加延時(shí)
  14. {
  15.         uint i, j;
  16.         for(i=xms;i>0;i--)
  17.                 for(j=110;j>0;j--);//12T單片機(jī)
  18. }*/
  19. void delayms(uint xms) //添加延時(shí)
  20. {
  21.         uint i, j;
  22.         for(i=xms;i>0;i--)
  23.                 for(j=1150;j>0;j--);//1T單片機(jī)
  24. }

  25. void main()
  26. {       
  27.         //初始化定時(shí)器0
  28.         TMOD= 0x01;                //設(shè)置定時(shí)器模式
  29.         TH0 = 0xDC;                //10毫秒@11.0592MHz
  30.         TL0 = 0x00;                //10毫秒@11.0592MHz
  31.         TR0 = 0;                        //定時(shí)器0關(guān)閉
  32.         ET0 = 1;                        //開定時(shí)器0中斷
  33.         EA  = 1;                        //開總中斷
  34.         while(1)
  35.         {
  36.                 if(key == 0)//判斷鍵按下
  37.                 {
  38.                         delayms(10);//延時(shí)10ms防抖
  39.                         if(key == 0)//確認(rèn)鍵按下
  40.                         {
  41.                                 key_flag = 1; //有效標(biāo)志位置1
  42.                                 TR0 = 1;                        //開定時(shí)器
  43.                                 while(!key);        //等待松手
  44.                                 TR0 = 0;                        //關(guān)定時(shí)器
  45.                         }
  46.                 }
  47.                 if(key_flag)                        //判斷按鍵有效
  48.                 {
  49.                         if(count>=100)        //超過1秒算長(zhǎng)按
  50.                         {
  51.                                 LED1=~LED1;        //LED1取反
  52.                         }
  53.                         else                                //小于1秒算短按
  54.                         {
  55.                                 LED2=~LED2;        //LED2取反
  56.                         }
  57.                 }
  58.                 count=0;                                //中斷計(jì)數(shù)變量清0
  59.                 key_flag = 0;                //按鍵有效標(biāo)志位清0
  60.         }
  61. }
  62. //定時(shí)器0 中斷服務(wù)函數(shù)
  63. void Timer0Interrupt(void) interrupt 1
  64. {
  65.         TH0 = 0xDC;                //10毫秒@11.0592MHz
  66.         TL0 = 0x00;                //10毫秒@11.0592MHz
  67.         if(count<250)        //防止溢出
  68.                 count++;                //中斷計(jì)數(shù)變量自+1
  69. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:634487 發(fā)表于 2019-12-19 13:24 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2019-12-19 08:19
可以看看我的程序:
                if (Agoto==1)//如果相應(yīng)的鍵按下
                {

多謝你的例程,我現(xiàn)在主要是實(shí)驗(yàn)在主程序運(yùn)行的時(shí)候。按鍵中斷可以隨時(shí)的中斷。
回復(fù)

使用道具 舉報(bào)

ID:634487 發(fā)表于 2019-12-19 13:47 | 顯示全部樓層
wulin 發(fā)表于 2019-12-19 10:11
樓主按照原作示例寫的程序不成功是沒有充分理解原作意圖。樓主的頭文件#include ,想必是使用了STC15系列單 ...

多謝你的指導(dǎo),我想在主程序加入別的程序。也就是沒有中斷的時(shí)候干別的事情。
我現(xiàn)在加了后,按鍵按下去后很難進(jìn)入到中斷程序里。也就是反應(yīng)遲鈍。不能夠隨時(shí)中斷。中斷后執(zhí)行中斷程序 一直到中斷程序結(jié)束,中間不在接受中斷。



加在while(1)下面的
k2 = 0;
for(i=3000;i>0;i--)
for(j=110;j>0;j--);
k2 = 1;  
for(i=3000;i>0;i--)
for(j=110;j>0;j--);




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 超碰人人插 | 国产成人福利 | 欧美一区二区三区 | 国产欧美在线一区二区 | 台湾a级理论片在线观看 | 久久久久久久久久久久久9999 | 精品99久久久久久 | 日韩手机在线视频 | 亚洲精品电影网在线观看 | 国产精品99精品久久免费 | 国产人成在线观看 | 男人av在线| 久久精品国产一区二区电影 | 国产欧美精品一区二区色综合朱莉 | 精品久久一区 | 亚洲成人免费视频在线观看 | 天天干夜夜| 激情在线视频网站 | 精品欧美乱码久久久久久 | 国产性色视频 | 国产精品视频免费观看 | 欧美成人精品一区二区三区 | 国产精品久久亚洲 | 精品一区二区三区中文字幕 | 亚洲欧美综合 | www四虎影视| 欧美精品久久久久久久久老牛影院 | 阿v视频在线观看 | 一级毛片视频在线 | 综合久久99 | 狠狠色狠狠色综合日日92 | 日本中文在线视频 | 一级毛片高清 | 亚洲乱码一区二区三区在线观看 | 91在线视频播放 | 综合久久综合久久 | 亚洲精品久久久一区二区三区 | 二区三区av | 日韩午夜一区二区三区 | 日韩一区二区成人 | 亚洲精品电影 |