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

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

QQ登錄

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

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

單片機(jī)一個(gè)io口驅(qū)動(dòng)發(fā)光二極管并掃描按鍵程序調(diào)試

[復(fù)制鏈接]
ID:777834 發(fā)表于 2021-9-3 08:24 來(lái)自觸屏版 | 顯示全部樓層 |閱讀模式
各位大佬,這個(gè)程序怎樣寫(xiě),我按照之前的一個(gè)帖子例程反復(fù)調(diào)試都不成功,LED1在P1.5口、LED2在P1.4口,路過(guò)幫幫忙,多謝啊
IMG_20210903_081739.jpg
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-3 10:00 | 顯示全部樓層
平時(shí)端口設(shè)為推挽,驅(qū)動(dòng)led亮或滅。
需要讀取按鍵時(shí),端口設(shè)為弱上拉。此時(shí)按鍵如果是按下的,端口電壓為1/11*Vcc,為低電平。按鍵如果沒(méi)按下,端口電壓是LED管壓降,如果是紅燈的話,約為2V。如果要準(zhǔn)確識(shí)別為高電平的話,Vcc應(yīng)小于2.85V(2/0.7=2.85)。綠燈管壓降燒大于紅燈,情形會(huì)稍微好點(diǎn)。

因此,這電路要能正常工作,Vcc電壓要足夠低才行。另外在檢測(cè)按鍵時(shí)按鍵又沒(méi)按下,燈會(huì)微弱發(fā)光。
總體上這電路不是很好。
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2021-9-3 10:18 | 顯示全部樓層
有必要這樣做?原先的獨(dú)立按鍵一個(gè)IO就能實(shí)現(xiàn)2個(gè)按鍵,51與32的原理都是一樣的只是寫(xiě)法不同而已。可參https://blog.csdn.net/xianfajushi/article/details/106518315
回復(fù)

使用道具 舉報(bào)

ID:796531 發(fā)表于 2021-9-3 10:45 | 顯示全部樓層
為啥要這么接 ,是否考慮I/O用開(kāi)漏輸出,發(fā)光管串電阻接vcc和I/O ,開(kāi)關(guān)接I/O 和地, 寫(xiě)一個(gè)sbitI/O輸出高電平 發(fā)光管亮;I/O輸出低電平 ,讀取I/O實(shí)際狀態(tài),按鍵沒(méi)按讀到高電平,按鈕按下就會(huì)讀到低電平,這樣是否可行
回復(fù)

使用道具 舉報(bào)

ID:415064 發(fā)表于 2021-9-3 14:39 | 顯示全部樓層
分時(shí)復(fù)用,在小家電很常見(jiàn)。led你理解呼吸燈一亮一滅的,在滅的時(shí)候檢測(cè)按鍵就行了
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-3 15:05 來(lái)自觸屏版 | 顯示全部樓層
wojiaoguogai 發(fā)表于 2021-9-3 14:39
分時(shí)復(fù)用,在小家電很常見(jiàn)。led你理解呼吸燈一亮一滅的,在滅的時(shí)候檢測(cè)按鍵就行了

你好,我按照這個(gè)調(diào)試不行,可以幫看看
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-3 15:06 來(lái)自觸屏版 | 顯示全部樓層
wojiaoguogai 發(fā)表于 2021-9-3 14:39
分時(shí)復(fù)用,在小家電很常見(jiàn)。led你理解呼吸燈一亮一滅的,在滅的時(shí)候檢測(cè)按鍵就行了

可以幫看看嗎
http://www.zg4o1577.cn/bbs/dpj-194413-1.html
這個(gè)鏈接
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-9-3 15:30 | 顯示全部樓層
jianuli 發(fā)表于 2021-9-3 15:06
可以幫看看嗎
http://www.zg4o1577.cn/bbs/dpj-194413-1.html
這個(gè)鏈接

你把你的代碼完整地貼上來(lái)看看
(不要截圖!不要截圖!不要截圖!)
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-3 16:38 | 顯示全部樓層
jianuli 發(fā)表于 2021-9-3 15:06
可以幫看看嗎
http://www.zg4o1577.cn/bbs/dpj-194413-1.html
這個(gè)鏈接

