基于89c51单片机的多路抢答器_第1页
基于89c51单片机的多路抢答器_第2页
基于89c51单片机的多路抢答器_第3页
基于89c51单片机的多路抢答器_第4页
基于89c51单片机的多路抢答器_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、苏州工业园区职业技术学院课程(设计)ivt-rejx-50苏州工业园区职业技术学院课程设计项目 2009 届项目类别: 课程设计 项目名称:基于89c51多路抢答器专业名称: 应用电子 姓 名 : 学 号 : 班 级: 指导教师: 目 录课程(设计)任务书(3)摘要(5)绪论(5)一、系统概述(6)二、硬件设计(一)系统框图(6)(二)系统原理图(6) (三)at89c51单片机性能介绍(7)(四)led数码管结构与原理(7)(五)、行列矩阵式按键的工作原理(8)三、软件设计(一)电路流程图(9)(二)c51源程序代码(10)四、课程设计体会(18) ivt-rejx-51苏州工业园区职业技术

2、学院课程设计项目任务书(小组表)系部: 电子工程系 课程类别:课程设计项目题目:导教师:职称:类别:专职学 生:专业:应用电子班级:学 生:专业:应用电子班级:1、项目的主要任务及目标任务:按单片机应用系统设计的方法及开发研制的步骤,设计并制作一个基于89c51系列单片机多路抢答器。目标:1)完成单片机串行通信的设计方案,提供成套电路原理图、软件流程图、程序源代码;2)提交一份设计报告。2000字以上(图文混排a4 5页左右)2、项目的主要内容 1)单片机应用系统-单片机软硬件方案设计;2)利用protel99 se 设计软件画出系统硬件原理图;3) 画出软件流程图;4)利用kill编程环境,

3、使用c51实现软件编写和调试;正常情况下当按下甲机的行列按键输入一个数时,通过甲机的串行口传送到乙机,并在的静态显示数码管上显示。5)写出相应得使用说明、使用效果和改进意见。续表:3、主要参考文献(若不需要参考文献,可注明,但不要空白)(2)单片机c语言入门 刘鲲 孙春亮4、进度安排项目各阶段任务时间(1)确定项目以及完成项目任务书6月5号(2)查阅相关资料6月6号至8号(3)方案设计、模块规划6月10号至11号(4)绘制原理图6月12号(5)流程图及软件编程6月13号(6)论文书写、修改6月16号(7)思想总结6月18号摘要:抢答器是为智力竞赛参赛者答题时进行抢答而设计的一种优先判决器电路,

4、广泛应用于各种知识竞赛、文娱活动等场合。能够实现抢答器功能的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式,但这种方式制作过程复杂,而且准确性与可靠性不高。利用单片机来设计抢答器,制作过程简单,而且准确性很高,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本节介绍一种利用89c51单片机作为核心部件进行控制的八路抢答器。关键词:单片机(at89c51),抢答器 ,行列矩阵按键电路,显示电路。绪论:在过去的几十年中,单片机在生产过程控制、自动检测、数据采集与处理、科技计算、商业管理和办公自动化等方面获得了广泛的应用。单片机体积小、重量轻、耗能省、价格低、可靠性高

5、、灵活通用等优点受到社会各界人士的欢迎,因此在各种专业控制中得到了广泛的应用。近几年,单片机的发展更为迅速,它已经渗透到了诸多学科和各种领域,乃至人们生活的方方面面。单片机在各个技术领域中的迅猛发展,与单片机所构成的计算机应用系统的特点有关: 单片机构成的应用系统具有较强的可靠性; 系统扩展和系统配置比较典型而规范,容易构成各种规模的应用系统; 由于构成的应用系统是一个计算机系统,相当多的测控功能由软件实现,故具有柔性特点; 有优异的性能价格比。课程结束在即,我们选择基于单片机的八路抢答器为课程设计课题,是希望锻炼一下自己,让自己学会运用单片机系统设计,同时也借此机会锻炼和提升自己的专业技术素

