历史上的今天
今天是:2024年10月16日(星期三)
2020年10月16日 | 51单片机三路抢答器
2020-10-16 来源:51hei



单片机程序源码:
/*******************************************************************************
* 标题: 三路抢答器 *
* 时间 2018年8月5日17:59:20 *
* *
* 实验说明:在10s的时间内,三位选手进行按键抢答,如果1号抢答,那么数码管将显示*
1号选手的号码。并且蜂鸣器响,以此类推。如果10s时间到,蜂鸣器响,选手 *
无法进行抢答 *
********************************************************************************
* 实验心得:做法相对简单,注意共阴数码管还是共阳数码管 *
********************************************************************************/
#include //IO口定义 #define GPIO_DIG P0 #define GPIO_SHOW P2 sbit LSA=P3^0; sbit beep=P1^5; sbit K1=P3^1; sbit K2=P1^0; sbit K3=P1^1; sbit K4=P1^2; //--定义全局变量--// typedef unsigned int u16; unsigned char code DIG_CODE[18]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned int Ge=0; unsigned int Shi=1; unsigned int num=0; unsigned int Res=10; unsigned int flag=0; //全局函数 void DigDisplay(); void delay(u16 i) { while(i--); } void main() { TMOD = 0x01; TH0 = 0x3C; TL0 = 0x0B0; EA = 1; ET0 = 1; TR0 = 1; DigDisplay(); } void DigDisplay() { unsigned char i; unsigned int j; while(1) { for(i=0;i<2;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0; GPIO_DIG=DIG_CODE[Shi];//发送段码 break;//显示第0位 case(1): LSA=1; GPIO_DIG=DIG_CODE[Ge];//发送段码 break;//显示第1位 } /****************************************************************************/ /*消隐函数要在数码管更新频率很快的条件下,才起作用,手动更换数码管位选完全达不到这么快的速度,因此在这种情况下也是没必要用消隐的 */ j=10; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } if(K1==0) { Res=10; flag=0; } else if(K2==0) { GPIO_SHOW=~DIG_CODE[1]; while(1) { beep=~beep; delay(10); if(K1==0) { Res=10; flag=0; GPIO_SHOW=~DIG_CODE[17]; break; } } } else if(K3==0) { GPIO_SHOW=~DIG_CODE[2]; while(1) { beep=~beep; delay(10); if(K1==0) { Res=10; flag=0; GPIO_SHOW=~DIG_CODE[17]; break; } } } else if(K4==0) { GPIO_SHOW=~DIG_CODE[3]; while(1) { beep=~beep; delay(10); if(K1==0) { Res=10; flag=0; GPIO_SHOW=~DIG_CODE[17]; break; } } } } } void Int1() interrupt 1 { TMOD = 0x01; TH0 = 0x3C; TL0 = 0x0B0; num++; if(num==20) { num=0; flag++; Res--; Ge=Res%10; Shi=Res/10; } if(flag==10) { while(1) { beep=~beep; delay(10); if(K1==0) { Res=10; flag=0; break; } } } }
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 02:54 编辑 包括测试程序,原理图,是买的一块开发板上给的。 [ 本帖最后由 chbaaic 于 2008-10-30 11:52 编辑 ] … 查看全部问答> |
|
百利通公司总部设在硅谷,是Nasdaq上市公司,在晶体振荡器领域位居世界前十大。百利通公司在香港和美国都设有研发中心,拥有一批经验丰富的专业设计人员。随着产品线的扩充和区域市场的成熟,先后在台湾、香港、上海设立公司,凭借其遍布全球的销售 ...… 查看全部问答> |
|
采用生物识别技术的门禁系统在安防行业应用已经越来越多,包括银行、监狱、部队等单位已经采用生物识别的门禁系统来加强其管理的安全性和使用的方便性。由于生物识别技术已经开始达到大规模的应用水平,包括产品价格、品质和技术都已经相对成熟 ...… 查看全部问答> |
|
大家好: 请教大家一个问题: 在微软window mobile 的windows media player下的右软键菜单下添加一个菜单项,该怎么添加? 微软是否提供相应的接口? 有谁知道 ...… 查看全部问答> |
|
程序大概这样的,一个试图列表里显示了CF卡中所有的文件,鼠标焦点可以放在文件上,但现在想做一个选取功能,就是,当鼠标单击了一个文件就能直接或按另一个按钮读出他的名字,这样好去CF卡中查找这个文件并对这个文件操作。问题是,怎么读出文件的 ...… 查看全部问答> |
|
公司名称: Carrier Access 公司网址: http://www.carrieraccess.com 电子邮箱: lshi@carrieraccess.com,简历请注明信息出处 工作地点: 上海 外语要求: 英文良好 简历接收方式: 英文及中文 学历: 本科以上 职位描述: -Candidates will ha ...… 查看全部问答> |