我二樓已經(jīng)分析清楚了。

另外我看了http://www.zg4o1577.cn/bbs/dpj-194413-1.html鏈接的帖子,代碼OK。
要正常工作,請(qǐng)把Vcc電壓調(diào)到2.5V。
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-3 17:10 | 顯示全部樓層
樓主就不能有點(diǎn)獨(dú)立思考的能力?正確解答擺你面前,也不會(huì)分析驗(yàn)證。就只會(huì)說(shuō)不成功,求指導(dǎo)。

尋求解決問(wèn)題的正確方式:
問(wèn)題背景描述
問(wèn)題現(xiàn)象
為解決問(wèn)題做了哪些嘗試?有啥效果?
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-9-3 17:53 來(lái)自觸屏版 | 顯示全部樓層
datouyuan 發(fā)表于 2021-9-3 16:38
我二樓已經(jīng)分析清楚了。

另外我看了http://www.zg4o1577.cn/bbs/dpj-194413-1.html鏈接的帖子,代碼OK。 ...

二樓的分析有一個(gè)問(wèn)題
就是設(shè)置完弱上拉后
端口要先置1才可以讀取輸入狀態(tài)
這時(shí)端口電壓還是1/11 VCC嗎?
Screenshot_2021-09-03-17-52-12-922_cn.wps.moffice_eng~01.jpg
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-4 08:48 | 顯示全部樓層
lkc8210 發(fā)表于 2021-9-3 17:53
二樓的分析有一個(gè)問(wèn)題
就是設(shè)置完弱上拉后
端口要先置1才可以讀取輸入狀態(tài)

問(wèn)題不大,mcu內(nèi)部上拉等效電阻約為500k歐姆,對(duì)10K電阻上拉電阻影響太小了,1/11 VCC這個(gè)值沒(méi)錯(cuò)。
另外端口要置1后才可以讀取輸入狀態(tài),這是51mcu必須要的,否則端口值不是1/11 VCC了,而是接近于0V。
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-4 08:54 | 顯示全部樓層
lkc8210 發(fā)表于 2021-9-3 17:53
二樓的分析有一個(gè)問(wèn)題
就是設(shè)置完弱上拉后
端口要先置1才可以讀取輸入狀態(tài)
端口要先置1才可以讀取輸入狀態(tài)

這不是stc12le2052ad獨(dú)有的,這是所有準(zhǔn)雙向的共有特性,包括但不限于51.
回復(fù)

使用道具 舉報(bào)

ID:517951 發(fā)表于 2021-9-4 09:22 | 顯示全部樓層
IO口帶上LED燈,還要檢測(cè)按鍵,這種操作怎么搞?按鍵拉低的時(shí)候,led燈就亮不了啦
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-4 09:33 | 顯示全部樓層
rayin 發(fā)表于 2021-9-4 09:22
IO口帶上LED燈,還要檢測(cè)按鍵,這種操作怎么搞?按鍵拉低的時(shí)候,led燈就亮不了啦

圖上按鍵串聯(lián)了電阻,按鍵拉低的時(shí)候,不會(huì)影響led。
回復(fù)

使用道具 舉報(bào)

ID:491577 發(fā)表于 2021-9-6 11:45 | 顯示全部樓層
本帖最后由 hhh402 于 2021-9-6 11:54 編輯

樓主的電路有問(wèn)題,10K電阻是來(lái)?yè)v蛋的要去掉,接按鍵的電阻1K改為2.2k,想點(diǎn)亮LED就推挽輸出高電平,想檢測(cè)按鍵時(shí)設(shè)置成雙向模式,讀到0就是有按鍵按下。按鍵按下不會(huì)影響到LED.
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-14 20:00 | 顯示全部樓層
#include <reg52.h>
#include<intrins.h>

sfr P1M0  = 0x91;
sfr P1M1  = 0x92;

sbit LED1 = P1^4;        //LED端口聲明
sbit LED2 = P1^5;
sbit LED3 = P1^6;
sbit LED4 = P1^7;

unsigned char KeySec=0;//鍵值變量

