【正文】
用。 在實現(xiàn)的過程中也碰到了很多問題,比如說菜單的選擇與返回,以及在鍵控發(fā)聲與發(fā)光時對按鍵的控制上都還是有點問題,希望以后在老師的幫助下能夠將它做得更好。在此對大家的努力表示衷心的感謝。 setvect()。 include //exit(0)。 int f1()。 int f3()。 int f5()。 void DisplayMenu()//打印主菜單 { system(cls)。 printf([soundlight alarm]\n)。 printf(|1. produce 8 kinds of light |\n)。 printf(|3. produce light and sound |\n)。 printf(|5. press number 1 to 8,control different kinds of light(stop when press q ) |\n)。 } void main()//主函數(shù) { char t。 do{ DisplayMenu()。 switch(t)//菜單選擇 { case 39。:f1()。 case 39。:f2()。 case 39。:f3()。 case 39。:f4()。 case 39。:f5()。 case 39。:quit=1。 } }while(!quit)。//LED 全滅 outportb(0x303,0x0c)。//LED 按順序發(fā)光 unsigned long int i=0,m=0。 printf(\nPress one of swdip8 to start!\n)。//存放 PB口的值 for(int k=0。 k++ )//判斷八碼開關哪一個按下 { if ( (PortValue amp。 printf(it is the number %d ,m+1)。 } else { PortValue= 1。 printf( you want to quit,please hit Any Key!)。inportb(0x302))!=0)。//初始化 outportb(0x300,0x00)。//關閉 SPK do{ outportb(0x300,u1[m][i])。 i++。 }while(!kbhit())。//0 鍵返回 }//F1()結束 int f2()//發(fā)出 8種不同的聲音 { unsigned long int j=0。 printf(\nPress one of swdip8 to start!\n)。//存放 PB口的值 for(int k=0。 k++ )//判斷八碼開關哪一個按下 { if ( (PortValue amp。 break。 } } printf(\nPress sw to start!\n)。 do{ }while((0x04amp。//查 SW按下 outportb(0x303,0x83)。//LED 全滅 outportb(0x303,0x0c)。j=100。//令 PC6=1,發(fā)高頻音 delay(k)。//令 PC6=0,關閉 SPK delay(k)。j=10。 delay(k*10)。//令 PC6=0,消音 delay(k*10)。//按任意鍵退出 return 0。 unsigned long int i=0,j=0。 printf( you want to quit,please hit Any Key!)。inportb(0x302))!=0)。//按順序送發(fā)光信號 i++。 for(j=0。j++) { outportb(0x303,0x0d)。 outportb(0x303,0x0c)。 } outportb(0x300,0x00)。j=10。 delay(10)。//令 PC6=0,消音 delay(10)。//按任意鍵退出 }//F3 結束 int sound(int s)//發(fā)出一種頻率的聲音 { unsigned long int j=0。j=10。//令 PC6=1,發(fā)高頻音 delay(s)。//令 PC6=0,關閉 SPK delay(s)。 return 0。 char ch。//清屏 DisplayMenu()。 ch=getch()。 switch(ch)//選擇聲音 { case 39。:sound(1) 。 case 39。:sound(5) 。 case 39。:sound(10) 。 case 39。:sound(15) 。 case 39。:sound(20) 。 case 39。:sound(25) 。 case 39。:sound(30) 。 case 39。:sound(35) 。 case 39。:quit=1。 } }while(!quit)。 outportb(0x300,0x00)。//按順序送發(fā)光信號 }while(!kbhit())。 char ch。 DisplayMenu()。 ch=getch()。 switch(ch)//選擇按鍵 { case 39。:light(0) 。 case 39。:light(1) 。 case 39。:light(2) 。 case 39。:light(3) 。 case 39。:light(4) 。 case 39。:light(5) 。 case 39。:light(6) 。 case 39。:light(7) 。 case 39。:outportb(0x300,0x00)。break。 } 19 參考文獻 1 劉樂善等 微型計算機接口技術及應用 華中科技大學出版社, 2020 年第 1 版 137— 150 頁 2 華中科技大 學計算計算機學院自編 MFID 微機實驗平臺 32 位實驗指導書 21— 24 頁、 81 頁