1. 實驗任務 (1. 開機時,顯示“0” (2. 第一次按下時,顯示“D1”;第二次按下時,顯示“D1D2”;第三按下時,顯示“D1D2D3”,8個全顯示完畢,再按下按鍵下時,給出“嘀”提示音。 2. 電路原理圖 ͼ4.23.1 3. 系統板上硬體連線 (1. 把“單片機系統”區域中的P1.0埠用導線連接到“音頻放大模塊”區域中的SPK IN埠上; (2. 把“單片機系統“區域中的P3.0-P3.7埠用8芯排線連接到“4X4行列式鍵盤”區域中的C1-C4 R1-R4埠上; (3. 把“單片機系統”區域中的P0.0-P0.7埠用8芯排線連接到“動態數碼顯示”區域中的A-H埠上; (4. 把“單片機系統:區域中的P2.0-P2.7埠用8芯排線連接到“動態數碼顯示”區域中的S1-S8埠上; 4. 相關程序設計內容 (1. 行列式鍵盤輸入及按鍵功能設定; (2. 動態數碼顯示; (3. 數碼顯示方式處理; 5. 彙編源程序 (略) 6. C語言源程序 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char dispbuf[8]={0,16,16,16,16,16,16,16}; unsigned char dispbitcount; unsigned char temp; unsigned char i,j; unsigned char key; unsigned char keypos; bit alarmflag; void change(unsigned char *p,unsigned char count) { while(count>0) { *(p+count)=*(p+count-1); count--; } } void main(void) { TMOD=0x01; TH0=(65536-4000) / 256; TL0=(65536-4000) % 256; TR0=1; ET0=1; EA=1; while(1) { P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { for(i=50;i>0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; } if ((key>=0) && (key0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; } if ((key>=0) && (key0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; } if ((key>=0) && (key0;i--) for(j=200;j>0;j--); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } if ((key>=0) && (key |