单片机原理作业—电子答题器(课程及设计)
单片机原理作业
——电子答题器(课程设计)
探测一班
15xxxxxx09
xxx
目录
一、设计任务与选题2
1.作业设计任务2
2.作业设计选题2
二、系统原理与设计分析2
1.系统设计分析2
2.系统原理图设计3
三、程序流程图设计4
四、源程序设计5
1.按键查询程序5
2.声光提示程序6
3.提示灯旋转程序7
五、系统调试与仿真8
六、心得体会9
电子答题器(课程设计)
一、设计任务与选题
1.作业设计任务
查询相关资料,设计一个你自己最感兴趣的单片机系统。
2.作业设计选题
电子答题器是基于AT89C51、AT89C52单片机的电子答题系统,通过单刀多掷开关和答题按钮控制正确选项。在各种知识竞答的活动以及抽奖等游戏活动都可以应用。
二、系统原理与设计分析
1.系统设计分析
单片机的最小系统+数码管(共阴)+8个按钮+直流电动机+L298+二输入与门(可使用中断)+报警蜂鸣器+LED+单刀多掷开关
没有按键按下,则相应输入为高电平,否则为低电平。这样可通过读入AT89C51的P3口的数据来判断按下的是什么键。在有键按下后,要有一定的延时以防止抖动。当按键按下后,若单刀多掷开关拨至该按键,则低电平输入AT89C2051的P3.7端口,在单片机内,经查询、识别、判决等环节实时发出鸣笛状态控制信号,驱动电路将控制信号放大并推动声光鸣笛设备完成相应动作,同时波特率发生器通过程序控制产生PWM信号送给电机驱动芯片L298N的使能端口ENA,并通过输入端口IN1和IN2来控制电机的启动和停止。
最终实现按下相应的按键显示相应的选项数字,当按中答案时系统发出正确提示音并亮起旋转提示灯,按下复位键时数字显示为0,同时提示灯停止运转。
2.系统原理图设计
系统所用元件为单片机AT89C51、AT89C52、AT89C2051、CAP(30/0.1pF)、CAP-ELEC(22μF)、BUTTON、LED-RED、7SEG-COM-CATHODE、CRYSTAL(12MHz)、RES、MOTOR、L298、DIODE、AND_2、NPN、SPEARKER、IN4148。
电子答题器原理图如下图所示:
三、程序流程图设计
四、源程序设计
1.按键查询程序
#include
#define uint unsigned int
#define uchar unsigned char
uchar j;
uchar t;
uint n;
const uchar tab[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
void delay(uint n)
{ uint i;
for(i=0;i
}
void main(void)
{
uchar key;
P2=0x00;
P3=0xff;
while(1)
{
while(P3==0xff);
delay(2000);
while(P3==0xff);
key=P3;
switch(key)
{
case 0xfe:P2=tab[1];break;
case 0xfd:P2=tab[2];break;
case 0xfb:P2=tab[3];break;
case 0xf7:P2=tab[4];break;
case 0xef:P2=tab[5];break;
case 0xdf:P2=tab[6];break;
case 0xbf:P2=tab[7];break;
case 0x7f:P2=tab[0];break;
}
}
}
2.声光提示程序
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit zj=P3^7;
sbit bell=P1^3;
sbit red=P1^7;
void Delay100us()
{
uchar i,j;
_nop_();
_nop_();
i=2;
j=15;
do
{
while( --j);
}
while( --i);
}
void main(void)
{
uint z=0;
uchar a=0;
P3=0xff;
bell=1;
red=1;
while(1)
{
if(zj==0)
{
//bell=1;
bell=!bell;
red=0;
a=1;
Delay100us();
}
else
{
bell=0;
red=1;
a=0;
}
if(a==zj)
for(z=0;z<1000;z++)
{
bell=!bell;
red=0;
Dela