6、质,让自己的步伐能够再向前迈一步,尽快赶上时代的潮流,适应社会的需要。一、 系统概述:1.1系统概述此次所设计的八路抢答器是由at89c51单片机控制的,利用按键电路和动态显示电路构成的八路抢答器的外围的控制和显示电路,软件中使用了定时器t0产生50ms的定时中断,实现抢答器倒计时的控制。1.2 主要功能 本抢答器的一到八键为选手的抢答键,九到十一键为主持人的功能键。 启动时,显示管显示0-100-00, 当主持人按下11键开始键时开始抢答同时启动一个30秒的倒计时,这时显示滚上显示0-100-30,如果在三十秒内没有人抢答则抢答器制动跳出,本体作废。如果在30内有人抢答则在抢答的同时启动了一

7、个60秒的倒计时这时显示管上显示x-100-60如果选手在60内回答好问题且答对则主持人按下11键则这一组假上十分,如果在60秒内答完但没有答对,则主持人按下12键则这一组减十分,如果这一组在60秒的规定时间内没有答好则抢答器自动跳出且答题的这一组减掉十分。当哪一组抢答到的时,显示管就会显示那一组的序号,且对应的二极管也会亮。 如果当主持人还没有按下开始键是就有人按下抢答键时这一组犯规,只是显示管上显示 x-100-ff这是主持人只要按下12键这一组会被扣掉十分且从新开始抢答。二、硬件设计:(一)、系统框图(如图1)图1(二)、系统原理图中央处理器采用了at89c51。下面介绍,这里就不详细介

8、绍了。at89c51是一款常用的经典51系列8位单片机芯片,采用cmos工艺具有功耗低,发热量小的特点,同时它与8031等其他相芯片相比内置了4k的程序存储器,这样就可以不要扩展片外程序存储器,非常方便这样的小型设计。其基本内核包括用于各种指令的运算处理的中央处理单元cpu,用于存放可以读写数据的内部程序存储器ram,用以存放程序指令或某些常数表格的内部程序存储器rom,4个8位并行i/o接口p0、p1、p2、p3,用来作为外部事件计数或内部定时的2个定时器/计数器,具有5个中断源的终端系统,1个串行接口电路,内部时钟电路。以上各个部分通过内部总线相连接。这样就可以不要扩展片外程序存储器,非常

9、方便这样的小型设计。(三)、at89c51单片机性能介绍图2该系统电路(如图2)主要由中央处理器单元、显示电路、按键电路和二极管电路组成。(三)at89c51单片机性能介绍at89c51是一种带4k字节闪烁可编程可擦除只读存储器(fperomfalsh programmable and erasable read only memory)的低电压,高性能cmos8位微处理器,俗称单片机。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,为很多嵌入式

10、控制系统提供了一种灵活性高且价廉的方案。(四)、led数码管结构与原理led数码管分为共阳极8段数码管和共阴极8段数码管。共阳极数码管的8个发光二极管的阳极连在一起,通常,公共阳极接高电平(一般接电源),其它管脚接驱动电路输出端。当某驱动电路的输出端为低电平时则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时要求段驱动电路能吸收额定的段导通电流,还要根据外接电源及额定段导通电流来确定相应的限流电阻。共阴极数码管的8个发光二极管的阴极连接在一起,通常,公共阴极接低电平(一般接地),其它管脚接驱动电路输出端。当某驱动电路的输出端为高电平时则该端所连接的字段导通并点亮,

11、根据发光字段的不同组合可显示出各种数字或字符。此时要求段驱动电路能吸收额定的段导通电流,还要根据外接电源及额定段导通电流来确定相应的限流电阻。led显示方式有两种:静态显示方式好动态的显示方式。静态的显示方式具有显示亮度高,显示稳定控制方便等优点,但显示的位数较多时,占用的i/o口较多。动态显示与静态显示相比有需要的i/o扣少,功耗小的优点。但控制程序复杂,显示亮度低,该设计使用的是8个数码管显示,使用的是led的动态显示方式。(五)、行列矩阵式按键的工作原理单片机系统中,若使用按键较多时,通常采用行列矩阵键盘。1.矩阵式键盘的结构机及原理矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上

