|
發布時間: 2020-5-8 00:22
正文摘要:本帖最后由 水各 于 2020-5-8 00:27 編輯 實驗要求如下:P3.3口做輸入口,外接一脈沖,每輸入一個脈沖,P1口按16進制加一方式點亮發光二極管。P3口接的是一個開關。 電路圖流程圖如下 本菜鳥不太理解這 ... |
|
用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 } } |
f556 發表于 2020-5-8 01:17 點亮一個LED是做過的。 就是這一題根據師傅的講解,是要根據P3.3的中斷特性來判斷開關撥動的次數,然后開關撥動一個來回,LED燈根據16進制加一(16進制比較困難也可以用2進制)。我主要不懂的地方時,這個判斷撥動次數的程序怎樣寫 |
|
這是學校考試題吧,, 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}; |
| 這是學校考試題吧,, seg[]數組下標值的范圍是0~14,你把36行的if(++num==16)改成if(++num==15) 就運行正常了。還有個辦法是在seg[]數組里在首數據的位置再添個0x00也行 |
| 指點一下?一下在哪里?是MCU不懂?還是74LS345不懂?還是C的每個語句都不懂?還是某句不懂?點亮一個LED做過嗎? |