标题: 51单片机的8路抢答器设计最终版 全套资源仿真+原理图+C程序 [打印本页]
作者: 121619282 时间: 2017-7-12 14:26
标题: 51单片机的8路抢答器设计最终版 全套资源仿真+原理图+C程序
看看吧非常全的资料
8路抢答器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1、各单元电路模块功能1.1时钟电路模块时钟电路由一个晶体振荡器12MHZ和两个22pF的瓷片电容组成。时钟电路用于产生单片机工作所需的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。其电路如图3.4所示:
图3.4 时钟电路模块
1.2复位电路模块 电容在上接高电平,电阻在下接地,中间为RST。这种复位电路为高电平复位。其工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。其电路如图3.5所示:
图3.5 复位电路模块
1.3主控制系统模块/最小系统主控制器采用STC89C52RC,STC89C52RC 单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单 片机,指令代码完全兼容传统 8051 单片机,12 时钟/机器周期和 6 时钟/机器周 期可以任意选择。
其特点如下:
1. 增强型 8051 单片机,6 时钟/机器周期和 12 时钟/机器周期可以任 意选择,指令代码完全兼容传统 8051.
2. 工作电压:5.5V~3.3V(5V 单片机)/3.8V~2.0V(3V 单片机)
3. 工作频率范围:0~40MHz,相当于普通 8051 的 0~80MHz,实际工 作频率可达 48MHz
4. 用户应用程序空间为 8K 字节
5. 片上集成 512 字节 RAM
6. 通用 I/O 口 (32 个) 复位后为: , P1/P2/P3/P4 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程) ,无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
8. 具有 EEPROM 功能
9. 具有看门狗功能
10. 共 3 个 16 位定时器/计数器。即定时器 T0、T1、T2
11. 外部中断 4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒
12. 通用异步串行口(UART) ,还可用定时器软件实现多个 UART
13. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)
14. DIP 封装
1.4显示电路
四位共阴极数码管显示。数据接P0口加上拉电阻驱动。段接P2.0 P2.1 P2.2,因为是共阴极的所以不需要加驱动模块。
1.5 报警电路Q1:9013,PNP三极管,单片机IO口输出0时蜂鸣器响,输出1时蜂鸣器不响。
1.6电源模块本设计有两种供电方式,一种是,电池供电,另一种是usb供电。
1.7 按键输入电路
上面从左到右:开始 暂停 服务
下面从左到右:1号 2号 3号 4号 5号 6号 7号 8号
单片机源程序如下:
- #include
- #include
- sbit smg1=P2^4; //定义数码管第一位
- sbit smg2=P2^6; //定义数码管第二位
- sbit smg3=P2^7; //定义数码管第三位
- sbit smg4=P2^5;
- sbit keyks=P2^2; //定义开始按键
- sbit keytz=P2^1; //定义停止按键
- sbit keyqc=P2^0; //定义清除按键
- sbit key1=P1^4; //定义1号抢答选手 sbit
- sbit key2=P1^5; //定义2号抢答选手
- sbit key3=P1^6; //定义3号抢答选手
- sbit key4=P1^7; //定义4号抢答选手
- sbit key5=P3^4; //定义5号抢答选手
- sbit key6=P3^5; //定义6号抢答选手
- sbit key7=P3^6; //定义7号抢答选手
- sbit key8=P3^7; //定义8号抢答选手
- sbit spk=P1^0; //定义蜂鸣器
- int djs=60,js=0; //djs和bt是初始倒计时时间,可修改
- unsigned char flag=0;
- //int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};
- void delayms(int x) //延时函数
- {
- char i;
- while(x--)
- {
- for(i=500;i>0;i--);
- }
- }
-
- void Timer0_init() //定时器0初始化
- {
- js=0;
- TMOD=0x01; //T0为定时器方式1
- TH0=60;
- TL0=176;
- //TR0=1;//IT1=1;
- ET0=1;//EX1=1;
- EA=1;
- }
- void timer0() interrupt 1 using 1 //定时器0中断服务函数
- {
- TF0=0;
- TH0=60;
- TL0=176; //赋初值
- js++;
- if(flag==1)
- {
- if(js<8)
- spk=0;
- else spk=1;
- }
- if(js==20)
- { js=0;
- djs--; //产生1s的倒计时
- }
- }
- void djsxs() //显示倒计时函数
- { int b1,b2;
- b1=djs/10;
- b2=djs%10; // 将倒计时时间分成高低位
- P0=table[b1];
- smg2=0;
- delayms(3);
- smg2=1; //显示十位数字
- P0=table[b2];
- smg3=0;
- delayms(3); //显示个位数字
- smg3=1;
- }
- void djsxs30() //第二位数码管显示-
- {
- P0=0x80; //第二位数码管
- smg4=0;
- delayms(3);
- smg4=1;
- }
- void djsxs22()
- {
- P0=0x80;
- smg1=0;
- delayms(3);
- smg1=1;
- //第一位数码管显示-
- P0=0x80; //第二位数码管
- smg4=0;
- delayms(3);
- smg4=1;
-
- P0=0x80;
- smg2=0;
- delayms(3); //第三位数码管显示-
- smg2=1;
- P0=0x80;
- smg3=0;
- delayms(3);
- smg3=1; //第四位数码管显示-
- }
- void djsxs1()
- {
- P0=table[1];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示1
- }
- void djsxs2()
- {
- P0=table[2];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示2
- }
- void djsxs3()
- {
- P0=table[3];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示3
- }
- void djsxs4()
- {
- P0=table[4];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示4
- }
- void djsxs5()
- {
- P0=table[5];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示5
- }
- void djsxs6()
- {
- P0=table[6];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示6
- }
- void djsxs7()
- {
- P0=table[7];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示7
- }
- void djsxs8()
- {
- P0=table[8];
- smg1=0;
- delayms(3);
- smg1=1; //第一位数码管显示8
- }
- void main()
- {
- int djs1=60;
- Timer0_init(); //初始化定时器中断
- spk=1; //蜂鸣器不响
- djs=60; //倒计时赋值
- while(1)
- {
- LOOP1: djs=djs1;
- djsxs22(); //LOOP1是标号,显示 - --
- if(key1==0) //在定时器运行状态下,key1==0 则说明1号选手按下按键
- {
- delayms(3);
- if(key1==0)
- {
- while(!key1); //去除按键抖动后,重新在判断,是否确实按下
- djs=60;
- while(1)
- {
- TR0=0; //定时器停止
- djsxs();
- if(key2==0) //复位按下按下
- {
- delayms(8); //去除抖动
- if(key2==0) //再次判断是否按下复位按键
- {
- do
- {
- while(!key2); //如果按下复位键,则回到- --状态
- delayms(5);
- }
- while(key2!=1);
- djs++;
- djs1=djs;
- }
- }
- if(key3==0) //复位按下按下
- {
- delayms(8); //去除抖动
- if(key3==0) //再次判断是否按下复位按键
- {
- do
- {
- while(!key3); //如果按下复位键,则回到- --状态
- delayms(5);
- }
- while(key3!=1);
- djs--;
- djs1=djs;
- }
- }
- if(key1==0) //复位按下按下
- {
- delayms(3); //去除抖动
- if(key1==0) //再次判断是否按下复位按键
- {
- while(!key1); //如果按下复位键,则回到- --状态
- goto LOOP1; //goto语句,回到loop1表号处
- }
- }
- }
- }
- }
- if(keyks==0)
- {
- //spk=0;
- delayms(3); //去除按键抖动
- if(keyks==0)
- {
- while(!keyks); //以上表示按下开始按键
- //spk=1; //蜂鸣器不响
- TR0=1; //启动定时器 开始倒计时
- while(1)
- {
- djsxs();
- if(keytz==0)
- {
- delayms(3); //此处表示出去抖动, 以后不一一标出
- if(keytz==0)
- {
- while(!keytz); //以上表示按下停止按键后
- {
- TR0=0; //定时器停止
- flag=0;//
- spk=1;
- }
- }
- }
- if(keyks==0)
- {
- //spk=0;
- delayms(3);
- if(keyks==0)
- {
- while(!keyks); //以上表示按下清楚按键后
- //spk=1; //蜂鸣器不响
- TR0=1; //定时器启动
- }
- }
- /***************************以下是八个选手抢答,key1表示1号选手,依次类推,注释只写第一位选手,其他和第一个完全一致,************************************/
- if((key1==0)&&(TR0==1)) //在定时器运行状态下,key1==0 则说明1号选手按下按键
- { spk=0; //蜂鸣器响
- delayms(3);
- if(key1==0)
- {
- while(!key1); //去除按键抖动后,重新在判断,是否确实按下
- {
- spk=1; //蜂鸣器不响
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0; //定时器停止
- djsxs1(); //显示选手编号
- djsxs30(); //第二位数码管显示-
- djsxs(); //显示剩余倒计时时间
- if(keyqc==0)
- {
- delayms(3); //去除抖动
- if(keyqc==0)
- {
- while(!keyqc); //如果按下清楚键,则回到- --状态
- goto LOOP1; //goto语句,回到loop1表号处
- }
- }
- }
- }
- }
- if((key2==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key2==0)
- {
- while(!key2);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs2();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- }
- if((key3==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key3==0)
- {
- while(!key3);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs3();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- }
- if((key4==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key4==0)
- {
- while(!key4);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs4();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- }
- if((key5==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key5==0)
- {
- while(!key5);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs5();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- }
- if((key6==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key6==0)
- {
- while(!key6);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs6();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- }
- if((key7==0)&&(TR0==1))
- { spk=0;
- delayms(3);
- if(key7==0)
- {
- while(!key7);
- {
- spk=1;
- flag=0;//清0最后五秒响蜂鸣器
- }
- while(1)
- {
- TR0=0;
- djsxs7();
- djsxs30(); //第二位数码管显示-
- djsxs();
- if(keyqc==0)
- {
- delayms(3);
- if(keyqc==0)
- {
- while(!keyqc);
- goto LOOP1;
- }
- }
- }
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
八路抢答器设计.zip
(1.95 MB, 下载次数: 1759)
作者: admin 时间: 2017-7-13 02:32
好资料,51黑有你更精彩!!!
作者: fefen0 时间: 2017-7-13 23:22
51黑有你更精彩!!!
作者: 余文江 时间: 2017-12-20 15:37
厉害啊 老铁
作者: aaaaaa小黄人 时间: 2017-12-24 21:39
这个不错,准备下载这个
作者: QWEWQEASD 时间: 2017-12-26 21:45
这个真的不错,谢谢啦 准备下载 多谢分享
作者: yuze123 时间: 2017-12-28 21:26
这个好呀,全面非常好
作者: KAKA_X 时间: 2018-1-8 12:01
谢谢分享
作者: 5252525 时间: 2018-3-12 09:52
好资料,51黑有你更精彩!!!
作者: gkdsg 时间: 2018-3-15 10:25
51黑有你更精彩!!!
作者: 没有梦想的咸鱼 时间: 2018-4-12 10:55
51黑有你更精彩!!!
作者: zgb0907 时间: 2018-4-12 12:58
下载不了
作者: junonull 时间: 2018-4-12 14:37
想研究一下
作者: shouwang123 时间: 2018-4-15 14:44
不知道怎么样 下载试试
作者: lucianlmx 时间: 2018-4-27 13:08
真心不错!老铁!!!
作者: 戚嘉丶 时间: 2018-4-27 14:51
好资料,51黑有你更精彩!!!
作者: moqingyu 时间: 2018-6-6 19:10
什么啊,不靠谱
作者: hexiaolong 时间: 2018-6-6 19:24
试试看
作者: 小邓头 时间: 2018-6-10 20:21
很好的程序
作者: 0427 时间: 2018-6-12 07:35
很好
作者: 傻子57 时间: 2018-6-15 11:21
好资料,51黑有你更精彩!!!
作者: 傻子57 时间: 2018-6-15 11:42
好资料,51黑有你更精彩!!!
作者: 吾C杰 时间: 2018-6-23 20:41
mark一下
作者: dailyren 时间: 2018-6-26 06:36
真的不错啊 好想下一个
作者: qowsbx123 时间: 2018-6-26 11:22
需要这份资料
作者: EEEEEEcho 时间: 2018-6-30 14:15
我也下不了啊
作者: 阿玉 时间: 2018-7-1 15:36
好东西啊 准备下载这个
作者: 323232323223 时间: 2018-7-4 03:25
赞一个
作者: 一黑到底 时间: 2018-7-8 14:50
如果错了一步,检查起来会不会脑壳痛?
作者: 咕咕 时间: 2018-9-5 18:40
单片机烧入仿真,怎么出现乱码
作者: aa1149263332 时间: 2018-9-5 19:23
下一个
作者: sakeboy 时间: 2018-9-7 20:01
51黑有你更精彩
作者: zhouwei0815 时间: 2018-10-16 09:02
非常感谢 东西很全 从仿真到实物清单 都有 真的省了不少事
作者: 叫我GGBond 时间: 2018-10-30 15:35
很全啊 比其他的都要全
作者: 张怀震 时间: 2018-10-30 17:14
好资料,找51.
作者: 过来混日子 时间: 2018-11-3 00:52
好资料,51黑有你更精彩!!!
作者: QQ99 时间: 2018-11-9 23:12
谢谢谢谢啊
作者: asfef 时间: 2018-11-15 12:02
好资料,51黑有你更精彩!!!
作者: 王特酮 时间: 2018-11-26 09:39
优秀
!!!!!!!!!
作者: ehew3006 时间: 2018-11-27 15:02
好资料,51黑有你更精彩!!!
作者: 南笙与北海 时间: 2018-11-29 16:32
老铁 你很6
作者: qq459497878 时间: 2018-11-29 17:29
好资料,51黑有你更精彩!!!
作者: 赵永兴1124 时间: 2018-11-30 12:30
好资料,51黑有你更精彩!!!
作者: 赵永兴1124 时间: 2018-11-30 12:31
很给力!!!
作者: 陈亚东 时间: 2018-12-11 12:43
下载下来试了除了汇编语言那里不通其余的都对着呢,thankyou
作者: lzDestiny 时间: 2018-12-11 13:39
这个挺不错的啊
作者: lzDestiny 时间: 2018-12-11 13:45
确实很好,内容很丰富
作者: qdktv 时间: 2018-12-17 10:13
很好,可惜下载不了,黑币不够
作者: lzDestiny 时间: 2018-12-20 17:32
感觉写的有点重复了
作者: zxc345 时间: 2018-12-25 12:32
不错呀,这个
作者: 单霸王 时间: 2018-12-25 18:57
厉害了呢啊啊啊
作者: 826898626 时间: 2018-12-27 10:52
这个不错,准备下载这个
作者: heeda 时间: 2018-12-27 10:57
感谢分享,学习了
作者: xghr 时间: 2018-12-27 13:02
好资料,支持地
作者: lzm1358 时间: 2018-12-30 20:01
很好的资源
作者: jk02lyq 时间: 2019-3-5 08:43
可惜没有犯规蜂鸣,也不能随意重置,没有计分电路,不过其他的还算可以
作者: ljsh 时间: 2019-3-10 22:16
谢谢楼主,十分感谢。
作者: 95827 时间: 2019-3-11 09:05
好资料
作者: zzfwhlltz 时间: 2019-3-18 09:47
很详细 想要看的资料都有 而且自己根据电路跟程序还能改一改 
作者: 12574 时间: 2019-3-25 15:03
好资料,51黑有你更精彩!!!
作者: hunkcn 时间: 2019-3-26 11:00
牛逼 牛逼!!!!!
作者: uiop5 时间: 2019-4-11 18:01
好东西
作者: 586486 时间: 2019-4-11 19:58
谢谢分享,学习了。
作者: 彭海洋 时间: 2019-4-15 15:04
好资料,谢谢楼主
作者: 单片机小白lzl 时间: 2019-4-19 15:38
谢谢大佬
作者: 萌新问问 时间: 2019-4-22 17:43
真的很棒啊老铁,简单明了,像我这样的新手都看的懂
作者: lbc110203 时间: 2019-5-30 10:11
GOOD 非常棒
作者: 恏恏恏 时间: 2019-5-30 21:57
代码怎么不对
作者: 絗綃約 时间: 2019-6-5 09:31
有没有源代码
作者: BoMiFan 时间: 2019-6-6 12:36
很好,正好需要,谢谢分享!
作者: 玉龙隐 时间: 2019-6-6 14:52
这也太棒了吧!对于只会刷网页的我来说,简直打开了新世界的大门
作者: WangHg1982 时间: 2019-6-6 22:00
很不错的程序。。。。。。。。。
作者: jim666 时间: 2019-6-10 16:29
真的很厉害
作者: beerus 时间: 2019-6-11 08:32
谢谢楼主!!!!!!!!!!
作者: KJP 时间: 2019-6-11 20:09
挺好的,先下载研究一下
作者: byxiao 时间: 2019-6-12 13:37
好资料,51黑有你更精彩!!!
作者: 么么牛 时间: 2019-6-12 22:41
感谢分享 对我非常有用
作者: 1+1=6 时间: 2019-6-13 08:53
已下载,好好学习
作者: S小黄 时间: 2019-6-19 08:53
这么仔细 简直很赞好吗
作者: 有点小帅 时间: 2019-6-19 19:59
好资料,51黑有你更精彩!!!
作者: 小十一 时间: 2019-6-20 07:58
太棒了,做好了下载的准备
作者: 陈磊哦哦 时间: 2019-6-20 09:52
新人必备
作者: ·知黑守白· 时间: 2019-7-4 17:38
很很给力 兄弟 谢谢
作者: 牧神记 时间: 2019-9-24 15:55
楼主,谢谢你的分享
作者: ddfq 时间: 2019-9-24 23:00
怎么我的仿真不对啊,程序和仿真图都没有动
作者: TravelingLight 时间: 2019-9-26 08:38
正需要 感谢
作者: wsq0387 时间: 2019-10-21 19:10
感谢楼主分享
作者: zzzxa 时间: 2019-10-28 15:05
赞一个
作者: lgr9802 时间: 2019-11-12 13:12
感谢楼主 正好在做这份作业 谢谢了!
作者: hcwrnxr 时间: 2019-11-22 01:48
厉害呀
作者: hcwrnxr 时间: 2019-11-22 01:58
我也想要一份啊啊啊
作者: 爆炸头 时间: 2019-12-8 10:39
哇,厉害厉害,很详细
作者: 爆炸头 时间: 2019-12-8 10:39
厉害了,51黑
作者: l111444777 时间: 2019-12-17 22:00
怎么仿真错误呢
作者: faith1d 时间: 2019-12-19 23:06
是汇编写的
作者: Issss 时间: 2019-12-30 14:48
感谢楼主,51hei有你更精彩
作者: 小石头sky 时间: 2020-4-4 08:20
为啥没有仿真
作者: 守夜灬 时间: 2020-4-12 21:35
非常感谢 正好要做这个 帖主的帖子给了我非常大的帮助 就是可惜没有源码
作者: zgy1789 时间: 2020-4-12 22:56
这个牛逼了,点赞。
作者: 哈爱单片机 时间: 2020-6-10 14:27
厉害,大神
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |