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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機獨立按鍵檢測的現象小疑問

[復制鏈接]
跳轉到指定樓層
樓主
ID:437990 發表于 2019-3-2 12:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
板子是郭天祥的TX-1C板子 程序實現的是四個獨立按鍵分別實現不同的功能 有疑問的地方不是程序和現象有問題,都正常,但是在按下S5獨立按鍵的時候 發現LED亮了好幾個 感覺很奇怪 以下是單片機代碼
  1. /*
  2.         KEY1:秒表加一;
  3.         KEY2:秒表減一;
  4.         KEY3:清零;
  5.         KEY4:開啟秒表;
  6. */
  7. #include <reg52.h>

  8. #define uint  unsigned int
  9. #define uchar unsigned char
  10. #define digTube P0
  11. sbit KEY1 = P3^4;
  12. sbit KEY2 = P3^5;
  13. sbit KEY3 = P3^6;
  14. sbit KEY4 = P3^7;
  15. sbit DULA = P2^6;
  16. sbit WELA = P2^7;

  17. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  18. uint tube = 0;
  19. uint time = 0;

  20. void DelayMs(uint ms);
  21. void Display(uint num);
  22. void KeyScan();
  23. void Init();

  24. void main()
  25. {
  26.         Init();
  27.         
  28.         while (1)
  29.         {
  30.                 KeyScan();
  31.                 Display(tube);
  32.         }
  33. }

  34. void T0time() interrupt 1
  35. {
  36.         TH0=(65536-922)/256;
  37.         TL0=(65536-922)%256;
  38.         
  39.         time++;
  40.         if (time == 1000)
  41.         {
  42.                 time = 0;
  43.                 if (tube >= 999)
  44.                 {
  45.                         tube = 0;
  46.                 }
  47.                 else
  48.                 {
  49.                         tube++;
  50.                 }
  51.         }
  52. }

  53. void KeyScan()
  54. {
  55.         if (KEY1 == 0)
  56.         {
  57.                 DelayMs(10);
  58.                
  59.                 if(KEY1 == 0)
  60.                 {
  61.                         if (tube >= 999)
  62.                         {
  63.                                 tube = 0;
  64.                         }
  65.                         else
  66.                         {
  67.                                 tube++;
  68.                         }
  69.                         while (KEY1 == 0);
  70.                 }
  71.         }
  72.         
  73.         if (KEY2 == 0)
  74.         {
  75.                 DelayMs(10);
  76.                
  77.                 if(KEY2 == 0)
  78.                 {
  79.                         if (tube <= 0)
  80.                         {
  81.                                 tube = 999;
  82.                         }
  83.                         else
  84.                         {
  85.                                 tube--;
  86.                         }
  87.                         while (KEY2 == 0);
  88.                 }
  89.         }
  90.         
  91.         if (KEY4 == 0)
  92.         {
  93.                 DelayMs(10);
  94.                
  95.                 if (KEY4 == 0)
  96.                 {
  97.                         TR0 = ~TR0;
  98.                         while (KEY4 == 0);
  99.                 }
  100.         }
  101.         
  102.         if (KEY3 == 0)
  103.         {
  104.                 DelayMs(10);
  105.                
  106.                 if (KEY3 == 0)
  107.                 {
  108.                         tube = 0;
  109.                         while (KEY3 == 0);
  110.                 }
  111.         }
  112. }


  113. void Display(uint num)
  114. {
  115.         uint bai, shi, ge;
  116.         
  117.         bai = num/100;
  118.         shi = num%100/10;
  119.         ge = num%10;
  120.         
  121.         DULA = 1;
  122.         digTube = table[bai];
  123.         DULA = 0;
  124.         digTube = 0xff;
  125.         WELA = 1;
  126.         digTube = 0x7e;
  127.         WELA = 0;
  128.         DelayMs(5);
  129.         
  130.         DULA = 1;
  131.         digTube = table[shi];
  132.         DULA = 0;
  133.         digTube = 0xff;
  134.         WELA = 1;
  135.         digTube = 0x7d;
  136.         WELA = 0;
  137.         DelayMs(5);
  138.         
  139.         DULA = 1;
  140.         digTube = table[ge];
  141.         DULA = 0;
  142.         digTube = 0xff;
  143.         WELA = 1;
  144.         digTube = 0x7b;
  145.         WELA = 0;
  146.         DelayMs(5);
  147. }

  148. void Init()
  149. {
  150.         TMOD=0x01;
  151.         TH0=(65536-922)/256;
  152.         TL0=(65536-922)%256;
  153.         TR0=0;
  154.         ET0=1;
  155.         EA=1;
  156. }

  157. void DelayMs(uint xms)
  158. {
  159.         uint i,j;
  160.         for(i=xms;i>0;i--)
  161.                 for(j=114;j>0;j--);
  162. }
復制代碼
然后我KEY4的功能分別換了 發現不是程序功能的問題,好像按下S5就會亮LED 對此很好奇 希望有前輩可以指導一下


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

使用道具 舉報

沙發
ID:213173 發表于 2019-3-2 18:57 | 只看該作者
TX-1C板子基本沒有用跳線帽切換外部硬件模塊,好多模塊都是共用IO口,其好處是不用頻繁切換外部硬件模塊,缺點是有時會發生互相干擾。你遇到的情況是操作S5時P1受到干擾。S5是接在P3.7,此腳還掛有AD0804的RD端,造成AD0804干擾P1外接的74HC573,使部分LED點亮。解決這個問題很簡單,程序初始化時設置P2.5低電平,關閉U3即可。
回復

使用道具 舉報

板凳
ID:478073 發表于 2019-3-2 19:47 | 只看該作者
看來樓主是沒有好好看原理圖了。

評分

參與人數 1黑幣 +10 收起 理由
微小苛 + 10

查看全部評分

回復

使用道具 舉報

地板
ID:478236 發表于 2019-3-4 10:28 | 只看該作者
這個s5是啥?
回復

使用道具 舉報

5#
ID:437990 發表于 2019-3-4 20:29 | 只看該作者
wulin 發表于 2019-3-2 18:57
TX-1C板子基本沒有用跳線帽切換外部硬件模塊,好多模塊都是共用IO口,其好處是不用頻繁切換外部硬件模塊, ...

謝謝前輩 怪不得 要好好看原理圖了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品国产成人国产三级 | 精品国产一区二区三区久久久蜜月 | 日韩视频一区二区在线 | 综合九九 | 2022精品国偷自产免费观看 | 日本a视频 | 久久久久久久综合色一本 | 91av视频| 国产99热 | 久久99视频 | 国产精品久久久久久久久久久久久久 | 精产国产伦理一二三区 | 91精品国产综合久久久动漫日韩 | 久久av网站| 欧美日韩亚洲一区 | 欧美日韩三级 | 视频二区国产 | 精产嫩模国品一二三区 | 中文字幕免费 | 久久在线 | www.日韩av.com | 亚洲一区二区三区在线播放 | 99精品视频在线观看 | 粉嫩高清一区二区三区 | 免费在线观看一区二区 | 一级免费看 | 四虎最新地址 | 欧美在线天堂 | 国产高清精品一区二区三区 | 国产超碰人人爽人人做人人爱 | 欧美日韩视频在线 | 国产福利在线 | 在线观看视频91 | 91精品国产色综合久久不卡蜜臀 | 亚洲男人网 | 国产91久久久久久 | 久久五月婷 | 一区二区国产精品 | www.蜜桃av| 国产精品久久久久久久模特 | 黄色网络在线观看 |