基于51单片机的8路16路抢答器proteus仿真程序设计

您所在的位置:网站首页 抢答器功能描述 基于51单片机的8路16路抢答器proteus仿真程序设计

基于51单片机的8路16路抢答器proteus仿真程序设计

2023-11-28 07:39| 来源: 网络整理| 查看: 265

硬件设计

系统设计 该抢答器系统的设计是以单片机为中心控制模块,采用模块化设计的八路抢答器,具有五个模块,分别为:按键输入模块、显示模块、时钟与复位模块、核心控制模块、报警模块。 1.1按键输入模块 按键输入模块共有14个按键,分为抢答按键和控制按键。抢答按键共有八个,分别为S0―S7,供抢答选手进行抢答使用,P2.0-P2.7口为八个按键抢答信号的输入口,低电平有效。控制按键有4个,分别为 “加时间”“减时间”“开始键”“复位键”,其对应的I∕O接口分P1.0,P1.1 ,P1.2和P1.3。 1.2显示模块 显示模块既可以选用液晶显示器,也可以选用数码管显示。我们采用的是液晶显示电路来抢答选手及时间。 1.3时钟与复位模块 时钟与复位模块包括时钟电路和复位电路,单片机的最小系统就是由时钟电路、复位电路、电源电路及单片机构成。单片机的时钟信号用来提供单片机片内各种操作的时间基准,单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。根据应用的要求,复位操作通常有两种基本形式:上电复位或开关复位。当5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。 1.4核心控制模块 核心控制模块就是人们所谓的CPU,它是整个系统的总控制部分,本系统的核心控制模块为51系列的单片机,只有我们通过软件程序的编写,并将程序写入单片机,该系统才会正确的工作。 主控制器选择即为单片机的选择,单片机实际上就是把CPU、RAM、ROM、定时器/计数器、I/O接口电路等微型机的主要部件集成在一块芯片上,因此称之为单片机。 AT89C51单片机主要有以下部件构成:八位微处理器CPU、振荡电路、总线控制部件、中断控制部件、片内Flash存储器、片内RAM、并行I/O接口、定时器和串行I/O接口。AT89C51单片机内部由CPU、4KB的FPEROM ,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成。单片微机内部最核心的部分是CPU,CPU按其功能可分为运算器和控制器两部分。控制器由程序计数器PC、指令储存器、指令译码器、实时控制与条件转移逻辑电路等组成。它的功能是对来自存储器中的指令进行译码,通过实时控制电路,在规定的时刻发出各种操作所需的内部和外部的控制信号,使各部分协调工作,完成指令所规定的操作。运算器由算术逻辑器部件ALU、累加器ACC、暂存器、程序状态字寄存器PSW,BCD码运算调整电路等组成。为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻辑电路的功能。 1.5报警模块 报警电路用于报警,当遇到报警信号时,发出警报。报警模块是由一个NPN型的三极管和一个喇叭组成的。

8路 仿真图:: 在这里插入图片描述

16路 仿真图: 在这里插入图片描述

程序设计: #include #include sbit sjjia=P1^0; //定义时间加按钮 sbit sjjian=P1^1; //定义时间减按钮 sbit kaishi=P1^2; //定义开始按钮 sbit fuwei=P1^3; //定义复位按钮 sbit soud=P1^4; //报警按钮 sbit led_r=P1^5; //定义抢答成功指示 sbit led_y=P1^6; //定义阐述时间到指示 unsigned char num[]={'0','1','2','3','4','5','6','7','8','9'},num2; unsigned char model,time,temp; void init() //初始化函数 { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; TR0=0; EA=1; P1=0x0f; model=0; time=30; } void delay(unsigned char i) //延时函数 { unsigned char j,k; while(i--) for(j=100;j>0;j--) for(k=100;k>0;k--); } void star() //启动 { lcd_xml(0x80);lcd_xsj(" welcome "); delay(100); lcd_xml(0xc0);lcd_xsj(" 8 Way Responder"); delay(80); } void led_num() //刷新倒计时 { lcd_xml(0x80);lcd_xsj(" Countdown : "); lcd_xml(0x8d);lcd_xsj2(num[time/10]); lcd_xml(0x8e);lcd_xsj2(num[time%10]); } void reset() //复位 { TR0=0; P1=0x0f; led_r=0; led_y=0; P2=0xff; model=0; time=10; led_num(); lcd_xml(0xc0);lcd_xsj(" Not started "); } void Not_started() { if(sjjia==0) { delay(10); if(sjjia==0) { time++; if(time==100) time=0; led_num(); } } if(sjjian==0) { delay(10); if(sjjian==0) { time--; if(time==0) time=99; led_num(); } } if(kaishi==0) { delay(10); if(kaishi==0) { model=1; TR0=1; lcd_xml(0xc0);lcd_xsj(" Start Responder"); soud=1;delay(10);soud=0; } } } void anjian() { if(P2 != 0xff) { delay(5); if(P2 != 0xff) { temp=~P2; model=3; led_r=1; soud=1;delay(10);soud=0; switch(temp) { case 0x01:num2=1;break; case 0x02:num2=2;break; case 0x04:num2=3;break; case 0x08:num2=4;break; case 0x10:num2=5;break; case 0x20:num2=6;break; case 0x40:num2=7;break; case 0x80:num2=8;break; } lcd_xml(0xc0);lcd_xsj(" Competitor: "); lcd_xml(0xce);lcd_xsj2(num[num2]); time=60; P2=temp; } } } void finish() { if(!time) { led_y=1; lcd_xml(0xc0);lcd_xsj(" End "); } } void main() { init(); lcd_init(); star(); reset(); while(1) { if(fuwei==0) //复位键检测 { delay(1); if(fuwei==0) reset(); } switch(model) { case 0:Not_started();break; case 1:anjian();break; case 2:finish();break; case 3:break; default : model=0;break; } } } void timee() interrupt 1 //1s函数中断 { unsigned char a; TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; //是否满1s if(a==24) { a=0; if(model==1 || model==3) { time--; led_num(); if(time==0) { model=2; soud=1;delay(20);soud=0; } } } }

附:http://www.jh-tec.cn/archives/7280



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3