12、,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连同,而是通过一个按键加以连接。行线通过上拉电阻接到5v上。当无按键按下时,行线处于高电平状态;当有按键按下时,行、列线将导通,此时行线电平将由与此行线相连电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线、列线和多个按键相连,各个按键按下与否均影响该按键所在行线和列线的电平,各按键间互相影响,因此必须将行线、列线信号配合起来做适当的处理,才能确定闭合键的位置。一个端口就可以构成16个按键,比之前直接将端口线用与键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一个键。显然,在按

13、键数较多时,矩阵式键盘较之独立按键键盘要省很多i/o口。2.矩阵式键盘按键的识别 识别按键的方法很多,其中,最常见的方法是扫描法。 判断键盘中有无健按下,将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有健被按下,而且闭合的健位于低电平线与4根行线相交叉的4和按键之中。若所有列线均为高电平,则键盘中无健按下。 判断闭合键所在的为遏制,在确认有健按下后,即可进入确定具体闭合健的过程。其方法是:一次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线交叉处的按键就是闭合的按键。 3.键盘的编码 对于独立式按键键盘,因按键数量少,课根据十几需要灵活编码

14、。对于矩阵式键盘,按键的位置由行号和列号唯一确定。可采用依次排列建号的方式对安排进行编码。编码相互转换可通过计算或查表的方法实现。三、软件设计(一)电路流程图 键盘扫描子程序的流程图(如图5) 图5(二) c51源程序代码/*本抢答器的一到八键为选手的抢答键,九到十一键为主持人的功能键。 启动时,显示管显示0-100-00, 当主持人按下11键开始键时开始抢答同时启动一个30秒的倒计时,这时显示滚上显示0-100-30,如果在三十秒内没有人抢答则抢答器制动跳出,本体作废。如果在30内有人抢答则在抢答的同时启动了一个60秒的倒计时这时显示管上显示x-100-60如果选手在60内回答好问题且答对则

15、主持人按下11键则这一组假上十分,如果在60秒内答完但没有答对,则主持人按下12键则这一组减十分,如果这一组在60秒的规定时间内没有答好则抢答器自动跳出且答题的这一组减掉十分。当哪一组抢答到的时,显示管就会显示那一组的序号,且对应的二极管也会亮。 如果当主持人还没有按下开始键是就有人按下抢答键时这一组犯规,只是显示管上显示 x-100-ff这是主持人只要按下12键这一组会被扣掉十分且从新开始抢答。*/#includesbit p33=p33;sbit p34=p34;sbit p35=p35;sbit p36=p36;sbit p37=p37;sbit p30=p30;sbit p31=p31

16、;sbit p32=p32;#define k1_1 1#define k1_2 2#define k1_3 3#define k1_4 4#define k2_1 5#define k2_2 6#define k2_3 7#define k2_4 8#define k3_1 9#define k3_2 10#define k3_3 11#define k3_4 12#define k4_1 13#define k4_2 14#define k4_3 15#define k4_4 16unsigned char code d=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82

17、,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xff;unsigned char jkey, a,b,f,a1,b1,a2,a3,a4,a5,a5,a6,a7,a8,b1,b2,b3,b4,b5,b6,b7,b8,i,diss24,a0,b0,aaa1,ss,aa,c,m; / 对8051单片机特殊功能寄存器的说明 #define key_mask 0xf0#define no_key 0x00 void delay_1ms(void) /1ms延时函数 unsigned int i; for (i=0;i1000;i+); void

18、delay_nms(unsigned int n) /n ms延时函数 unsigned int i=0; for (i=0;in;i+) delay_1ms() unsigned char read_keybord() static unsigned char key_state = 0; static unsigned char key_value, key_line; static unsigned char key_return = no_key; unsigned char key_re; unsigned char i; switch(key_state) case 0: key_

