一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数。图中时钟频率为12MHz。
2.6 复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如下所示:
图5 按键复位电路
2.7 报警电路
利用程序来控制单片机某个口线的“高”电平或“低”电平,接上蜂鸣器就能发出声音,若再利用延时程序控制“高”或“低”电平的持续时间,就能改变蜂鸣器鸣叫的时间。
本文设计如下图所示。图中利用单片机的I/O端口P1^6,单片机通过设定该端口的高、低电平使蜂鸣器发声。
图6 发声电路
4
2.8系统硬件连接原理总图
图7 系统硬件连接原理图
2.9元器件清单
4位8段数码管 2只; AT89S52芯片 1只; 12M晶振 1只; 33PF瓷片电容 2只; 10UF电解电容 1只; 电阻1KΩ、200Ω、500Ω 各一只; 按键BUTTON 11只; 三极管8050 1只; 蜂鸣器 1只; 排阻471、102 各一只; 74LS245 一只;
5
第三章 软件的设计
3.1程序流程图
按下复位键
显示选手编号 检测抢答键 开始倒计时 启动定时器、蜂鸣器 设置定时器 开始 检测抢答开始键 答对 答错 选手为0分 检测加分键 检测减分键
检测抢答复位键 对应数码管加一 对应数码管减一 图8 程序流程图 3.2源程序
#include
#define uint unsigned int #define uchar unsigned char
/*-----------------------------------------------------------
共阳极0-9的数码管段码
------------------------------------------------------------*/
6
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xc0};
/*----------------------------------------------------------- 变量定义
------------------------------------------------------------*/ sbit start=P3^6; sbit reset=P3^7; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4; sbit key6=P1^5; sbit key7=P1^6; sbit key8=P1^7; sbit jia=P3^4; sbit jian=P3^5; bit action = 0;
uchar second=10,a[7]={0}; uchar timer0_count = 0; uchar number=0;
uchar number_display = 0; uchar k;
/*----------------------------------------------------------- 延时函数
------------------------------------------------------------*/ void delay(uint z) {
uint x,y; for(x=z;x>0;x--)
7
}
for(y=120;y>0;y--);
/*----------------------------------------------------------- 显示函数
------------------------------------------------------------*/ void display(uchar number,uchar second) {
P2 = 0x01;
P0 = table[second]; delay(1); P2 = 0x02;
P0 = table[number]; delay(1); P2 = 0x04; P0 = table[a[0]]; delay(1); P2 = 0x08; P0 = table[a[1]]; delay(1);
P2 = 0x10;
P0 = table[a[2]]; delay(1); P2 = 0x20; P0 = table[a[3]]; delay(1); P2 = 0x40; P0 = table[a[4]]; delay(1); P2 = 0x80;
P0 = table[a[5]];
8