欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機實驗,IO口的使用,P3.3輸入,P1口輸出

[復制鏈接]
回帖獎勵 150 黑幣 回復本帖可獲得 50 黑幣獎勵! 每人限 2 次
跳轉到指定樓層
樓主
本帖最后由 水各 于 2020-5-8 00:27 編輯

實驗要求如下:P3.3口做輸入口,外接一脈沖,每輸入一個脈沖,P1口按16進制加一方式點亮發光二極管。P3口接的是一個開關。
電路圖流程圖如下


本菜鳥不太理解這題,寫的C語言程序問題很大。
希望有大神能指點一下
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. sbit key=P3^3;
  4. uchar code seg[]=
  5. {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
  6. void delayms(uchar ms)
  7. {
  8. uchar i;
  9. while(ms--)
  10. for(i=0;i<123;i++);
  11. }
  12. uchar key_scan(void)
  13. {
  14. static bit kp=0;
  15. if((P3&0x0f)!=0x0f)
  16. {
  17. delayms(10);
  18. if(((P3&0x0f)!=0x0f)&&(kp==0))
  19. {
  20. kp=1;
  21. return 1;
  22. }
  23. }
  24. else kp=0;
  25. return 0;
  26. }
  27. void main(void)
  28. {
  29. uchar key_val;
  30. uchar num=0;
  31. while(1)
  32. {
  33. key_val=key_scan();
  34. if(key_val==1)
  35. {
  36. if(++num==16)
  37. num=0;
  38. }
  39. P2=seg[num];
  40. }
  41. }
復制代碼




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

使用道具 舉報

沙發
ID:282850 發表于 2020-5-8 01:17 | 只看該作者
指點一下?一下在哪里?是MCU不懂?還是74LS345不懂?還是C的每個語句都不懂?還是某句不懂?點亮一個LED做過嗎?
回復

使用道具 舉報

板凳
ID:746607 發表于 2020-5-8 09:32 | 只看該作者
這是學校考試題吧,, seg[]數組下標值的范圍是0~14,你把36行的if(++num==16)改成if(++num==15) 就運行正常了。還有個辦法是在seg[]數組里在首數據的位置再添個0x00也行
回復

使用道具 舉報

地板
ID:746607 發表于 2020-5-8 09:34 | 只看該作者
這是學校考試題吧,, seg[]數組下標值的范圍是0~14,你把36行的if(++num==16)改成if(++num==15) 就運行正常了。還有個辦法是在seg[]數組里在首數據的位置再添個0x00也行.
最好的辦法是把uchar code seg[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
改為
uchar code seg[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
回復

使用道具 舉報

5#
ID:722868 發表于 2020-5-8 10:22 | 只看該作者
f556 發表于 2020-5-8 01:17
指點一下?一下在哪里?是MCU不懂?還是74LS345不懂?還是C的每個語句都不懂?還是某句不懂?點亮一個LED做 ...

點亮一個LED是做過的。
就是這一題根據師傅的講解,是要根據P3.3的中斷特性來判斷開關撥動的次數,然后開關撥動一個來回,LED燈根據16進制加一(16進制比較困難也可以用2進制)。我主要不懂的地方時,這個判斷撥動次數的程序怎樣寫
回復

使用道具 舉報

6#
ID:213173 發表于 2020-5-8 10:58 | 只看該作者
用P1的8個LED顯示0x00~0xff

#include<reg51.h>
#define uchar unsigned char
sbit key=P3^3;

void delayms(uchar ms)
{
        uchar i;
        while(ms--)
        for(i=0;i<123;i++);
}

bit key_scan(void)
{
        static bit kp=0;
        if((P3&0x0f)!=0x0f)
        {
                delayms(10);
                if(((P3&0x0f)!=0x0f)&&(kp==0))
                {
                        kp=1;
                        return 1;
                }
        }
        else kp=0;
        return 0;
}

void main(void)
{
        uchar num=0;
        P1=0x00;
        while(1)
        {
                if(key_scan())
                        num++;
                P1=num;//0x00~0xff
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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