/**********************************
  1ms延時(shí)程序
**********************************/
void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 12;
        j = 168;
        do
        {
                while (--j);
        } while (--i);
}
/**********************************
        按鍵掃描程序
**********************************/
void key_scan()
{
        static unsigned char count=0;//靜態(tài)計(jì)數(shù)變量
        static bit sign_key=0;                        //靜態(tài)標(biāo)志位
        unsigned char time_key,time_LED;//臨時(shí)變量

        time_LED=P1&0xf0;//保存4個(gè)LED狀態(tài)
        P1M0=0xf0;//P1.4~7設(shè)置弱上拉
        P1M1=0x00;//P1.4~7設(shè)置弱上拉
        P1|=0xf0; //P1.4~7置高電平        
        if(P1&0xf0!=0xf0)//有鍵按下
        {
                if(++count>=10 && sign_key==0)//消抖
                {
                        sign_key=1;//自鎖
                        time_key=P1&0xf0;//保存P1.4~7狀態(tài)
                        switch(time_key)
                        {
                                case 0xe0: KeySec=1; break;//輸出鍵值
                                case 0xd0: KeySec=2; break;
                                case 0xb0: KeySec=3; break;
                                case 0x70: KeySec=4; break;
                        }
                }
        }
        else //抬起
        {
                count=0;//計(jì)數(shù)變量清0
                sign_key=0;//鍵態(tài)標(biāo)志清0
        }
        P1&=0x0f;    //P1.4~7清0
        P1|=time_LED;//還原4個(gè)LED狀態(tài)
        P1M0=0x00;   //還原P1.4~7推挽設(shè)置
        P1M1=0xf0;   //還原P1.4~7推挽設(shè)置
}
/*********************************
        按鍵服務(wù)程序
*********************************/
void key_service()
{
        switch(KeySec)
        {
                case 1:        LED1=~LED1;KeySec=0;break;
                case 2:        LED2=~LED2;KeySec=0;break;
                case 3:        LED3=~LED3;KeySec=0;break;
                case 4:        LED4=~LED4;KeySec=0;break;
        }                  
}
/********************************
        主程序
********************************/
void main()
{
        P1M0=0xf0;//P1.4~7設(shè)置推挽
        P1M1=0x00;//P1.4~7設(shè)置推挽
        while(1)
        {
                key_scan();
                key_service();
                Delay1ms();//控制主循環(huán)周期約1ms
        }
}

大佬們,幫看下哪里的問(wèn)題,我反復(fù)調(diào)試好久都不行,謝謝啦
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-20 15:11 | 顯示全部樓層

