基于51单片机的简易抢答器设计
基于51單片機的簡易搶答器
具體功能:
1、主持人按下搶答開始按鍵,搶答者才可以開始搶答,數碼管搶答倒計時20S。
2、搶答者按下按鍵,數碼管顯示搶答者的編號。
3、可以通過按鍵修改倒計時時間。
部分程序代碼:
#include<reg51.h> #define uchar unsigned char #define uint unsigned int #define max 20 uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管段碼sbit d1=P2^4; sbit d2=P2^5; sbit x1=P2^6; sbit x2=P2^7;sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; sbit k7=P1^6; sbit k8=P1^7;sbit zk1=P2^0; sbit zk2=P2^1;sbit buz=P2^2;unsigned char d_num,cnt; uchar x_flag;void jianpan();void init(void) {TMOD=0X01;TL0=0XB0; TH0=0X3C; // TR0=1; ET0=1; EA=1;d_num=max; }void delay(uint xms) {uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--); }void display() {d1=0; //位選端;P0=tab[d_num/10];//顯示倒計時delay(5);d1=1;d2=0;P0=tab[d_num%10];delay(5);d2=1;x1=0; //位選端P0=tab[x_flag/10];//顯示選手號delay(5);x1=1;x2=0;P0=tab[x_flag%10];delay(5);x2=1; }void main() { init();while(1){ jianpan();display();} }void timer0(void) interrupt 1 { TL0=0XB0; //重裝初值TH0=0X3C; cnt++;if(cnt==20)//1 秒時間到{cnt=0;//計數清零d_num--;if(d_num==0){d_num=max;TR0=0; //關閉所有操作}buz=0; delay(20);buz=1;} }仿真原理圖:
以下可以忽略不看!
一、復位電路的用途:單片機復位電路就好比電腦的重啟部分,當電腦在使用中出現死機,按下重啟按鈕電腦內部的程序從頭開始執行。單片機也一樣,當單片機系統在運行中,受到環境干擾出現程序跑飛的時候,按下復位按鈕內部的程序自動從頭開始執行。
二、復位電路的工作原理在書本上有介紹,51單片機要復位只需要在第9引腳接個高電平持續2US就可以實現,那這個過程是如何實現的呢?在單片機系統中,系統上電啟動的時候復位一次,當按鍵按下的時候系統再次復位,如果釋放后再按下,系統還會復位。所以可以通過按鍵的斷開和閉合在運行的系統中控制其復位。
開機的時候為什么會復位:在電路圖中,電容的的大小是10uF,電阻的大小是10k。所以根據公式,可以算出電容充電到電源電壓的0.7倍(單片機的電源是5V,所以充電到0.7倍即為3.5V),需要的時間是10K*10UF=0.1S。也就是說在單片機啟動的0.1S內,電容兩端的電壓時在03.5V增加。這個時候10K電阻兩端的電壓為從51.5V減少(串聯電路各處電壓之和為總電壓)。所以在0.1S內,RST引腳所接收到的電壓是5V~1.5V。在5V正常工作的51單片機中小于1.5V的電壓信號為低電平信號,而大于1.5V的電壓信號為高電平信號。所以在開機0.1S內,單片機系統自動復位(RST引腳接收到的高電平信號時間為0.1S左右)。
按鍵按下的時候為什么會復位:在單片機啟動0.1S后,電容C兩端的電壓持續充電為5V,這是時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統正常工作。當按鍵按下的時候,開關導通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內,從5V釋放到變為了1.5V,甚至更小。根據串聯電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統自動復位。
總結
以上是生活随笔為你收集整理的基于51单片机的简易抢答器设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用友T6-委外的流程
- 下一篇: C语言期末考试复习资料(选择题)