东北石油大学_第1页
东北石油大学_第2页
东北石油大学_第3页
东北石油大学_第4页
东北石油大学_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——东北石油大学单片机控制系统课程设计

目录

第1章绪论2

1.1设计目的21.2设计原理21.3设计方案2第2章系统结构及主要元器件2

2.1系统结构22.2主要元器件2第3章硬件设计4

3.1时钟及复位电路43.2选手抢答电路43.3显示电路53.4开始、复位及蜂鸣器电路53.5硬件总图6第4章软件设计7

4.1程序设计总流程74.2中断服务子程序流程84.3蜂鸣器报警程序流程8第5章系统仿真及调试9

5.1利用Keil软件进行程序调试95.2利用Proteus进行系统仿真9结论11单片机控制系统课程设计

3.3显示电路

显示电路包括显示和驱动功能。显示采用数码管和LED灯,驱动用P2和P3口抢答者编号将通过与P3口相连的LED灯显示出来,抢答30秒倒计时由P3口上的数码管采用动态显示第一个数字显示抢答选手的编号,最终两位显示时间。显示电路电路图如图3-3所示。

图3-3显示电路电路图

3.4开始、复位及蜂鸣器电路

P3口要外接上拉电阻才能正常运行。P3.1用于总抢答器启停的控制。P3.4用于控制蜂鸣器电路。P3.6用主持人控制抢答的开始。P3.7用于主持人控制抢答器的复位。电路图如图3-4所示。

图3-4开始、复位及蜂鸣器电路电路图

5

单片机控制系统课程设计

3.5硬件总图

8位竞赛抢答器硬件总图如图3-5所示。包括80C51单片机、抢答电路、晶振电路、复位电路、显示电路、开关控制电路及报警电路。

图3-58位竞赛抢答器总电路图

6

单片机控制系统课程设计

第4章软件设计

4.1程序设计总流程

在编开始抢答前的程序要先编写设定时间的程序,当时间设好之后,主持人发布抢答命令按下“开始〞按键,程序开始开启定时中断进行倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。当扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。若在规定时间内没有抢答成功,那么进入蜂鸣器报警程序。之后判断“复位〞是否开启,没开启则保持,若开启则重新回到主持人按“开始〞键之前的状态。如此循环往复。流程图如图4-1所示。是抢答是否超时否

复位键开启是否继续比赛是否终止图4-1程序设计思想流程图

7

启动主持人按下开始键定时器及P1口初始化,并蜂鸣0.5s将定时器开启进行抢答,系统倒计时并等待判断P1口数据是否为0蜂鸣器提醒判断哪是哪一位选手抢答成功将选手编号送至显示器单片机控制系统课程设计

4.2中断服务子程序流程

中断子程序负责倒计时的计时和蜂鸣器的报警,应具有能中断定时及重新初始化的功能。中断服务子程序流程图如图4-2所示。

判断TF0是否置1TR0允许中断,TF0标志位清零中断开启是否是判断“复位〞键是否开启图4-2中断服务子程序流程图

4.3蜂鸣器报警程序流程

在抢答的开始,主持人会按下“开始〞键,蜂鸣器响0.5s,若倒计时超时,无人抢答成功,则蜂鸣器会一直报警提醒,知道主持人按下“复位〞按键时中止。蜂鸣器报警程序流程图如图4-3所示。

倒计时开启

蜂鸣器响0.5s是否

蜂鸣器长鸣报警判断倒计时是否终止是否

“复位〞键是否开启图4-3蜂鸣器报警程序流程图

8

单片机控制系统课程设计

第5章系统仿真及调试

5.1利用Keil软件进行程序调试

将所编写的抢答器程序输入到Keil软件中进行编译调试,利用Keil软件检验所设计程序是否有误。

调试过程出现如下错误:(1)没有定义个别变量。

(2)延时函数中的for循环语句出现语法错误。

改正后再次进行了调试,调试之后程序无误的结果如图5-1所示。

图5-1程序调试结果

5.2利用Proteus进行系统仿真

将Keil生成的HEX文件导入Proteus的单片机中,利用Proteus进行抢答器的仿真,在调试的过程中出现了如下的错误:

(1)数码管无法显示。

9

单片机控制系统课程设计

