单片机课程设计8位抢答器内容摘要:

系统分析 本次课程设计,主要由 Keil 和 Proteus 两个软件来完成程序编写和电路仿真。 其中 Keil 用于程序的编写,而后生成可供单片机使用的 .hex 文件。 Proteus用于搭建仿真电路,然后再单片机中下载 Keil 生成的 .hex 文件,进行仿真。 程序一共分为宏定义、定时器中断函数、外部中断函数、按键扫描函数、 LED显示函数、延时函数、抢答开始函数、抢答复位函数和主函数 9 个部分。 系统流程图如下: 图 9 系统流程图 11 参数计算 蜂鸣器 10秒定时器初值计算 晶 振 12Mhz,则定时 50000 微妙,循环 200 次 T1=2^1650000 程序设计 (1)主程序 在该程序中首先完成定时器,中断, LCD 的初始化,然后进入无限循环中,调用所有子函数,不断输出数据。 ( 2)蜂鸣器报警子程序 该程序包含了蜂鸣器开启子程序,以及用于控制蜂鸣器 30 秒鸣叫的定时器中断子程序。 在开启子程序中判断温度数据的大小,控制定时器和蜂鸣器开关变量的赋值。 定时器中断子程序中,定时器进入一次中断设置为 秒。 则设置变量,计数 600 次,满 30 秒后关断蜂鸣器。 ( 3) 定时器中断子程序 该程序定时器用来控制抢答时间的按秒减少和蜂鸣器 10 秒报警。 先设置初值,利用循环控制时间的减少。 ( 4) 外部中断子程序 该程序控制抢答时间初值的改变,每次中断将抢答时间初值加一或者减一。 ( 5) 按键扫描子程序 该程序利用 P1 口为抢答按键输入口,每次抢答开始,第一个按下按键的人能够实现抢答,其他按键失效无法抢答。 ( 6) 抢答开始子程序 该程序控制抢答开始。 ( 7) 抢答复位子程序 该程序控制抢答复位,只有完成抢答或者抢答时间为零后才能实现抢答复位。 ( 8) LED 显示子程序 该程序用 P0 口为 LED 数码管的段码 输入端, P2^0、 P2^ P2^ P2^3 为 LED数码管位码输入端,持续扫描端口输入,形成视觉暂留,则可看做持续显示。 12 本次仿真用了 Proteus 软件, Proteus 的 ISIS 是一款 Labcenter 出品的电路分析实物仿真系统,可仿真各种电路和 IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。 程序编译用 Keil 软件, Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 运用 keil 软件编译 C 语言程序,其结果如下图所示,在结果栏显示 — 0 Error(s),0 warning(s).说明此程序在软件编译上无语法等错误。 将此程序生成 .hex 文件调入硬件中用 Proteus 进行调试仿真。 图 10 keil 程序仿真结果 13 将生成的 .hex 文件调入 Proteus 电路图的单片机中,点击图左下角的开始键运行,程序的开始界面如图所示。 图 11 Proteus 程序仿真结果 图 12 Proteus 程序仿真结果 14 通过本次的 课程 设计,我学到了很多东西,同时在 做的过程中也发现很多的问题。 在这一过程中,我对我们所学习的相关 单片机的 知识又有了更深一层的学习和理解,让我对自己所学的又有了更深的掌握。 虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事。 有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西而不结合实践是很难理解的,更谈不上掌握。 我相信,这些经验将会给我以后的工作和学习带来很大的帮助。 李朝青 刘 艳玲 .单片机原理及 接口 技术 .北京航空航天 大学出版社 2020年 7月第 4版 . 15 附件一: (源程序代码) include define uint unsigned int define uchar unsigned char define KEY P1 /* 共阳极数码管编码表 0f */ uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8, 0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,}。 /* 变量定义 */ sbit start_stop=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 state=P3^4。 sbit kaishi=P3^1。 sbit speaker=P2^7。 bit start_stop_flag=0。 bit key1_flag=0。 bit key2_flag=0。 bit key3_flag=0。 bit key4_flag=0。 bit key5_flag=0。 bit key6_flag=0。 bit key7_flag=0。 bit key8_flag=0。 bit reset_flag=0。 bit action=0。 bit kaishi_flag=0。 bit speaker_flag=0。 bit tf=0。 uchar timer1_count=0。 uchar second=30。 16 uchar timer0_count=0。 uchar number=0。 uchar number_display=0。 uchar second1=30。 uchar b=10。 /* 延时函数 */ void delay(uint z) { uint x。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。