找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機一鍵多功能按鍵識別的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:237797 發(fā)表于 2018-7-22 16:43 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
1、工作原理:
開關SP1 接在P3.7/RD 管腳上,在AT89S51 單片機的P1 端口接有四個發(fā)光二極管,上電的時候,L1 接在P1.0 管腳上的發(fā)光二極管在閃爍,當每一次按下開關SP1 的時候,L2 接在P1.1 管腳上的發(fā)光二極管在閃爍,再按下開關SP1 的時候,L3 接在P1.2 管腳上的發(fā)光二極管在閃爍,再按下開關SP1的時候,L4 接在P1.3 管腳上的發(fā)光二極管在閃爍,再按下開關SP1 的時候,又輪到L1 在閃爍了,如此輪流下去。
2、電路圖:

3、C語言程序:
  1. #include <AT89X51.H>
  2.                 unsigned char ID;
  3.                 void delay10ms(void)
  4.                 {
  5.                 unsigned char i,j;
  6.                 for(i=20;i>0;i--)
  7.                 for(j=248;j>0;j--);
  8.                 }
  9.                 void delay02s(void)
  10.                 {
  11.                 unsigned char i;
  12.                 for(i=20;i>0;i--)
  13.                 {delay10ms();
  14.                 }
  15.                 }
  16.                 void main(void)
  17.                 { while(1)
  18.                 { if(P3_7==0)
  19.                 {delay10ms();
  20.                 if(P3_7==0)
  21.                 {
  22.                 ID++;
  23.                 if(ID==4)
  24.                 {
  25.                 ID=0;
  26.                 }
  27.                 while(P3_7==0);
  28.                 }
  29.                 }
  30.                 switch(ID)
  31.                 { case 0:
  32.                 P1_0=~P1_0;
  33.                 delay02s();
  34.                 break;
  35.                 case 1:
  36.                 P1_1=~P1_1;
  37.                 delay02s();
  38.                 break;
  39.                 case 2:
  40.                 P1_2=~P1_2;
  41.                 delay02s();
  42.                 break;
  43.                 case 3:
  44.                 P1_3=~P1_3;
  45.                 delay02s();
  46.                 break;
  47.                 }
  48.                 }
  49.                 }
復制代碼



4、出現(xiàn)問題:
不斷切換開關,會發(fā)現(xiàn)有的燈不會熄滅,會亮,也就是有正常燈閃,還有其他的燈會亮,但是不會閃。我把燈閃后延時的語句后面把對應燈置高電平(如:P1_3=~P1_3;
                delay02s();
                break;),燈不閃了,但是不會出現(xiàn)燈同時亮的現(xiàn)象。
誰知道這個問題在哪里,麻煩指點一下。


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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表