19、return = no_key; key_line = 0xfe; /0b00001110; for(i=1;i=4;i+) /按键扫描 p1 = key_line; /输出行线电平 p1 = key_line; /输出两次 delay_nms(1); key_value = key_mask & p1; /读列电平 if(key_value = key_mask) key_line = 1; /没有按键,继续扫描 key_line |= 0x01; / delay_nms(2); else delay_nms(1); if(key_value = key_mask) key_line = 1

20、; /没有按键,继续扫描 key_line |= 0x01; break; else key_state+; /有键按下,停止扫描 break; /转消抖确认状态 break; case 1: key_value=key_line & 0x0f | key_value ; switch(key_value) /确认按键 case 0xee: /0b1110 1110: key_re = k1_1; break; case 0xde: /0b11011110: key_re = k1_2; break; case 0xbe: /0b10111110: key_re = k1_3; break;

21、case 0x7e: /0b 01111110 : key_re = k1_4; break; case 0xed: /0b 11101101 : key_re = k2_1; break; case 0xdd: /0b1101 1101: key_re = k2_2; break; case 0xbd: /0b10111101: key_re = k2_3; break; case 0x7d: /0b01111101: key_re = k2_4; break; case 0xeb: /0b 11101011: key_re = k3_1; break; case 0xdb: /0b 110

22、11011: key_re = k3_2;f+;if(f=1)i=1;if(f=9) f=1; break; case 0xbb: /0b1011 1011: key_re = k3_3; break; case 0x7b: /0b01111011: key_re = k3_4; break; case 0xe7: /0b11100111: key_re = k4_1; break; case 0xd7: /0b1101 0111: key_re= k4_2; break; case 0xb7: /0b10110111: key_re = k4_3; break; case 0x77: /0b

23、0111 0111: key_re = k4_4; break; key_state+; /转入按键释放状态 break; case 2: /等待按键释放 /p1= 0xf0; /行线全部输出低电平 / p1= 0xf0; if(key_mask & p1) = key_mask) key_return=key_re; key_state = 0; /列线全部为高电平,返回状态0 break; return(key_return);delay1000()int i;int j;for(i=0;i2;i+) for(j=0;j100;j+);delay100()int i;int j;for(i

24、=0;i2;i+) for(j=0;j30;j+);display(unsigned char mm3,unsigned char ss3)/时间显示diss22=ss3/100;diss21=(ss3%100)/10;diss20=ss3%10;p37=1;delay100();p0=dmm3;p30=0;delay1000();p30=1;delay100();p0=0xbf;p31=0;delay1000();p31=1;delay100();p0=ddiss22;p32=0;delay1000();p32=1;delay100();p0=ddiss21;p33=0;delay1000(

25、);p33=1;delay100();p0=ddiss20;p34=0;delay1000();p34=1;delay100();p0=0xbf;p35=0;delay1000();p35=1;delay100();if(c=2)p0=0x8e; else p0=d0;p36=0;delay1000();p36=1;delay100();if(c=2)p0=0x8e; else p0=d0;p37=0;delay1000();display1(unsigned char hh3,unsigned char dd3,unsigned char ff3)/时间显示diss24=dd3/100;di

26、ss23=(dd3%100)/10;diss22=dd3%10;diss21=ff3/10;diss20=ff3%10;p37=1;delay100();p0=dhh3;p30=0;delay1000();p30=1;delay100();p0=0xbf;p31=0;delay1000();p31=1;delay100();p0=ddiss24;p32=0;delay1000();p32=1;delay100();p0=ddiss23;p33=0;delay1000();p33=1;delay100();p0=ddiss22;p34=0;delay1000();p34=1;delay100()

27、;p0=0xbf;p35=0;delay1000();p35=1;delay100();p0=ddiss21;p36=0;delay1000();p36=1;delay100();p0=ddiss20;p37=0;delay1000();aa1()if(c=1)ss=60;for(;) /抢答tr0=1;i=1;p2=0xfe;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b1=b1+10;break;if(jkey=12)tr0=0;p2=0xff;b1=b1-10;break;if(ss=0) p2=0xff;b1=b1-1