假如推挽和弱上拉設(shè)置沒(méi)錯(cuò)的畫(huà),io口驅(qū)動(dòng)發(fā)光二極管并掃描按鍵這部分代碼沒(méi)有問(wèn)題。
鍵值處理分析這部分有問(wèn)題,你需要一個(gè)全局變量保存之前的鍵值。
我根據(jù)你的代碼修改了一下。
  1. #include <reg52.h>
  2. #include <intrins.h>

  3. sfr P1M0 = 0x91;
  4. sfr P1M1 = 0x92;

  5. sbit LED1 = P1 ^ 4; //LED端口聲明
  6. sbit LED2 = P1 ^ 5;
  7. sbit LED3 = P1 ^ 6;
  8. sbit LED4 = P1 ^ 7;
  9. //unsigned char KeySec=0;//鍵值變量
  10. /**********************************
  11.   1ms延時(shí)程序
  12. **********************************/
  13. void Delay1ms() //@12.000MHz
  14. {
  15.         unsigned char i, j;
  16.         _nop_();
  17.         _nop_();
  18.         i = 12;
  19.         j = 168;
  20.         do
  21.         {
  22.                 while (--j);
  23.         } while (--i);
  24. }

  25. /*********************************
  26.         按鍵值讀取程序
  27. *********************************/
  28. unsigned char KeyGet(void)
  29. {
  30.         unsigned char r;
  31.         unsigned char time_LED;

  32.         //EA=0;//如能保證中斷不會(huì)在此期間操作P1.4~7,可注釋
  33.         time_LED = P1 & 0xf0; //保存4個(gè)LED狀態(tài)
  34.         P1M0 = 0xf0;                  //P1.4~7設(shè)置弱上拉
  35.         P1M1 = 0x00;                  //P1.4~7設(shè)置弱上拉
  36.         P1 |= 0xf0;                          //P1.4~7置高電平

  37.         _nop_();_nop_();_nop_();_nop_();_nop_();           //延時(shí)等待按鍵穩(wěn)定
  38.         r = P1 & 0xf0; //讀鍵值

  39.         P1 &= 0x0f;                //P1.4~7清0
  40.         P1 |= time_LED; //還原4個(gè)LED狀態(tài)
  41.         P1M0 = 0x00;        //還原P1.4~7推挽設(shè)置
  42.         P1M1 = 0xf0;        //還原P1.4~7推挽設(shè)置
  43.         //EA=1;
  44.         return r;
  45. }
  46. /*********************************
  47.         按鍵服務(wù)程序
  48. *********************************/
  49. void key_service(unsigned char KeySec)
  50. {
  51.         if((KeySec&(1<<4))==0) LED1 = ~LED1;
  52.         if((KeySec&(1<<5))==0) LED2 = ~LED2;
  53.         if((KeySec&(1<<6))==0) LED3 = ~LED3;
  54.         if((KeySec&(1<<7))==0) LED4 = ~LED4;
  55. }
  56. /**********************************
  57.         按鍵掃描程序
  58. **********************************/
  59. void key_scan()
  60. {
  61.         static unsigned char keyOld = 0xf0; //上一次按鍵值
  62.         static unsigned char count = 0;                //靜態(tài)計(jì)數(shù)變量
  63.         unsigned char KeyCur;                                //當(dāng)前按鍵值 臨時(shí)變量

  64.         KeyCur = KeyGet();
  65.         if (keyOld == KeyCur)
  66.         { //按鍵未變化
  67.                 if (++count == 0)
  68.                         --count;
  69.                 if (KeyCur != 0xf0)
  70.                 { //有鍵按下
  71.                         if (count == 10)
  72.                         { //消抖
  73.                                 key_service(KeyCur);
  74.                         }
  75.                 }
  76.         }
  77.         else
  78.         {
  79.                 count = 0; //計(jì)數(shù)變量清0
  80.                 keyOld = KeyCur;
  81.         }
  82. }


  83. /********************************
  84.         主程序
  85. ********************************/
  86. void main()
  87. {
  88.         // P1M0 = 0xf0; //P1.4~7設(shè)置推挽
  89.         // P1M1 = 0x00; //P1.4~7設(shè)置推挽
  90.         KeyGet();         //P1.4~7設(shè)置推挽
  91.         while (1)
  92.         {
  93.                 key_scan();
  94.                 //key_service();
  95.                 Delay1ms(); //控制主循環(huán)周期約1ms
  96.         }
  97. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-20 15:27 | 顯示全部樓層

剛查了下手冊(cè),你配置弱上拉除了錯(cuò)。
讀鍵值代碼如下:
  1. /*********************************
  2.         按鍵值讀取程序
  3. *********************************/
  4. unsigned char KeyGet(void)
  5. {
  6.         unsigned char r;
  7.         unsigned char time_LED;

  8.         //EA=0;//如能保證中斷不會(huì)在此期間操作P1.4~7,可注釋
  9.         time_LED = P1 & 0xf0; //保存4個(gè)LED狀態(tài)
  10.         //P1M0 = 0xf0;                  //P1.4~7設(shè)置弱上拉
  11.         P1M1 = 0x00;                  //P1.4~7設(shè)置弱上拉
  12.         P1 |= 0xf0;                          //P1.4~7置高電平

  13.         _nop_();_nop_();_nop_();_nop_();_nop_();           //延時(shí)等待按鍵穩(wěn)定
  14.         r = P1 & 0xf0; //讀鍵值

  15.         P1 &= 0x0f;                //P1.4~7清0
  16.         P1 |= time_LED; //還原4個(gè)LED狀態(tài)
  17.         P1M0 = 0x00;        //還原P1.4~7推挽設(shè)置
  18.         P1M1 = 0xf0;        //還原P1.4~7推挽設(shè)置
  19.         //EA=1;
  20.         return r;
  21. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-24 00:23 來(lái)自觸屏版 | 顯示全部樓層
datouyuan 發(fā)表于 2021-9-20 15:27
剛查了下手冊(cè),你配置弱上拉除了錯(cuò)。
讀鍵值代碼如下:

以上程序都跑過(guò)了,也調(diào)試了好久,就是關(guān)閉LED時(shí)燈還有微亮,
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-24 09:05 | 顯示全部樓層
jianuli 發(fā)表于 2021-9-24 00:23
以上程序都跑過(guò)了,也調(diào)試了好久,就是關(guān)閉LED時(shí)燈還有微亮,

請(qǐng)看我2樓的分析。
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-24 09:31 來(lái)自觸屏版 | 顯示全部樓層
datouyuan 發(fā)表于 2021-9-24 09:05
請(qǐng)看我2樓的分析。

實(shí)際10K電阻我沒(méi)接,接與不接結(jié)果都一樣,還有不可能像你說(shuō)的要把電壓調(diào)低才能用吧,像充電寶之類(lèi)的很多產(chǎn)品都用這種電路,它們關(guān)閉后都沒(méi)有微亮,
回復(fù)

使用道具 舉報(bào)

ID:887371 發(fā)表于 2021-9-24 11:09 | 顯示全部樓層
jianuli 發(fā)表于 2021-9-24 09:31
實(shí)際10K電阻我沒(méi)接,接與不接結(jié)果都一樣,還有不可能像你說(shuō)的要把電壓調(diào)低才能用吧,像充電寶之類(lèi)的很多 ...

我的分析是沒(méi)有錯(cuò)的,10K不接的話,需要更低些的電壓才能正常。
充電寶電路和這電路肯定不一樣,我做過(guò)4個(gè)IO同時(shí)驅(qū)動(dòng)6個(gè)燈6個(gè)按鍵。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2021-9-28 02:11 | 顯示全部樓層
jianuli 發(fā)表于 2021-9-24 00:23
以上程序都跑過(guò)了,也調(diào)試了好久,就是關(guān)閉LED時(shí)燈還有微亮,

是有微亮
經(jīng)過(guò)一整晚的研究
終于發(fā)現(xiàn)微亮的成因和解決方法
已經(jīng)夜深,明天再說(shuō)

答案提示:PWM
回復(fù)

使用道具 舉報(bào)

ID:777834 發(fā)表于 2021-9-28 08:33 來(lái)自觸屏版 | 顯示全部樓層
lkc8210 發(fā)表于 2021-9-28 02:11
是有微亮
經(jīng)過(guò)一整晚的研究
終于發(fā)現(xiàn)微亮的成因和解決方法

是吧,我實(shí)際搭電路驗(yàn)證的,確實(shí)關(guān)閉后有微亮,但就是有人不信,我也覺(jué)得有解決方法,但是本人還是菜鳥(niǎo)一個(gè),沒(méi)法解決
回復(fù)

使用道具 舉報(bào)

ID:1064915 發(fā)表于 2023-6-28 15:55 | 顯示全部樓層
STC89C52RC可以試驗(yàn)嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | www.黄网| 国产精品久久久久久久岛一牛影视 | 毛片一级片 | 操久久 | 99视频精品 | 91色啪 | 日韩精品一区二区三区视频播放 | 国产精品伦一区二区三级视频 | 蜜桃视频在线观看www社区 | av黄色在线播放 | www.中文字幕.com | 2022国产精品 | 久久精品久久久 | 欧美成人a| 美女高潮网站 | 国内av在线| 波多野结衣一区二区三区在线观看 | 精品久久久久一区二区国产 | 一级电影免费看 | 中文字幕日韩欧美 | 一区二区成人 | 激情五月综合 | 亚洲一区二区三区高清 | 九九九久久国产免费 | 欧美成人视屏 | 亚洲精品在线免费观看视频 | 久久久人 | 日本成人在线免费视频 | 丁香综合| 拍真实国产伦偷精品 | 国产精品网页 | 色综合色综合网色综合 | 极品粉嫩国产48尤物在线播放 | 欧美黄色网 | 自拍 亚洲 欧美 老师 丝袜 | 伊人影院99 | 成人黄色a | 青青青伊人| 九九久久国产 | 亚洲网站在线观看 |