IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> AT89C51单片机的抢答器的设计(2位一体共阳) -> 正文阅读

[嵌入式]AT89C51单片机的抢答器的设计(2位一体共阳)

1.设计目的作用

1、掌握51单片机最小系统的设计;

2、掌握硬件电路的设计方法;

3、掌握C51的编程方式。

2.设计要求

基于AT89C51单片机设计制作一个抢答器,具体要求如下:

设计一个智力竞赛抢答器,可同时共8名选手参加比赛,编号为1、2、3、4、5、6、7、8,各用一个按键。

用一个按键作为主持人总开关,用来控制系统的清零和抢答的开始。

抢答器开始后,数码管开始10秒倒计时,若有选手按动抢答按钮,在LED数码管上显示选手的编号,同时灯亮且伴随声音提示;倒计时完成后,选手不能再抢答;有人抢答成功后,要禁止其他选手抢答,同时开始显示60秒回答时间倒计时提示;最先抢答选手的编号一直保留到主持人将系统清零。

仿真图(Proteus 8.6版本)

?源代码:

?#include<at89x51.h>
? sbit zkey=P3^5; ? ? ? ?// ? ?主持人按键
? sbit zkey1=P3^6;
? sbit beep=P3^7; ? ? ? ?// ? ?蜂鸣器
? sbit led=P3^4; ? ? ? ?//指示灯
? sbit shiwei=P3^0;
? sbit gewei=P3^1;
? sbit ?ge=P3^3; ? ? ? //数码管的位选
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90};//共阳数码管段选值
? unsigned char people; ? ? ? ? // ? ?抢答结果
? unsigned char counter; ? ? // ? ?counter每100,minite加1
? unsigned char second; ? ? ? ? // 秒表计数值
? unsigned char time1; ? ? ? ? // ? ?10秒倒计时
? unsigned char time2; ? ? ? ? // ? ?60秒倒计时?
? void delay(unsigned int z) //延时函数
? {
? ? unsigned i,j;
? ? for(i=z;i>0;i--)
? ? for(j=120;j>0;j--);
? }
? void time_display(unsigned char x)//函数功能:时间显示
? {
? ? unsigned char shi,ge;
?? ?
? ? shi=x/10;
? ? ge=x%10;
? ? shiwei=1;gewei=0;
? ? P0=seg[ge];
? ? delay(20);
? ? shiwei=0;gewei=1;
? ? P0=seg[shi];
? ? delay(20);
? ? shiwei=0;gewei=0;delay(20);
? }
? void xuanshou_display(unsigned char y)//函数功能:选手编号显示
? {
? ? shiwei=1;gewei=0;
? ? P2=seg[y];
? }
? ? unsigned char keyscan() ? ? ? ? ?//键盘扫描函数
? {
? ? unsigned char keyvalue,temp; ? ?
? ? keyvalue=0;
? ? P1=0xff; ? ? ? ? ? ? ? //P1口8位置1,作输入
? ? temp=P1; ? ? ? ? ? ? ? //读P1口,送入temp中
? ? delay(10); ? ? ? ? ? ? ? //消抖
? ? if(~(P1&temp)) ? ? ? ?
? ? {
? ? ? switch(temp)
? ? ? {
? ? ? ? case 0xfe: keyvalue=1; break;
? ? ? ? case 0xfd: keyvalue=2; break;
? ? ? ? case 0xfb: keyvalue=3; break;
? ? ? ? case 0xf7: keyvalue=4; break;
? ? ? ? case 0xef: keyvalue=5; break;
? ? ? ? case 0xdf: keyvalue=6; break;
? ? ? ? case 0xbf: keyvalue=7; break;
? ? ? ? case 0x7f: keyvalue=8; break;
? ? ? ? default: keyvalue=0; break;
? ? ? }
? ? }
? ? return keyvalue;
? }
? void timer_init() ?//定时器T0初始化
?{
? ?EA=1;
? ?ET0=1;
? ?TMOD=0x01; ? ? ? ?//定时器T0方式1定时
? ?TH0=0xd8; ? ? ? ?//装入定时器定时常数,设定10ms中断一次
? ?TL0=0xef;
?}
?void init() ? ? ? ? ?//初始化函数
?{ ??
? ? ?people=0; ? ? ? ? // ? ?抢答结果
? ? ?counter=0; ? ? ? ? // ? ?counter每100,minite加1
? ? ?second=0; ? ? ? ? // 秒表计数值
? ? ?time1=10; ? ? ? ? // ? ?10秒倒计时
? ? ?time2=60; ? ? ? ? // ? ?60秒倒计时?
? ? ?P0=seg[0];
?? ? P2=seg[0];
?}
? void main() ? ? ? ? ?//主函数
? {
? ? init();
? ? timer_init();?
?? ?led=0;
? ? while(1)
? ? {
? ? ? if(zkey==0) ? ? ? ? ? ? //总开关第一次闭合
? ? ? {
? ? ? delay(10); ? ? ? ? ? ? ? ? ? //消抖
? ? ? if(zkey==0) ? ? ? ? ? ?//总开关第一次闭合
? ? ? {
? ? ? ? second=time1; ??
? ? ? ? while(second)
? ? ? ? { ? ? ? ? ? ? ? ??
? ? ? ? ? TR0=1;?
? ? ? ? ? time_display(second); ? ? ?//十秒倒计时显示 ? ? ? ?
? ? ? ? ? people=keyscan(); ? ? ? ? ? //将抢答结果送入people
? ? ? ? ? while(people!= 0) ? ? ? ? ? ? ? ?//判断有按键按下
? ? ? ? ? { ? ? ? ? ? ?
? ? ? ? ? ? TR0=0; ? ? ? ? ? ? ? ? ? ? ? ?//停止10秒倒计时 ? ? ? ? ? ? ? ?
? ? ? ? ? ? led=1; ? ? ? ? ? ? ? ? ? ? ? ?//灯亮 ? ? ? ? ? ?
? ? ? ? ? ? xuanshou_display(people); ? //显示对应选手编号
? ? ? ? ? ? beep=0; ? ? ? ? ? ? ? ? ? ? ? ?//蜂鸣器响
? ? ? ? ? ? delay(2000);
? ? ? ? ? ? beep=1; ? ?
? ? ? ? ? ? led=0; ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? second=time2; ? ? ? ? ? ? ? ?//60秒倒计时
? ? ? ? ? ? while(second)
? ? ? ? ? ? { ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? TR0=1;
? ? ? ? ? ? ? ? time_display(second);
? ? ? ? ? ? ? ? if(zkey1==0) ? ? ? ? ? ? ? ? ? //总开关第二次闭合
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ?delay(10); ? ? ? ? ? ? ? //消抖
? ? ? ? ? ? ? ? if(zkey1==0) ? ? ? ? ? ? ? ? ? //总开关第二次闭合
? ? ? ? ? ? ? ? ? ?init(); ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?}
? ? ? ? ? ? TR0=0;
? ? ? ? ? ? people=0; ? ? ? ? ? ? ? ? ? //抢答结果清零,终止循环
? ? ? ? ? ? }
? ? ? ?} ? ?
? ? ?}
? ? } ? ? ? ? ? ??
?void timer0() interrupt 1 ? ? ?//定时器T0中断函数
?{
? ?if(counter<100)
? ?{
? ? ?counter++;
? ?}
? ?else
? ?{
? ? ?counter=0;
? ? ?second=second-1;
? ?}
? ?TH0=0xd8; ? ? ? ? ? ? ?//重新装载
? ?TL0=0xef;
? ?TR0=1;
?}

元件清单

元件名称

型号

单位

数量

51最小开发板

STC89C52

1

AC/DC电源

每班5个

万用板

9X15cm(3连孔)

1

按键开关

6*6*5MM/直插/4脚

12

单排插针

1*40P、2.54mm间距

1

电阻

10k/1/8W

13

杜邦线

母对母/1P对1P/20CM/40根一排

半排

红色LED

?5

1

排母

1*16、2.54mm间距

1

排阻

4.7K(9脚)

1

三极管

9015

3

数码管

2位一体共阳

2

有源蜂鸣器

有源/5V/电磁式/ YHE12-05

1

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:59:12  更:2021-09-11 19:00:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 19:34:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码