28、0;break;display1(a1,b1,ss);if(c=2)for(;) /犯规p2=0xfe;i=1;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b1=b1-10;break;display(a1,b1);aa2()if(c=1)ss=60;for(;) /抢答tr0=1;i=2;p2=0xfd;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b2=b2+10;break;if(jkey=12)tr0=0;p2=0xff;b2=b2-10;break;if(ss=0) p2=0x

29、ff;b2=b2-10;break;display1(a2,b2,ss);if(c=2)for(;) /犯规p2=0xfd;i=2;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b2=b2-10;break;display(a2,b2); aa3()if(c=1)ss=60;for(;) /抢答tr0=1;i=3;p2=0xfb;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b3=b3+10;break;if(jkey=12)tr0=0;p2=0xff;b3=b3-10;break;if(

30、ss=0) tr0=0;p2=0xff;b3=b3-10;break;display1(a3,b3,ss);if(c=2)for(;) /犯规p2=0xfb;i=3;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b3=b3-10;break;display(a3,b3); aa4()if(c=1)ss=60;for(;) /抢答tr0=1;i=4;p2=0xf7;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b4=b4+10;break;if(jkey=12)tr0=0;p2=0xff;b

31、4=b4-10;break;if(ss=0) tr0=0;p2=0xff;b1=b1-10;break;display1(a4,b4,ss);if(c=2)for(;) /犯规p2=0xf7;i=4;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b4=b4-10;break;display(a4,b4); aa5()if(c=1)ss=60;for(;) /抢答tr0=1;i=5;p2=0xef;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b5=b5+1;break;if(jkey=12

32、)tr0=0;p2=0xff;b5=b5-10;break;if(ss=0) tr0=0;p2=0xff;b5=b5-10;break;display1(a5,b5,ss);if(c=2)for(;) /犯规p2=0xef;i=5;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b5=b5-10;break;display(a5,b5); aa6()if(c=1)ss=60;for(;) /抢答tr0=1;i=6;p2=0xdf;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30;p2=0xff;b6=b6+10

33、;break;if(jkey=12)tr0=0;p2=0xff;b6=b6-10;break;if(ss=0) tr0=0;p2=0xff;b6=b6-10;break;display1(a6,b6,ss);if(c=2)for(;) /犯规p2=0xdf;i=6;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b6=b6-10;break;display(a6,b6); aa7()if(c=1)ss=60;for(;) /抢答tr0=1;i=7;p2=0xbf;m=1;jkey=read_keybord();if(jkey=11) tr0=0;ss=30

34、;p2=0xff;b7=b7+10;break;if(jkey=12)tr0=0;p2=0xff;b7=b7-10;break;if(ss=0) tr0=0;p2=0xff;b7=b7-10;break;display1(a7,b7,ss);if(c=2)for(;) /犯规p2=0xbf;i=7;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b7=b7-10;break;display(a7,b7); aa8()if(c=1)ss=60;for(;) /抢答tr0=1;p2=0x7f;i=8;m=1;jkey=read_keybord();if(jke

35、y=11) tr0=0;ss=30;p2=0xff;b8=b8+10;break;if(jkey=12)tr0=0;p2=0xff;b8=b8-10;break;if(ss=0) tr0=0;p2=0xff;b8=b8-10;break;display1(a8,b8,ss);if(c=2)for(;) /犯规p2=0x7f;i=8;jkey=read_keybord();if(jkey=12)c=1;p2=0xff;b8=b8-10;break;display(a8,b8); dd()jkey=read_keybord(); switch(jkey) case 1:c=1;tr0=0;aa1(

36、);break; case 2:c=1;aa2();break; case 3:c=1;aa3();break; case 4:c=1;aa4();break; case 5:c=1;aa5();break; case 6:c=1;aa6();break; case 7:c=1;aa7();break; case 8:c=1;aa8();break; case 9:i=1;break; case 10:i+;break; void mmm() for(;) tr0=1; dd(); if(ss=0) tr0=0;break; if(m=1)break; display1(0,0,ss); ss=30;m=0; main()a1=1;a2=2;a3=3;a4=4;a5=5;a6=6;a7=7;a8=8;a0=0; b1=100;b2=100;b3=100;b4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论