1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言 自动答题器 单片机原理作业—电子答题器(课程及设计).doc

c语言 自动答题器 单片机原理作业—电子答题器(课程及设计).doc

时间:2022-01-21 10:03:29

相关推荐

c语言 自动答题器 单片机原理作业—电子答题器(课程及设计).doc

单片机原理作业—电子答题器(课程及设计)

单片机原理作业

——电子答题器(课程设计)

探测一班

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。