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

2023-12-11 18:50

本文主要是介绍基于51单片机的8路16路抢答器proteus仿真程序设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

硬件设计

系统设计
该抢答器系统的设计是以单片机为中心控制模块,采用模块化设计的八路抢答器,具有五个模块,分别为:按键输入模块、显示模块、时钟与复位模块、核心控制模块、报警模块。
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<reg51.h>
#include<lcd1602.h>
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++;	//是否满1sif(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

这篇关于基于51单片机的8路16路抢答器proteus仿真程序设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481743

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><