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

標(biāo)題: 單片機(jī)實(shí)驗(yàn),IO口的使用,P3.3輸入,P1口輸出 [打印本頁]

作者: 水各    時(shí)間: 2020-5-8 00:22
標(biāo)題: 單片機(jī)實(shí)驗(yàn),IO口的使用,P3.3輸入,P1口輸出
本帖最后由 水各 于 2020-5-8 00:27 編輯

實(shí)驗(yàn)要求如下:P3.3口做輸入口,外接一脈沖,每輸入一個(gè)脈沖,P1口按16進(jìn)制加一方式點(diǎn)亮發(fā)光二極管。P3口接的是一個(gè)開關(guān)。
電路圖流程圖如下


本菜鳥不太理解這題,寫的C語言程序問題很大。
希望有大神能指點(diǎn)一下
  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. }
復(fù)制代碼





作者: f556    時(shí)間: 2020-5-8 01:17
指點(diǎn)一下?一下在哪里?是MCU不懂?還是74LS345不懂?還是C的每個(gè)語句都不懂?還是某句不懂?點(diǎn)亮一個(gè)LED做過嗎?
作者: macvwp48716    時(shí)間: 2020-5-8 09:32
這是學(xué)校考試題吧,, seg[]數(shù)組下標(biāo)值的范圍是0~14,你把36行的if(++num==16)改成if(++num==15) 就運(yùn)行正常了。還有個(gè)辦法是在seg[]數(shù)組里在首數(shù)據(jù)的位置再添個(gè)0x00也行
作者: macvwp48716    時(shí)間: 2020-5-8 09:34
這是學(xué)?荚囶}吧,, seg[]數(shù)組下標(biāo)值的范圍是0~14,你把36行的if(++num==16)改成if(++num==15) 就運(yùn)行正常了。還有個(gè)辦法是在seg[]數(shù)組里在首數(shù)據(jù)的位置再添個(gè)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};

作者: 水各    時(shí)間: 2020-5-8 10:22
f556 發(fā)表于 2020-5-8 01:17
指點(diǎn)一下?一下在哪里?是MCU不懂?還是74LS345不懂?還是C的每個(gè)語句都不懂?還是某句不懂?點(diǎn)亮一個(gè)LED做 ...

點(diǎn)亮一個(gè)LED是做過的。
就是這一題根據(jù)師傅的講解,是要根據(jù)P3.3的中斷特性來判斷開關(guān)撥動(dòng)的次數(shù),然后開關(guān)撥動(dòng)一個(gè)來回,LED燈根據(jù)16進(jìn)制加一(16進(jìn)制比較困難也可以用2進(jìn)制)。我主要不懂的地方時(shí),這個(gè)判斷撥動(dòng)次數(shù)的程序怎樣寫
作者: wulin    時(shí)間: 2020-5-8 10:58
用P1的8個(gè)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
        }
}





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1