1、 )报告用纸 第 0 页 共 31 页 引 言抢答器是一种广泛应用于企事业单位和商业部门的竞赛设备,为各种知识竞赛、文娱活动提供公正客观快速裁决的一种常用电子设备,也是一种逐渐成型的电子产品,但市面上所售抢答器价格一般较贵且多为小规模集成电路构成,其性能单一,工作起来不够理想。因此,提高抢答器的性能,使其具有更强的功能,使用可靠方便已为抢答器发展的一个方向。随着集成技术和计算机技术的发展,单片机作为其一个分支亦于 20 世纪80 年代以来获得了飞速发展,各种新品不断涌现,使单片机的应用更加深入,灵活性也大大增强。本文介绍一种以 Atmega16 单片机为核心的八路抢答器系统,它充分利用了单片机
2、系统的优点,其具有结构简单、功能强大、可靠性好、实用性强的特点。)报告用纸 第 1 页 共 31 页 1 抢答器系统的功能本抢答系统的要求与数据:1、可同时供 8 名选手或 8 个代表队参加比赛,他们的编号分别是 I0I7,各用一个抢答按钮,按钮的编号分别与选手的编号相对应,分别是 S0S7。2、给节目主持人设置一个控制开关 S,用来控制系统的清零和抢答的开始。3、抢答器具有数据锁存和显示功能,抢答开始以后,若有选手按动抢答按钮,编号便立即锁存,并在 LED 数码管上显示出选手的编号,同时,扬声器发出音响提示。此时,输入回路封锁,禁止其他选手抢答。优先抢答的选手的编号一直保持到主持人将系统清零
3、时为止。4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定,当节目主持人启动“开始”键后,要求定时器立即进行减法计数,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间为 0.5 秒左右。5、参赛选手在设定的时间内抢答有效,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零时为止。6、如果定时抢答的时间已到,却没有选手抢答时,则本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示 00。7、论文不少于一万字与有关的英文资料(英文翻译 4 万字符,译文八千字左右) 。)报告用纸 第 2 页 共 31 页 抢答器系统框图号抢答端号抢答端号抢答端号
4、抢答端号抢答端6 号抢答端7 号抢答端8 号抢答端以Atmega16L 为按制系统主机PC端图-1 8 路抢答器系统框3 原理设计及分析3.1 硬件电路的设计抢答系统主要由抢答系统控制主机,抢答端,PC 上位机软件三个部分组成。各部分电路的设计在本章中做了详细的说明。.1 抢答系统控制主机3.1.1.1 关于 Atmega16L 单片机产品特性. 高性能、低功耗的 8 位 AVR. 微处理器)报告用纸 第 3 页 共 31 页 . 先进的 RISC 结构 131 条指令 大多数指令执行时间为单个时钟周期 32 个 8 位通用工作寄存器 全静态工作 工作于 16 MHz 时性能高达 16 MIP
5、S 只需两个时钟周期的硬件乘法器. 非易失性程序和数据存储器 16K 字节的系统内可编程 Flash 擦写寿命: 10,000 次 具有独立锁定位的可选 Boot 代码区通过片上 Boot 程序实现系统内编程真正的同时读写操作 512 字节的 EEPROM 擦写寿命: 100,000 次 1K 字节的片内 SRAM 可以对锁定位进行编程以实现用户程序的加密. JTAG 接口( 与 IEEE 1149.1 标准兼容) 符合 JTAG 标准的边界扫描功能 支持扩展的片内调试功能 通过 JTAG 接口实现对 Flash、EEPROM、熔丝位和锁定位的编程. 外设特点 两个具有独立预分频器和比较器功能
6、的 8 位定时器/ 计数器 一个具有预分频器、比较功能和捕捉功能的 16 位定时器/ 计数器 具有独立振荡器的实时计数器 RTC 四通道 PWM 8 路 10 位 ADC 8 个单端通道)报告用纸 第 4 页 共 31 页 TQFP 封装的 7 个差分通道2 个具有可编程增益(1x, 10x, 或 200x)的差分通道 面向字节的两线接口 两个可编程的串行 USART 可工作于主机/ 从机模式的 SPI 串行接口 具有独立片内振荡器的可编程看门狗定时器 片内模拟比较器. 特殊的处理器特点 上电复位以及可编程的掉电检测 片内经过标定的 RC 振荡器 片内/ 片外中断源 6 种睡眠模式: 空闲模式
7、、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及扩展的 Standby 模式. I/O 和封装 32 个可编程的 I/O 口 40 引脚 PDIP 封装, 44 引脚 TQFP 封装, 与 44 引脚 MLF 封装. 工作电压: ATmega16L:2.7 - 5.5V ATmega16:4.5 - 5.5V . 速度等级 0 - 8 MHz ATmega16L 0 - 16 MHz ATmega16 . ATmega16L 在 1 MHz, 3V, 25C 时的功耗 正常模式: 1.1 mA 空闲模式: 0.35 mA 掉电模式: UARTRIDCDDTRDSRTXDRX
8、DRTSCTSVCPB5/MOSI1 PB6/MISO2PB7/SCK3 RESET4VC5 GND6XTAL27 XTAL18PD0/RXD9 PD1/TXD10PD2/INT011PD3/INT112PD4/OC1B13PD5/OC1A14PD6/ICP115PD7/OC216VCC17GND18PC0/SCL19PC1/SDA20PC2/TCK21PC3/TMS22TDO/PC4 23TDI/PC5 24TOSC1/PC61 25TOSC2/PC7 26AVCC 27GND 28AREF 29ADC7/PA7 30ADC6/PA6 31ADC5/PA5 32ADC4/PA4 33ADC3
9、/PA334ADC2/PA235ADC1/PA136ADC0/PA037AVCC38GND39XCT/T0/PB040T1/PB141INT2/AIN0/TB242OC0/AIN1/TB243SS/PB444 U1MEGA16RSTPB5PB6PB7GNDVC GNDVCVCCGNDGNDVCC1234J1USBGNDC1100uF/10VC2CAPGNDGNDD-D+VCVC 123456J2CON6VCCGNDDATACLK CS123J3CON3123J4CON3123J5CON3123J6CON3123J7CON3123J8CON3123J9CON3123J10CON3GNDGNDLE
10、D1LED2LED3LED4LED5LED6LED7LED8KEY1KEY2KEY3KEY4KEY5KEY6KEY7KEY8TXDRXDD-D+C51051234 5678 910J11HEADER 5X2GNDRSTPB5PB6PB7RXDTXDR110KVCGNDLED1LED2LED3LED4LED5LED6KEY1KEY2KEY3KEY4KEY5KEY6KEY7KEY8LED7LED8LD1LEDVCR21KPB5DATACLKCS图- 抢答系统控制主机电路图. 抢答系统抢答端3.2.1 抢答端电路图LED1LEDR11KKEY1SW-PBGNDKEYLED123J1CON3GNDLE
11、DKEY图-5 抢答端电路图图中的 KEY1 为抢答按键,LED1 为抢答指示灯。电路简单明了,一目了然。)报告用纸 第 10 页 共 31 页 . 抢答系统 PC 端上位机软件在这介绍一款串口调试软件串口调试助手(CM 精装版 v2.7) ,本系统正是运用这款软件做为 PC 端上位机软件。下载地址:http:/.串口调试助手(CM 精装版 v2.7)简介界面精致美观,实用性强。支持汉字显示。支持各种串口设置,如波特率,校验位、数据位和停止位等等。支持 ASCII/Hex 发送,发送和接收的数据可以在 16 进制和 AscII 码之间任意转换。可以自动在发送的数据尾增加校验位,支持多种校验格式
12、。支持间隔发送,循环发送,批处理发送,输入数据可以从外部文件导入。4 软件设计软件是单片机系统的灵魂,好的单片机系统必须有好的软件来支持。其中对编程语言的选择显得尤为重要,而各个子程序的设计以及之间的连接也是软件设计的一个重点。4.1 编程语言的选择合理的选择编程序的语言是单片机开发中至关重要的事情,它直接影响则单片机系统的性能。单片机可以采用汇编和 C 两种语言。下面分别对两种语言进行介绍。用助记符表示指令系统的语言称为符号语言或汇编语言,用汇编语言编写的程序称为汇编语言程序。在单片机领域,汇编语言是目前最广泛使用的语言,它比机器语言前进了一大步,汇编语言通俗易懂,不易出错,即使出错也容易发
13、现和修改。这给编制、阅读和修改程序带来了很大的方便。因此它是单片机编程所使用的主要语言之一。采用汇编语言编程与采用高级语言编程相比具有以下特点:(1)、占用的内存单元和 CPU 资源少,能直接对硬件进行控制。(2)、程序简短执行速度快。(3)、可直接调用单片机的全部资源,并可有效地利用单片机的专有特性。(4)、能准确地掌握指令的执行时间,适用于实时控制系统。C 语言是在 B 语言的基础上发展起来的。1967 年英国剑桥大学的马丁理查德(Martin)报告用纸 第 11 页 共 31 页 Richards) 推出了 BCPL 语言,用于开发系统软件。1970 年,美国贝尔实验室的肯.汤普逊(Ke
14、n Thompson)继承和发展了 BCPL 语言的特点,设计出了 B 语言,并用 B 语言编写了 UNIX 操作系统,在 PDP-7 小型机上实现。1972 年,美国贝尔实验室的戴尼斯.M.利奇(Dennis.M.Rilchie)和布朗.W.卡尼汉(Brian.W.Kernighan)对 B 语言进一步进行完善,进而推出了 C 语言。此后十几年内,对 C 语言又进行了不断发展和扩充。1983年,美国国家标准协会(ANSI)为 C 制定了新的标准,被称为 ANSI C。目前广泛流行的 C 编译系统都是以它为基础的,不同版本(Microsoft C,Turbo C,Quick C 等)略有差异。
15、C 语言是一种中级语言。它把高级语言的最佳成分和汇编语言的控制与灵活性结合起来了。C 语言有如下特点:(1)、是处于汇编语言和高级语言之间的一种语言。C 语言较靠近硬件与系统,与汇编语言较为接近。C 语言既有面向硬件和系统,像汇编语言那样可以直接访问硬件的功能。又有高级语言面向用户、容易记忆、方便阅读和书写的优点。(2)、是一种可以进行结构化程序设计的程序语言,即可以用顺序、选择和循环三种基本结构实现程序的逻辑结构。C 语言具有诸如 if-else、switch-case、for、do-while、while 等结构化语句,十分便于采用自顶向下、逐步细化的结构化程序设计技术。因此,用 C 语言
16、编制的程序,具有易于理解、便于维护的优点。(3)、使用方便、灵活,可以使程序简洁、紧凑。C 语言只有 32 个标准的关键字、45个标准的运算符以及 9 种控制语句。(4)、运算符十分丰富,除一般语言使用的加、减、乘、除、取余、取反等算术运算及与、或、非逻辑运算功能外,还可以实现以二进制位(bit)为单位的位与 /延时 Xms crystal=8MHzvoid Setup_TIM(void); /设置计数器/*变量声明 */uchar String10;/* 主程序开始 */main()unsigned char key;SEI(); /开全局中断/端口初始化DDRA= 0xCC; /11001
17、100 - 等于 1 的位为 LED 输出 等于 0 的位为按键输入 PORTA=0x33; /00110011 - 等于 1 的位内部上拉电阻 等于 0 的位输出低电平 LED灭DDRB=0XFF;PORTB=0xFF;DDRC= 0x33; /00110011 - 等于 1 的位为 LED 输出 等于 0 的位为按键输入 PORTC=0xCC; /11001100 - 等于 1 的位内部上拉电阻等于 0 的位输出低电平 LED灭DDRD=0XFE;PORTD=0xFF;PINA=0x33;PINC=0xCC;/设置串口Uart_init(9600); /波特率=9600Uart_sents
18、tr(“ UART,9600,n,0 rn0“);)报告用纸 第 27 页 共 31 页 Uart_sentstr(“ 欢迎使用本抢答器系统 rn0“);PORTB /while(1)key=(PINA /屏蔽 LED 输出端口if(!(key=0xFF)Delay_Ms(10);if( !(PINAswitch(key)case 0x01:PORTA|=BIT(2); /LED 亮Uart_sentstr(“ ON:1 rn0“);Setup_TIM() ; break; case 0x02:PORTA|=BIT(3); /LED 亮Uart_sentstr(“ ON:2 rn0“);Set
19、up_TIM() ; break; case 0x04:PORTC|=BIT(0); /LED 亮Uart_sentstr(“ ON:3 rn0“);Setup_TIM() ; break; case 0x08:PORTC|=BIT(1); /LED 亮Uart_sentstr(“ ON:4 rn0“);Setup_TIM() ; break; case 0x10:)报告用纸 第 28 页 共 31 页 PORTA=BIT(6); /LED 亮Uart_sentstr(“ ON:5 rn0“);Setup_TIM() ; break;case 0x20:PORTA|=BIT(7); /LED
20、亮Uart_sentstr(“ ON:6 rn0“);Setup_TIM() ; break;case 0x40:PORTC|=BIT(4); /LED 亮Uart_sentstr(“ ON:7 rn0“);Setup_TIM() ; break;case 0x80:PORTC|=BIT(5); /LED 亮Uart_sentstr(“ ON:8 rn0“);Setup_TIM() ; break;default :Uart_sentstr(“ ON:? rn0“);break;/* /设置计数器*/void Setup_TIM(void) /设置计数器PORTB |= BIT(5) ; /
21、Delay_Ms(3000) ;PORTB / )报告用纸 第 29 页 共 31 页 PORTA=0x33; /00110011- 等于 1 的位内部上拉电阻 等于 0 的位输出低电平 LED 灭PORTC=0xCC; /11001100- 等于 1 的位内部上拉电阻 等于 0 的位输出低电平 LED灭/* 延时子程序 */void Delay_Ms(unsigned int xms) /crystal=8MHzunsigned int i,j; /variable:declare Wordfor(i=0; ixms; i+)for(j=0; j498;j+)NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();