单片机课设.docx
- 文档编号:27498214
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:16
- 大小:103.57KB
单片机课设.docx
《单片机课设.docx》由会员分享,可在线阅读,更多相关《单片机课设.docx(16页珍藏版)》请在冰豆网上搜索。
单片机课设
《单片机原理及接口》
课程设计报告
题目:
抢答系统设计
专业名称:
电子信息工程
班级:
电信091
学号:
姓名:
2011年12月
抢答系统设计
(电子信息工程学系)
摘要:
介绍一种以AT89C52为核心的控制器,并在Proteus仿真软件环境下,从硬件电路建立和软件设计两方面阐述了抢答器系统的设计过程和方法。
通过仿真运行,表明该抢答器能够及时准确的显示第一有效抢答信号。
关键词:
抢答器;单片机;Proteus
1引言
抢答器被广泛地应用于各种竞赛活动和文娱活动等场合,是一种能准确、公正、直观地判断出第一抢答者的机器。
抢答器可分别采用电子器件、单片机、PLC等控制部件来设计,比较之下,采用电子器件实现的抢答器所需器件比较多,且功能越多电路越复杂,制作的难度较大,故障较多;用PLC来制作结构简单,程序也简单,但是一个PLC的成本较高;用单片机设计实现的抢答器所需电子元器件很少,结构简单,易编程,成本低,是抢答器设计的首选方案。
本文以AT89C52单片机为核心设计了六路抢答器,对六路输入信号进行处理后判断出第一抢答按键,并通过数码管显示出来,同时具有声音提示功能。
具有结构简单、可靠性高、实用性强的特点。
2抢答系统功能要求
2.1基本功能设计
制作一个6人抢答器,以开关中的某个开关的按下(闭合)作为抢答按键。
无人抢答时,6只数码管轮流循环显示1-6(跑马),谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,其后再有人按键,系统不予响应,直到复位键按下,开始下一轮抢答。
2.2扩展功能设计
谁先按下,对应的数码管亮5次抢答人的编号,并发出声音提示。
3抢答系统硬件电路设计
硬件电路如图1所示。
3.1单片机部分
本系统采用的是AT89C52单片机如图2所示,AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
图1硬件电路图
图2AT89C52单片机
3.2显示部分
本系统采用6位共阴极数码管,其中单片机的P0口接数码管的段选端,P2口接数码管的位选端,如图3所示。
图-3显示部分6位共阴极数码管
3.3输入信号部分
六路输入采用六个抢答按键,当有按键按下时,便使与这个按键相连的引脚拉为低电平,相应的输入信号变为低电平。
六个抢答按键分别与单片机的P1.0-P1.5相连,如图4所示。
图4抢答按键部分
3.4声音提示部分
在单片机的P1.7口连接一个PNP三极管的基极,当P1.7口输出为0时蜂鸣器响,输出为1时蜂鸣器不响,电路连接如图5所示。
图5声音提示电路
3.5其他部分
复位电路只要复位引脚RST高电平保持两个机器周期以上的时间,AT89C52便能完成系统重置的各项动作,实现系统复位,电路中采用由电容和电阻串联实现上电自动复位和按键复位。
如图6所示。
时钟振荡电路利用单片机内部的振荡电路,在XTAL1和XTAL2之间外接12MHz的石英晶振,同时对地接有20pF的电容,防止单片机自激振荡。
如图7所示
图6复位电路
图7时钟振荡电路
4抢答系统软件设计
4.1设计思路
在单片机开发中除了必要的硬件设计外,同样离不开软件设计。
本设计采用Keil软件下的单片机C语言编程环境,软件设计思路:
1)对各变量赋初值,各端口初始化等,即执行如图8所示的语句。
然后进入无限循环程序来跑马显示1-6并判断抢答按钮是否按下,即无限执行run()子函数,如果按下,则停止跑马,并进行按键判断,即执行keyscan1()或keyscan2()子函数;没有按下,则继续跑马显示1-6并等待。
图8初始化代码
2)在进行抢答时,执行键盘扫描程序keyscan1()或keyscan2()来判断哪一个键被选手按下,再根据按下按键的不同进行相应的处理。
3)如果是基础部分,当抢答人的按键按下时,数码管停止跑马,6个数码管同时亮抢答人的编号,其他如有再按下按键,系统都不予响应;如果是扩展部分,当抢答人的按键按下时,对应的数码管亮5次抢答人的编号,并通过蜂鸣器发出声音提示。
程序流程图如图9所示。
图9程序流程图
4.2仿真验证
根据上述软件设计思路和流程图,在Keil环境下编写程序,再对原程序进行编译,待编译正确后生成HEX文件,并将HEX文件添加到Proteus中的AT89C52单片机中,最后对抢答器系统的功能进行模拟仿真。
仿真结果如以下几图所示。
1)按键未按下,即无人抢答时,数码管跑马显示1-6,如图10所示。
图10数码管跑马显示1-6
2)在基础部分时,若某个按键按下,六个数码管同时显示抢答人的编码。
如图11所示,显示的是编号1的抢答人按下按键;在扩展部分时,若某个按键按下,对应数码管显示5次抢答人的编码,并且蜂鸣器响一段时间。
如图12所示,抢答人编号为6的按键被按下时,在第六个数码管显示为6。
图11基础部分的六个数码管同时显示抢答人的编号
图12扩展部分的对应数码管显示5次抢答人的编号
5结论
上述所设计的以AT89C52单片机为核心控制部件,在Proteus环境中设计了六路抢答系统。
软件仿真表明抢答器能够及时准确的显示第一有效抢答信号该抢答器,实现了既定的功能,利用Proteus软件进行仿真验证,缩短了开发周期,确保了设计的正确性。
附录:
原程序代码:
#include"reg52.h"
#defineuintunsignedint
#defineucharunsignedchar
ucharcodenumtab[]
={0x06,0x5b,0x4f,0x66,0x6d,0x7d};//共阴数码管显示1--6
ucharcodeweitab[]
={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//6位共阴数码管位选
sbitkey1=P1^0;//抢答按键1
sbitkey2=P1^1;//抢答按键2
sbitkey3=P1^2;//抢答按键3
sbitkey4=P1^3;//抢答按键4
sbitkey5=P1^4;//抢答按键5
sbitkey6=P1^5;//抢答按键6
sbitfm=P1^7;//蜂鸣器控制端口
voiddelayms(uintt)//延时子程序
{
uinti;
ucharj;
for(i=0;i { for(j=0;j<110;j++); } } voidkeyscan1()//按键扫描基础部分 { if(key1==0) {delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[0];//送段选码,数码管显示1 while(! key1);//等待按键释放 while (1); } if(key2==0) { delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[1];//送段选码,数码管显示2 while(! key2);//等待按键释放 while (1); } if(key3==0) { delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[2];//送段选码,数码管显示3 while(! key3);//等待按键释放 while (1); } if(key4==0) { delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[3];//送段选码,数码管显示4 while(! key4);//等待按键释放 while (1); } if(key5==0) { delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[4];//送段选码,数码管显示5 while(! key5);//等待按键释放 while (1); } if(key6==0) { delayms(10);//消抖 P2=0x00;//选通位选 P0=numtab[5];//送段选码,数码管显示6 while(! key6);//等待按键释放 while (1); } } voidkeyscan2()//按键扫描扩展部分 { uchari; if(key1==0) {delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[0];//选通第一位数码管 P0=numtab[0];//送段选,显示1 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key1);//等待按键释放 while (1); } if(key2==0) { delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[1];//选通第二位数码管 P0=numtab[1];//送段选,显示2 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key2);//等待按键释放 while (1); } if(key3==0) { delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[2];//选通第三位数码管 P0=numtab[2];//送段选,显示3 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key3);//等待按键释放 while (1); } if(key4==0) { delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[3];//选通第四位数码管 P0=numtab[3];//送段选,显示4 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key4);//等待按键释放 while (1); } if(key5==0) { delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[4];//选通第五位数码管 P0=numtab[4];//送段选,显示5 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key5);//等待按键释放 while (1); } if(key6==0) { delayms(10);//消抖 for(i=0;i<5;i++)//亮灭显示5次 { P2=weitab[5];//选通第六位数码管 P0=numtab[5];//送段选,显示6 delayms(800);//延时 P2=0xff;//消隐 fm=0;//开启蜂鸣器 delayms(800);//延时 fm=1;//关闭蜂鸣器 } while(! key6);//等待按键释放 while (1); } } voidrun()//数码管跑马显示1--6 { uchari,j; for(i=0;i<6;i++) { P0=numtab[i];//送段选码 for(j=0;j<6;j++) { P2=weitab[j];//送位选 delayms(800);//延时 P2=0xff;//消隐 keyscan1();//按键扫描 } } } voidmain() { P0=0x00;//关闭段选 P2=0x11;//关闭位选 fm=1;//关闭蜂鸣器 while (1) { run();//跑马子程序 } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机