原因是数码管由于共阴极驱动,而设计的程序却是共阳极驱动的。修改程序后数码管能够正常显示数字。

(2)抢答按键无法工作。

检查后发现是抢答按键的左侧没有接地。改正后抢答按键能正常工作。(3)蜂鸣器无法发声。

查阅资料后发现无法发声的原因是Proteus中的蜂鸣器默认驱动电压过大,为“12V〞。把驱动电压改成“2V〞后蜂鸣器能够正常发声。

改正错误后利用Proteus软件仿真系统结果如图5-2、图5-3所示。

图5-2模拟抢答器倒计时仿真图

图5-3模拟3号选手用时7秒抢答成功仿真图

10

单片机控制系统课程设计

结论

这次课程设计老师给我们安排了一个星期的时间,可以说是比较紧张的。我利用了前两天的时间在宿舍思考本次的课程设计,拿到题目时,第一感觉就是太繁杂了,不知如何下手,虽然这些知识以前都有接触过,但也只是分部分接触,而这次的设计是对前面几次试验的一个综合。通过翻阅一些资料,自己事先编写好了程序,到了第三天去到试验室时,就把自己写的程序进行了编译,发现不行,程序错误十分多,自己检查了好久好久,但还是发现不了问题,之后问了老师和同学,才得知了错误的所在。通过本次单片机控制系统课程设计,发现了自己的好多不足,知识有好多漏洞,而且自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。

在这个过程中,我也曾经由于实践经验的缺乏失落过,也曾经仿真成功而热心高涨。特别是Proteus设计电路图和仿真时,由于是英文版的软件,好多东西都看不太明白,都是通过自己一个个来渐渐琢磨,才把电路图画了出来,然后把写好的程序导入,进行仿真,汗水预示着结果也见证着收获。

这次课程设计对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就。相信这次课程设计必将成为我将来从事自动化相关工作上很好的经验。

11

单片机控制系统课程设计

单片机控制系统课程设计

}

/*开始键扫描函数

*/voidstart_stop_keyscan(){

if(start_stop==0){}else{

start_stop_flag=0;}

15

P2=0xfd;P0=0x40;delay(2);

P2=0xfb;

P0=table[second_first];delay(2);

P2=0xf7;

P0=table[second_second];delay(2);

state=0;

delay(60);

if((start_stop==0)action=1;TR0=1;state=1;

单片机控制系统课程设计

}

/*八位抢答键扫描函数

*/ucharkey_scan8(){

if(key1==0){}else{}

if(key2==0){}else{

16

delay(8);

if((key1==0)number=1;

number_display=number;

key1_flag=0;number=0;

delay(8);

if((key2==0)number=2;

number_display=number;

单片机控制系统课程设计

}

key2_flag=0;number=0;

if(key3==0){}else{}

if(key4==0){}else{

key4_flag=0;number=0;

17

delay(8);

if((key3==0)number=3;

number_display=number;

key3_flag=0;number=0;

delay(8);

if((key4==0)number=4;

number_display=number;

单片机控制系统课程设计

}

if(key5==0){}else{}

if(key6==0){}else{}

18

delay(8);

if((key5==0)number=5;

number_display=number;

key5_flag=0;number=0;

delay(8);

if((key6==0)number=6;

number_display=number;

key6_flag=0;number=0;

单片机控制系统课程设计

if(key7==0){}else{}

if(key8==0){}else{}{

19

delay(8);

if((key7==0)number=7;

number_display=number;

key7_flag=0;number=0;

delay(8);

if((key8==0)number=8;

number_display=number;

key8_flag=0;number=0;

if(number_display!=0)

单片机控制系统课程设计

}

}

return1;

else{

return0;}

/*复位键扫描函数

*/voidreset_keyscan(){}{

if(kaishi==0){

delay(8);

if((kaishi==0)}

/*开机函数*/

delay(8);

if((reset==0)}

reset_flag=1;number_display=0;state=1;

voidkaishi_keyscan()

单片机控制系统课程设计

}

}

{}

kaishi_flag=1;number_display=0;state=1;

else{

kaishi_flag=0;}

/*主函数

*/voidmain(){

TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;TR0=0;while(1)

{while((kaishi==0)

reset_keyscan();wh

温馨提示

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

评论

0/150

提交评论