8路搶答器(帶倒計時)
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義 #define uchar unsigned char #define uint unsigned int sbit SPK=P1^2; unsigned char code seg[]={0,1,2,3,4,5,6,7}; unsigned char code dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F uchar keyscan(); //鍵盤掃描 void play(); /******************************************************************/ /* 延時函數 */ /******************************************************************/ void delay(unsigned int cnt) { while(--cnt); } void delay1() { int i,j; for(i=200;i>0;i--) for(j=1000;j>0;j--); } /******************************************************************/ /* 主函數 */ /******************************************************************/ void main() { uint gewei,shiwei,i,j,k,flag=1; uchar key; uint time=11; while(time--) //十秒倒計時 { if(time==0) break; shiwei=dofly[time/10]; gewei=dofly[time%10]; for(j=0;j<100;j++) //數碼管動態掃描,隻顯示前兩位 { delay(300); P0=gewei; //段選 P2=1; //位選 delay(300); P0=shiwei; P2=0; } } for(k=5;k>0;k--) //無源蜂鳴器響5聲 { for(i=0;i<200;i++)//喇叭發聲的時間循環,改變大小可以改變發聲時間長短 { delay(80); //參數決定發聲的頻率,估算值,可以自行更改參數並 SPK=!SPK; } SPK=1; //喇叭停止工作,間歇的時間,可更改 delay(80); } while(1) //8路搶答器搶答 { key=keyscan(); //調用鍵盤掃描, { if(key==0x7e) { P0=dofly[1],P1=0x00;play();} if(key==0xbe) { P0=dofly[2],P1=0x00;play();} if(key==0xde) { P0=dofly[3],P1=0x00;play();} if(key==0xee) { P0=dofly[4],P1=0x00;play();} if(key==0x7d) { P0=dofly[5],P1=0x00;play();} if(key==0xbd) { P0=dofly[6],P1=0x00;play();} if(key==0xdd) { P0=dofly[7],P1=0x00;play();} if(key==0xed) { P0=dofly[8],P1=0x00;play();} } } } /*------------------------------------------------ 鍵盤掃描程序 ------------------------------------------------ */ uchar keyscan() //鍵盤掃描函數,使用行列反轉掃描法 { uchar cord_h,cord_l;//行列值中間變量 P3=0xf0; //行線輸出全為0 P1=0xff; cord_h=P3&0xf0; //讀入列線值 if(cord_h!=0x0f) //先檢測有無按鍵按下 { delay(100); //去抖 if(cord_h!=0x0f) { cord_h=P3&0xf0; //讀入列線值 P3=cord_h|0x0f; //輸出當前列線值 cord_l=P3&0x0f; //讀入行線值 return(cord_h+cord_l);//鍵盤最後組合碼值 } } // return(0x00); //返回該值 } void play() //8個數碼管動態掃描,死循環 { int j=0,i; for(i=1;i>0;i++) //a死循環 { P2=seg[j++]; { if(j==8) j=0; } delay(100); } }
最後更新:2017-04-03 14:54:35
上一篇:
J2EE部署項目至Tomcat報錯:Unable to read TLD "META-INF/c.tld"
下一篇:
Eclipse SVN (Subclipse的更新日誌)、版本集合(1.10.0起)、更新、安裝方法!
配置 mysql/mariadb sphinxSE 錯誤解決 1st column must be bigint to accept 64-bit DOCID
Asp.net相關書籍
jQuery中通過$.browser來判斷瀏覽器
Java實現全排列、組合算法
graph driver-device mapper-01driver初始化
IDC:中國存儲市場推動力主要來自政府
大神手把手教你:(Python)序列數據的One Hot編碼
深度學習中的基礎線性代數-初學者指南
PostgreSQL 10.0 preview 功能增強 - 邏輯複製支持並行COPY初始化數據
WCF 4.0一個鮮為人知的改變[兼書名征集]