第一篇:定时器课程设计心得体会
定时器课程设计的心得体会
课程设计共两周,第一周的任务是设计出原理图,并把PCB版图画出来;第二周的任务是根据原理图制作电路板,我们组共五个人,我们分工合作,共同学习,共同进步。
第一周的时候,我们五个人中有人主要负责画图,有人负责查阅资料,有人负责学protell99(因为我们目前还没有学protell99,画PCB版图需要用),有人负责审阅方案,然后我们再共同商议,尽量让我们的方案更完善,这其中大家都发挥了不可缺少的作用。第二周的时候,就进入实验室进行实训了,其实好期待自己动手制作电路板,满怀信心和期待的进入了实验室开始了又一个新的体验。我们的老师很认真很耐心的教导我们怎么操作,尤其是一些注意事项,对我们这些初次做课程设计的来说我们真的懂得很少,通过老师的细心指导后,我们便开始实战了。我们按照顺序先把图纸转印到电路板上,然后再对电路板进行腐蚀,腐蚀的过程其实挺有意思的,看着电路板上的电路图的线条在溶液里慢慢的越来越清晰的显现出来,其他部位的铜越来越少…目不转睛的盯着电路板看,生怕错过了每一个细节,终于腐蚀好了,虽然只完成了小小的一步,但我们也很兴奋。接下来该打孔了,我们小心的操作着,我们组的每个成员都亲自试着打孔,体验那种感觉。等打好孔后,刷了松香一切就绪后,开始插件,好多器件自己以前从来都没有见过,只在课本上学习它的结构,性质和功能,可是见都没见过,比如三极管,我以前就没有见过,直到这次见了后才知道原来一个三极管竟这么小!接下来焊接,对女生来说,焊接更是没有接触过,我先看着他们焊,看了好长时间终于鼓起勇气决定自己也试试,拿上电烙铁就感觉到它柄的温度,慢慢的小心的焊下去…终于都做好了,最后是调试的过程,看着我们自己制作的电路板要工作了,我们很激动同时也很紧张,我们刚开始插上电源时预置一个数后,显示器上并不显示数字增加计时,我们都面面相觑,可是我们并没有灰心,我们开始检查是我们哪里出了错,最后经过我们认真检查和思考终于把错误找了出来并改正了过来,再次调试,我们预置60秒,看着显示器的数字从零开始增加,我们绷着心弦,终于显示59,60报警器发出声音报警,调试成功,我们好高兴,感觉有点成就感。
通过这次课程设计,我学习到了不少平时在课堂上学习不到的东西。
一、对课本上的知识有更深的理解。
通过原理图的设计,对课本上的知识有了更深的理解,课本上的知识是机械的,表面的,很零碎的,通过课程设计,把原来以为很散的书本知识变的更为有联系,对课本知识有了更深的理解。
二、对该理论在实践中的应用有深刻的理解。
通过设计原理,制作电路板,到调试成功实现功能,把以前疑惑比如学这些知识都是干什么用的,通过这次课程设计,对该理论在实践中的应用和意义,有了更深刻的理解。
三、激发了学习的积极性。
通过该课程设计,全面系统的理解了定时器构造的一般原理和基本实现方法。把学过的电子技术的知识强化,能够把课堂上学的知识通过我们设计的电路表示出来,加深了对理论知识的理解。并激发了我们学习的积极性。
四、理解了学科之间的融合渗透。
本次课程设计所用器件大部分是用电子技术的数字部分里学的器件完成的,而也有些是模拟部分学的器件,而把这些器件连接起来用的则是电路的知识,这就把这三门学科联系起来,把各个学科之间的知识融合起来,对电子技术整体的认识更加深刻。
五、锻炼了自己的动手能力以及加深了对自己认识。
我们平时都只是学习课本上的知识,动手特别少,以致动手能力比较差,所以通过这次课程设计,通过自己动手制作,锻炼了自己的动手能力,同时也是对自己能力的一次检测,使我们对自己有了更深一步的认识,看自己在哪些方面还不足,为以后更好的提高自己提供了帮助。
六、提高了自己与别人相处以及合作的能力。
因为课程设计是分小组做的,而且在设计过程中我们需要分工合作,这就要求我们要有与人友好相处和与人友好合作的能力,这在以后的工作中很重要。通过这次课程设计,锻炼了同时也提高了我们的这项能力,无论是对我们的生活还是对我们以后的工作都有很大的帮助。
很喜欢课程设计,可以锻炼我们各个方面的能力,希望以后有更多这样的实训机会。同时也要谢谢两位指导老师这么辛苦的带领我们完成这些实训内容。
第二篇:单片机课程设计音乐闹钟定时器
目录:
0、任务书...............................................................................2
1、系统总体设计方案规划与选定.......................................2
2、硬件设计...........................................................................5
3、软件设计...........................................................................6
4、调试...................................................................................8
5、新增功能及实现方法.......................................................8
6、小结与体会.......................................................................9
7、参考文献...........................................................................9
8、附录.................................................................................10
单片机课程设计
0.任务书
基于51单片机设计一个电子数字钟,显示时、分、秒,且具有闹钟功能。用8255接口实现4*8键盘及8位LED显示。
32个键:0~9共10个键,调时(设置当前时间)键;设定闹钟(定时)键;走时键;光标左右移动各一个键。
要求键复位后,应该最后面的LED上显示H(待命状态)。
1.系统总体设计方案规划与选定
1.1主控制芯片选择
方案一:采用ARM微处理,做主控芯片,计算速度快,缺点;成本高,控制较复杂,不容易焊接。
方案二:采用80C51单片机做主控制器,由单片机来完成采集和信号处理等底层的核心计算,做主控芯片,成本低,易控制,易实现。
经过以上两个方案比较,在此题方案二明显优于方案一,故采用80C51单片机做主控制器。
1.2定时模块选择
方案一:采用时钟芯片DS1302。
DS1302 可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录,且较单片机计时简单节约硬件资源,但存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。
方案二:采用单片机内部的定时系统,外接晶振进行分频脉冲计数。
单片机课程设计
此系统采用12MHz晶振。
由于方案二使用简单,比方案一更适用该系统设计,所以选择方案二。
1.3 LED显示及计时模块选择
方案一:74LS192计数器——74LS47七点显示译码器
74LS192芯片是一块可预置数可逆计数芯片,功能强大。将74LS192芯片CPU引脚接高电平可实现减法计数,以倒计时显示。可通过74LS47与LED共阳极数字显示器配合使用。
方案二:使用移位寄存器74HC595与译码器相连
74HC595具有8位移位寄存器和一个存储器,使用时可直接与数字显示器相连。
方案三:使用8255扩展LED显示计时模块
8255是一个可编程并行接口芯片,有一个控制口和三个8位数据口,外设通过数据口与单片机进行数据通信,各数据口的工作方式和数据传送方向是通过用户对控制口写控制字控制的。我们用到了A与B口分别进行对数码显示管的片选和段选,且B口同时作为键盘扫描模块的输入口,与数码显示模块分时复用。故采用方案三
1.4蜂鸣器的选择
方案一:电磁式蜂鸣器
电磁式蜂鸣器主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。电磁式由于音色好,所以多用于语音、音乐等设备。对于不同提示音且考虑实际,此种较好。
方案二:压电式蜂鸣器
单片机课程设计
压电式蜂鸣器用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。压电式结构简单耐用但音调单一音色差,适用于警报器等设备。
由于闹铃为音乐闹铃,所以使用电磁式蜂鸣器更为合适。
2.硬件设计
2.1 芯片的选择
2.1.1 单片机80C51 2.1.1.1单片机80C51的组成
80c51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
单片机课程设计
定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
2.1.1.2
MCS-51的引脚说明:
MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明:
MCS-51的引脚说明:
MCS-52系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
单片机课程设计
图1 80C51的引脚
2.1.1.3 MCS-51单片机内部定时器计数器、中断系统简介(1)定时器计数器
1、MCS-51系列中51子系列有两个16位的可编程定时计数器可:定时计数器T0和定时计数器T1。它由加法计数器、方式寄存器TMOD、控制寄存器TCON等组成。方式寄存器用于设定定时计数器T0和T1的工作方式,控制寄存器用于对定时计数器启动、停止进行控制。
2、每个定时计数器既可以对系统时钟计数实现定时,也可以外部信号计数实现计数功能通过编程设定来实现。
3、每个定时计数器都有多种工作方式,其中T0有四种工作方式,T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。四种工作方式为:13位定时计数器、16位定时计数器、8位自动重置定时 6
单片机课程设计
计数器、两个8位定时计数器(只有T0有)
4、每一个定时计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。
(2)中断系统
1、MCS-51单片机提供5个硬件中断源,2个外部中断源,2个定时计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。
2、MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器IE的字节地址为A8H,可以进行位寻址。系统复位时,中断允许寄存器IE的内容为00H,如果要开放某个中断源,则必须使IE中的总控置位和对应的中断允许位置“1”。
3、MCS-51单片机有5个中断源,为了处理方便,每个中断源有两级控制,高优先级和低优先级。通过由内部的中断优先级寄存器IP来设置,中断优先级寄存器IP的字节地址为B8H,可以进行位寻址。如果某位被置“1”,则对应的中断源被设为高优先级;如果某位被清零,则对应的中断源被设为低优先级。对于同级中断源,系统有默认的优先权顺序,从高到低优先权顺序为外部中断0、定时计数器T0中断、外部中断
1、定时计数器T1中断、串行口中断。通过设置中断优先级寄存器IP能够改变系统默认的优先级顺序。
4、MCS-51单片机响应中断的条件为:中断源有请求且中断允许。
2.1.2 八位一体七段数码管
单片机课程设计
数码管使用条件:
a、段及小数点上加限流电阻。
b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定。c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA 上图为七段数码管引脚图,其中共阳极数码管引脚图和共阴极相同。LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。当然,LED的电流通常较小,一般均需在回路中接上限流电阻。假如我们将“b”和“c”段接上正电源,其它端接地或悬空,那么“b”和“c”段发光,此时,数码管显示将显示数字“1”。而将“a”、“b”、“d”、“e”和“g”段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它字符的显示原理类同。
单片机课程设计
2.1.3 并行接口扩展芯片8255 8255内部包括三个并行数据输入/输出端口,两个工作方式控制电路,一个读/写控制逻辑电路和8位总线缓冲器。
各部分功能概括如下:(1)端口A、B、C A口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。B口:是一个8位数据输入/输出锁存器/缓冲器和一个8位数据输入锁存器。C口:是一个8位数据输出锁存器/缓冲器和一个8位数据输入缓冲器(输入不锁存)。
通常A口、B口作为数据输入/输出端口。C口作为控制/状态信息端口,它在“方式控制字”的控制下可分为两个4位端口,每个端口有一个4位锁存器,分别与A口、B口配合使用,作为控制信号输出或状态信息输入端口。
(2)工作方式控制电路
工作方式控制电路有两个,一个是A组控制电路,另一个是B组控制电路。
单片机课程设计
这两组控制电路具有一个控制命令寄存器,用来接受中央处理器发来的控制字,以决定两组端口的工作方式,也可根据控制字的要求对C口按位清“0”或者按位置“1”。
A组控制电路用来控制A口和C口的上半部分(PC7-PC4)。B组控制电路用来控制B口和C口的下半部分(PC3-PC0)。
(3)总线数据缓冲器
总线数据缓冲器是一个三态双向8位缓冲器,作为8255与系统总线之间的接口,用来传送数据、指令、控制命令以及外部状态信息。
(4)读/写控制逻辑电路
读/写控制逻辑电路接受CPU发来的控制信号RD、WR、RESET、地址信号A1-A0等,然后根据控制信号的要求,将端口数据读出,发往CPU,或者将CPU送来的数据写入端口。
2.2 电路的组成
2.2.1 数码管显示电路
数码管显示器成本低,配置灵活,与单片机接口简单,在单片机应用系统中广泛应用。
数码管的工作原理如下:
数码管是由8个发光二极管构成的显示器件。在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极连在一起,称为共阴极数码管。本次课程设计用到的8个数码管均是共阳极的。当发光二极管导通时,它就会发光。每个二极管就是一个笔划,若干个二极管发光时,就
单片机课程设计
构成了一个显示字符。将单片机的I/O口控制相应的芯片与数码管的a-g相连,高电平的位对应的发光二极管亮,这样,由I/O口输出不同的代码,就可以控制数码管显示不同的字符。8个数码管均采用动态显示方式,显示当前的时间。
2.2.2 键盘扫描电路
键盘扫描电路图
键盘可分为两类:非编码键盘和编码键盘;常见的非编码键盘有两种结构:独立式键盘和矩阵式键盘。本次课程设计使用矩阵式键盘。
矩阵键盘的工作原理:按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。列线通过上拉电阻接到+5V 电源上。无按键按下时,列线处于高电平的状态,而当有按键按下时,列线电平与此列线相连的行线电平决定。
行列扫描法原理:第一步,使列线为编程的输入线,行线是输出线,拉低所有的行线,判断列线的变化,如果有按键按下,按键按下的对应列线被拉低,否则所有的列线都为高电平。第二步,在第一步判断有键按下后,延时10ms消除机械抖动,再次读取列值,如果此列线还处于低电平状态则进入下一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用 11
单片机课程设计
逐行扫描,分别拉低第一行,第二行,第三行,第四行,无论拉低哪一行其他三行都为高电平,读取列值找到按键的位置,分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列值并把其合并,得到按键值,对此按键值进行编码,与已经设定好的键码表进行一一对比,如果不等,则继续比较,如果相等,则利用转移指令实现键盘扫描到按键功能的转移。
2.2.3 音乐闹铃电路
蜂鸣器电路
2.2.3.1 蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,他广泛应用于计算机、打印机、复印机、报警器、电话 12
单片机课程设计
机等电子产品中作发声器件。
2.2.3.2 单片机驱动
单片机上面使用的蜂鸣器一般都是无源电磁式的蜂鸣器(如下图所示)。它由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
2.2.4 复位电路
RESET/Vpd为复位信号复用脚,当80C51通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,80C51的初始态。
上电复位:上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复 13
单片机课程设计
位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
电路图如下:
上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
3软件设计 4.调试
5.新增功能及实现方法
5.1定时器产生音乐的原理
音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制蜂鸣器发音。要想产生音频脉冲信号,需要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用单片机定时器计时这个半个周期时间,每当计时到后就将输出脉冲的I/O口反相,然后重复计时此半周期时间再对I/O口反相,这样就能在此I/O口上得到此频率的脉冲。
单片机课程设计
通常,利用单片机的内部定时器0,工作在方式1下,改变计数初值TH0和TL0来产生不同频率。
对于音乐的节拍,每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍。如果1拍为0.4S,1/4拍为0.1S,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,那么1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY,其余的节拍就是它的倍数。
总而言之,一首乐曲是由音阶和节拍两大要素构成。一首乐曲演奏的原理是:不同音阶分别对应不同的频率,发出不同的音调,而节拍则控制发出音调时间的长短;若将乐曲的音调连续发出,并使其按相应的节拍变化,即可演奏一首乐曲。根据这一特点,我们采用单片机辅以相应的接口来设计音乐播放器。
5.2实现方法
利用定时器产生音乐,添加了音乐闹钟功能,能在闹钟时间到来时蜂鸣器发出《祝你生日快乐》歌,但缺点是在响铃时间里,无法正常显示时间。在此次课程设计中,产生的音乐是利用查表法来改变定时器T1的初值,即改变音高,而通过延时来确定每个音符的长短,即确定音长。
6.小结与体会 7.参考文献
【1】《单片机原理、接口及应用——单片机嵌入式系统技术基础(第2版)》,肖看、李群芳,清华大学出版社
【2】《单片机原理及应用》,霍孟友,机械工程出版社
【3】《51系列单片机设计实例(第二版)》,楼然苗、李光飞,北京航
单片机课程设计
空航天大学出版社
8.附录
8.1 源程序代码ORG 0000H LJMP START
ORG 000BH LJMP T0INT;T0中断服务程序
ORG 001BH LJMP TIM0
;;;;;主程序;;;;;;;;START:LCALL CLEA
START1:LCALL SCAN LCALL BELLSCAN LCALL KEYSCAN SJMP START1
CLEA:MOV R0,#70H MOV R7,#0EH CLEAR:MOV @R0,#00H INC R0 DJNZ R7,CLEAR;70H~7CH赋值0 MOV TMOD,#11H MOV TL0,#0B0H MOV TH0,#03CH SETB EA SETB ET0 SETB EX0 SETB TR0 CLR IT0 MOV 72H,#10 MOV 75H,#10 MOV 68H,#55H MOV 69H,#01H MOV 6AH,#00H CLR P1.0 RET
;延时子程序1MS DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET
DL10MS:ACALL SCAN ACALL SCAN ACALL SCAN RET
;《祝你生日快乐》音乐闹铃程序BELLSCAN:MOV A,6AH
CJNE A,7AH,BELLOUT
MOV A,69H
CJNE A,79H,BELLOUT
MOV A,68H
CJNE A,78H,BELLOUT
LCALL MUSIC BELLOUT:RET MUSIC:
MOV IE,#8AH MOV 30H,#00H
NEXT1:MOV A,30H MOV DPTR,#TABLE MOVC A,@A+DPTR MOV R2,A JZ END0 ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH
单片机课程设计
JNZ SING CLR TR1 LJMP D1 SING:DEC A MOV 22H,A RL A MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH1,A MOV 21H,A MOV A,22H RL A INC A MOVC A,@A+DPTR MOV TL1,A MOV 20H,A SETB TR1 D1:LCALL DELAY INC 30H LJMP NEXT1 END0:CLR TR1 LCALL BELLOUT
TIM0:PUSH ACC PUSH PSW MOV TL1,20H MOV TH1,21H CPL P1.0 POP PSW POP ACC RETI
DELAY:MOV R7,#02H D2:MOV R4,#187 D3:MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY RET
TABLE1:DW 64260,64400,64521,64580
DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217
TABLE:;1
DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H;2
DB 82H,01H,81H,0F4H,0D4H DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04H DB 00H
SCAN:;把记的数送给偏移量
MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;写控制字,在显示程序中A口输出,B口输出
MOV A,78H;秒 MOV B,#0AH DIV AB MOV 71H,A MOV 70H,B
MOV A,79H;分
MOV B,#0AH DIV AB MOV 74H,A MOV 73H,B
MOV A,7AH;时
MOV B,#0AH DIV AB MOV 77H,A
MOV 76H,B;
单片机课程设计
T0中断允许
;循环扫描显示,数码管显示程序,数码管为共阳型
MOV R1,#70H MOV R5,#80H;位选
MOV R3,#08H SCAN1:MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;送A口位选
MOV A,@R1 MOV DPTR,#TAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH MOVX @DPTR,A;送B口字形码
LCALL DL1MS
INC R1;字形码偏移量
MOV A,R5 RR A;位选码
MOV R5,A DJNZ R3,SCAN1;8次
MOV DPTR,#7FFCH MOV A,#00H MOVX @DPTR,A;A口清位选
RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;对应于“0”~“9”、“_”
;定时器T0中断服务程序 T0INT:PUSH ACC
CLR ET0;停
CLR TR0;停T0工作
MOV TL0,#0B0H MOV TH0,#03CH SETB TR0;开T0工作
INC 7BH;7BH存放20
MOV A,7BH
CJNE A,#14H,OUTT0;20
MOV 7BH,#00H
INC 78H;78H秒
MOV A,78H
CJNE A,#3CH,OUTT0;60
MOV 78H,#00H
INC 79H
;79H分
MOV A,79H
CJNE A,#3CH,OUTT0;60
MOV 79H,#00H
INC 7AH
;7AH时
MOV A,7AH
CJNE A,#18H,OUTT0;24
MOV 7AH,#00
OUTT0:SETB ET0;开T0中断允许
POP ACC RETI
;;;;;;键盘扫描子程序;;;;;;;;
KEYSCAN:MOV DPTR,#7FFFH MOV A,#82H
MOVX @DPTR,A;写控制字,此时A口输出,B口输入
MOV DPTR,#7FFEH MOV A,#00H
MOVX @DPTR,A;C口写0
单片机课程设计
MOV DPTR,#7FFDH MOVX A,@DPTR MOV B,A
;B口输入
CJNE A,#0FFH,HAVE KEYOUT: RET
HAVE: LCALL DL10MS1 MOVX A,@DPTR CJNE A,B,KEYOUT;延时一段时间再检测有键按下才开始扫描处理
INC DPTR MOV A,#0FEH MOV B,A MOVX @DPTR,A;C口输出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口输入列值
CJNE A,#0FFH,KEYLIE0
MOV A,B RL A MOV B,A MOV DPTR,#7FFEH MOVX @DPTR,A;C口输出行值
MOV DPTR,#7FFDH MOVX A,@DPTR;B口输入列值
CJNE A,#0FFH,KEYLIE1
MOV A,B RL A MOV B,A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口输出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口输入列值
CJNE A,#0FFH,KEYLIE2
MOV A,B RL A
MOV DPTR,#7FFEH
MOVX @DPTR,A;C口输出行值
MOV DPTR,#7FFDH
MOVX A,@DPTR;B口输入列值
CJNE A,#0FFH,KEYLIE3 ACALL KEYOUT;
KEYLIE0:MOV R2,#00H;R2 键码 行值,第1行八个数
LJMP KEYGET
KEYLIE1:MOV R2,#08H;第2行,八个数 LJMP KEYGET
KEYLIE2:MOV R2,#10H;第3行,八个数 LJMP KEYGET
KEYLIE3:MOV R2,#18H;第4行,八个数 LJMP KEYGET
KEYGET:MOV B,A
;B中存放B口读入的列值
MOV DPTR,#KEYTAB MOV A,#0 NEXT: PUSH ACC
MOVC A,@A+DPTR CJNE A,B,AGAIN
POP ACC;A是偏移值,即列值 ADD A,R2;A中存放键码
单片机课程设计
MOV B,A RL A
ADD A,B;PC偏移量
MOV LJMP KEYFUN30 LJMP KEYFUN31 RET KEYTAB:DB
0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH DPTR,#KEYFUNTAB JMP @A+DPTR
AGAIN: POP ACC INC A CJNE A,#8,NEXT ACALL KEYOUT
KEYFUNTAB: LJMP KEYFUN00 LJMP KEYFUN01 LJMP KEYFUN02 LJMP KEYFUN03 LJMP KEYFUN04 LJMP KEYFUN05 LJMP KEYFUN06 LJMP KEYFUN07 LJMP KEYFUN08 LJMP KEYFUN09 LJMP KEYFUN10 LJMP KEYFUN11 LJMP KEYFUN12 LJMP KEYFUN13 LJMP KEYFUN14 LJMP KEYFUN15 LJMP KEYFUN16 LJMP KEYFUN17 LJMP KEYFUN18 LJMP KEYFUN19 LJMP KEYFUN20 LJMP KEYFUN21 LJMP KEYFUN22 LJMP KEYFUN23 LJMP KEYFUN24 LJMP KEYFUN25 LJMP KEYFUN26 LJMP KEYFUN27 LJMP KEYFUN28 LJMP KEYFUN29
;0 1 2 3 4 5 6 7
RET
DL10MS1:MOV R4,#20 DL3: MOV R5,#7DH DL4: NOP NOP
DJNZ R5,DL4 DJNZ R4,DL3 RET
KEYFUN00:MOV @R0,#00H MOV A,7EH
CJNE A,#0FFH,CALCU
RET
KEYFUN01:MOV @R0,#01H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN02:MOV @R0,#02H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN03:MOV @R0,#03H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN04:MOV @R0,#04H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN05:MOV @R0,#05H MOV A,7EH
CJNE A,#0FFH,CALCU RET
KEYFUN06:MOV @R0,#06H MOV A,7EH
CJNE A,#0FFH,CALCU RET
单片机课程设计
KEYFUN07:MOV @R0,#07H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN08:MOV @R0,#08H MOV A,7EH CJNE A,#0FFH,CALCU RET KEYFUN09:MOV @R0,#09H MOV A,7EH CJNE A,#0FFH,CALCU RET CALCU: MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 78H,A MOV A,74H MOV B,#0AH MUL AB ADD A,73H MOV 79H,A MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 7AH,A RET
KEYFUN10://调时键 CLR TR0
MOV R0,#77H;R0指向时的偏移量
MOV 7DH,#00H;闪烁标志位
LCALL FLASH
RET FLASH:MOV A,@R0 MOV @R0,#0BH;R0(此时77H)指向熄灭的偏移量
MOV 7CH,#3DH;7CH单元存放循环次数 RE: LCALL OFFSCAN DJNZ 7CH,RE;调用OFFSCAN60次,半秒
MOV @R0,A;R0(此时77H)指向原来的偏移量
MOV 7CH,#3DH RE1: LCALL OFFSCAN
DJNZ 7CH,RE1;调用OFFSCAN60次,半秒 LCALL KEYSCAN;键盘扫描
MOV A,7DH CJNE A,#0FFH,FLASH;判断闪烁标志位
RET OFFSCAN: PUSH ACC MOV R1,#70H MOV R5,#80H;位选
MOV R3,#08H OFFSCAN1:MOV DPTR,#7FFFH MOV A,#80H
MOVX @DPTR,A;写控制字
MOV A,R5 MOV DPTR,#7FFCH MOVX @DPTR,A;A口输出位选
MOV A,@R1 MOV DPTR,#OFFTAB MOVC A,@A+DPTR
MOV DPTR,#7FFDH
MOVX @DPTR,A;B口输出字形码
LCALL DL1MS
INC R1
;R1指向下一个单元
MOV A,R5 RR A MOV R5,A;位选
DJNZ R3,OFFSCAN1;8次
单片机课程设计
MOV DPTR,#7FFCH MOV A,#00H MUL AB ADD A,73H MOV 69H,A MOVX @DPTR,A;A口位选清零
POP ACC RET OFFTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH,0FFH,89H RET //调时键按下
KEYFUN11:INC R0 RET KEYFUN12:DEC R0 RET KEYFUN13://走时键
MOV 7DH,#0FFH SETB TR0
RET KEYFUN14://闹铃键 MOV R0,#77H MOV 7EH,#0FFH;改变显示单元,不改变计数单元
MOV 7DH,#00H;开FLASH标志位
LCALL FLASH RET
KEYFUN15://闹钟时间确认键,写入计数比较单元
MOV A,71H MOV B,#0AH MUL AB ADD A,70H MOV 68H,A
MOV A,74H MOV B,#0AH
MOV A,77H MOV B,#0AH MUL AB ADD A,76H MOV 6AH,A RET
KEYFUN16:RET
KEYFUN17:MOV 7DH,#00H MOV 70H,#0CH
MOV 71H,#0BH
MOV 72H,#0BH
MOV 73H,#0BH
MOV 74H,#0BH
MOV 75H,#0BH
MOV 76H,#0BH
MOV 77H,#0BH;送熄灭符以及H符
MOV R0,#70H
LCALL FLASH
RET
KEYFUN18:MOV 7DH,#0FFH;关闭闪烁 LCALL CLEA RET KEYFUN19:RET KEYFUN20:RET KEYFUN21:RET KEYFUN22:RET KEYFUN23:RET KEYFUN24:RET KEYFUN25:RET KEYFUN26:RET KEYFUN27:RET KEYFUN28:RET KEYFUN29:RET KEYFUN30:RET KEYFUN31:RET ACALL KEYOUT END
单片机课程设计
8.2电路图
总体电路图
第三篇:课程设计论文--基于labview的定时器程序设计
基于labview的定时器程序设计
目录
1.程序设计背景„„„„„„„„„„„„„„„„„„„„„„„„„„3
1.1.labview定时器的介绍„„„„„„„„„„„„„„„„„„„„„3
2.程序介绍„„„„„„„„„„„„„„„„„„„„„„„„„„„„3
a、主要用途和功能„„„„„„„„„„„„„„„„„„„„„„„4
b、前面板图和主要部件的功能„„„„„„„„„„„„„„„„„„„5
c、程序框图„„„„„„„„„„„„„„„„„„„„„„„„„„„6
3.程序改进„„„„„„„„„„„„„„„„„„„„„„„„„„„„8
4.程序界面及层次关系„„„„„„„„„„„„„„„„„„„„„„9
5.存在的一些问题„„„„„„„„„„„„„„„„„„„„„„„„10
6.程序来源说明„„„„„„„„„„„„„„„„„„„„„„„ 10
1.程序设计背景
定时器在家用电器中经常用于延时自动关机、定时。延时自动关机用于:收音机、电视机、录音机、催眠器、门灯、路灯、汽车头灯、转弯灯以及其他电器的延时断电及延时自停电源等。定时可用于:照相机曝光、定时闪光、定时放大、定时调速、定时烘箱、冰箱门开定时报警、水位定时报警、延时催眠器、延时电铃、延时电子锁、触摸定时开关等。例如空调中的定时器,在工作一段时间后便能自动切断电源停止工作。夏季夜间使用,入睡前先设好预定时间,等睡熟后到了预定时间,空调自动关机。方便节能。定时器除了应用于家电之外 还广泛应用于工农业生产和服务设施,军事等。发展前景
传统的定时器大多数是发条驱动式、电机传动式或电钟式等机械定时器,部分电子器械中也有试用时间继电器的。相对于传统的定时器,电子定时器的体积小,重量轻。造价低。精度高、寿命长,而且安全可靠,调整方便,适于频繁的使用。同时随着现代电子技术的不断发展,定时器也在不断更新,朝着更多用途,更高精度,更小体积发展着。
Labview的定时器:
1.为什么要使用定时: 一般来说在循环中,我们都会添加一个定时器。他们的作用主要有2 个:
1.控制代码执行的速率:简单的来说,如果在循环中添加了定时,就可以控制循环以一定间隔重复执行;或者在串口通信中,在发送指令后等待指定的时间再读返回值。
2.降低CPU 占用率:如果没有设置定时,CPU 的大部分资源会一直被该线程占用,而无法执行其他线程。2.定时VI 用法:
在LabVIEW 中的常用定时有等待(ms)倍毫秒
1. 等待(ms)
该VI 的输入端为整型,单位是ms。指定代码执行的时间间隔。举例来说,连入VI 的输入为10ms,如果循环中代码的运行时间是3ms,那么每次循环的时间是10ms;如果循环中代码的运行时间是14 毫秒(大于10ms),那么每次的循环的时间是14ms。
(Windows 下软件定时的精度在1 个ms 左右,所以实际的情况会有1ms 左右的误差)
2. 等待到下一个整数倍毫秒
该VI 输入为整型,单位是ms。该VI 将定时和系统的时钟对应起来,使用该定时VI 后,代码将在系统时钟为定时时间的整数倍执行。使用该定时VI 的第一次运行时间间隔是不确定的。比如设定定时为1000ms,对于第一次运行,无论当前时间是50ms 还是850ms,都将在下一次1000ms 的整数倍时间第二次运行该代码,那么实际的间隔分别是950ms 和150ms。
3.定时的精度: 对于上面提到的定时VI,输入的单位都是ms,但是实际运行的最小间隔在2ms 以上。这是因为Windows 操作系统中,对线程的操作最小的间隔是2ms。
4.使用定时的注意事项:
在使用等待到下一个整数倍毫秒时需要注意,当该VI 处于等待状态时,整个线程都将处于等待状态。在对时间要求较高的实时系统中,往往不可以简单的将该定时VI 和代码并行的放置。
,和等待到下一个整数程序介绍
a、主要用途和功能 在测量过程中,有时需要测量、记录数据在2小时内的分布情况(稳定性、波动性);有时需要每10分钟测量一次数据并保存结果。这就需要有一个定时器或倒计时器来控制测量的过程,利用“已用时间”快速vi做了一个既有“定时”功能又有“倒计时”功能的vi,基本上满足应用程序的设计要求。
该vi的定时精度不是很高,大概在正、负1s左右,基本上可以满足工程上的使用要求。
b、前面板图和主要部件的功能
定时时间选择——这是一个枚举控件,用来选择定时或倒计时的时间间隔。设计时定义了一些常用时间的数据列表。
定时器(倒计时器)——这是一个开关控件,用来选择是定时功能还是倒计时功能。开始计时后将被灰化(运行时不可再操作)。
停止(开始)——这是一个开关控件,用来控制是否开始计时。开始计时后将被灰化(运行时不可再操作)。
定时持续时间——这是一个字符显示控件,用来实时显示定时或倒计时的时间间隔数值。
强行停止计时——这是一个开关控件,用来强行停止计时过程(退出计时)。
c、程序框图
整个程序框图
程序在执行时,首先通过选择按钮,选择是定时器模式还是倒计时模式,然后经过每局按钮确定定时时间,再按下开始,若在定时器模式下,则定时显示时间从0递增到枚举选择的时间,此过程中按钮变灰,不可用,到点时,由开始转为停止,所有键可用。倒计时器模式与此过程大致相同,唯一不同便是计数从预设值递减为0。程序在执行过程中可用确定强制退出键退出。
计时的功能由“已用时间”实现,枚举的数值为其上限,在定时器模式,已用时间直接输出到格式化日期,再到时间显示控件。在倒计数器模式,已用时间输出数据先与枚举数做减法运算,在输入到格式化日期。
中断循环由已用时间的结束输出、强行停止键、过程错误输出三者通过逻辑与接到中止键。
程序改进
上述程序过于简单,现做改进如下:
1.将枚举控件用一个数值输入控件代替,这样就可以自行确定定时或倒计时的时间,从而扩大了程序适用的范围。(注意输入的数值以分钟记)
2.为了更好的达到倒计时预警的效果,现加入LED灯进行倒计时小于10时的显示,从而更加直观,鲜明,同时为了不影响程序的观看效果,LED灯只在倒计时的最后10秒出现,其余情况皆为不可见。3.在程序设计中使用属性节点,比如本例中:利用属性节点将程序运行过程中的操作限定在唯一性上,可以降低操作者的误操作可能性。本程序运行时,要么等待定时结束,要么由操作者强行停止计时。
4.新增一个图片下拉表,它的可视性与LED灯的情况相同。
5当定时时间到时,发出声音报警。整体程序图
程序界面
存在的一些问题
本程序的定时显示精确性不高,例如LED灯的数字无法做到同步显示等等。程序来源说明
本文原程序来源于http://tieba.baidu.com/p/1585935847 9
第四篇:《单片机原理及接口技术》课程设计报告——多通道秒表定时器(DOC)
《单片机原理及接口技术》
课程设计报告
课程设计名称:多通道秒表定时计数器设计
院 系:自动控制与机械工程学院
专业:电气工程及其自动化
班级:2012级电气二班
姓名:黄瑞
学号:201204170209
时间:2014年6月
目录
一、课程设计目的和要求.....................................................................................................3
1、设计的目的.................................................................................................................3
2、设计的要求.................................................................................................................3
(1)总体要求.........................................................................................................3(2)具体要求.........................................................................................................4(3)设计提示.........................................................................................................4
二、设计的步骤和思路.........................................................................................................5
1、设计的步骤.................................................................................................................5
2、设计的思路.................................................................................................................5
三、硬件的设计.......................................................................................................................6
1、信号输入电路.............................................................................................................7
2、数码管的驱动模块的电路.........................................................................................7
3、LED灯的驱动模块电路............................................................................................8
四、软件设计...........................................................................................................................8
1、单片机选择.................................................................................................................8
2、系统软件设计分析.....................................................................................................9
3、主要功能实现的程序...............................................................................................10(1)通道号的设置...............................................................................................10(2)定时值的设置...............................................................................................11
五、调试说明.........................................................................................................................12
1、未启动仿真时,初始状态:...................................................................................13
2、开始启动仿真后:...................................................................................................13
3、通过按下K2切换至一、二、三、四通道和定时值的设置:............................14
4、定时时间到后对应通道号LED灯点亮:.............................................................15 六
心得体会.........................................................................................................................16
七、致谢.................................................................................................................................17 八、参考文献.......................................................................................................................17
九、附录.................................................................................................................................18
一、课程设计目的和要求
1、设计的目的
单片机课程作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完〈〈单片机原理与接口技术〉〉课程后,并在进行相关课程设计基础上进行的一次综合联系。
单片机课程设计过程中,我们通过查阅资料,接口设计、程序设计、安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并具有综合应用功能的小应用课程设计,不但使我们能熟练掌握课堂上所学知识,而且还能使我们在设备和软件方面得到较全面的提高和锻炼,也提高了我们运用综合知识解决实际的能力。
课程设计以学生认知为主体,充分调动学生的积极性,重视学生自学能力的培养,根据具体课题安排时间确定课题的设计、编程和调试内容,分团队开展课程设计活动,按时完成每部分工作。坚持独立完成,实现课题规定的各项指标,并写出设计报告。
要求学生自己查阅资料和充分利用所学知识,根据所要设计系统所要达到的功能,划分软硬件功能、选择器件、编写相关程序,用Proteus 在计算机上绘图并用Keil进行程序边编写进行防真,再对整个系统做调试运行,培养学生在遇到问题时能进行独立、系统、认真的思考,并进一步培养学生在团队中的合作精神,不断调试修改,直至达到设计的要求和取得满意的效果,最后编写系统说明书,其内容包括系统的功能介绍,使用范围,主要性能指标,使用方法,注意事项等。
2、设计的要求
(1)总体要求
本次课程设计主要以软件仿真为主,在为期两周的工程实践中,将占据主要时间,要求完成的任务主要包括以下几点:
(1)独立完成设计任务;
(2)绘制系统硬件总框图;(3)绘制系统原理电路图;
(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释;(5)制定编写调试方案,编写课程设计任务书;(6)写出设计工作小结。(2)具体要求
该课程设计要求基于AT89C51设计一个4位的LED数码管作为“4通道的秒表定时器”。
1设计使显示时间为0~99秒;
2当各通道定时时间到时,点亮对应的LED灯; 3设计一个具有4个按键的键盘:
K1:“设置”/“定时启动”; K2:“通道”/“定时设置”; K3:“加一”; K4:“减一”;
4设计每到一秒钟有声音或LED提示提醒功能,可通过按钮打开及关闭该提醒功能。(3)设计提示
(1)用6为7段LED数码管作为显示设备,最高为显示通道号,低2位显示时间。
(2)可采用定时器,定时时间100ms。(3)参考Protuse仿真效果图
图1-1 Protuse仿真效果图
二、设计的步骤和思路
1、设计的步骤
(1)制定相应的设计方案;
(2)硬件的初步设计;
(3)选择设计所用元器件和参数;(4)在Proteus 7.5中设计和连接电路图;(5)软件的初步设计;(6)编写程序实现其功能;(7)在keil_v4中进行调试运行;(8)硬件和软件联合调试。
2、设计的思路
为使数码管同时显示通道号和定时值(0~99秒),选用4位7段LED数码管,当定时时间到时点亮对应的LED灯,课程中我们选用LED-BLUE灯,并设计有四位按键的键盘,分别为K1、K2、K3、K4来控制定时启动/停止、通道号和定时时间的切换设置、通道号/定时时间加
一、通道号/定时时间减一。通过这四个按键来控制整个电路的运行、LED灯的点亮和数码管的显示。具体控制如下:(1)通道号为1~4,对应LED灯为LED1~LED4,执行程序前可任意选择通道号;定时值可在0~99S内任意设置;
(2)当程序运行初始化化后,如果K2按下,则切换至通道号的设置,通过K3、K4来增加或减小通道号;当选择好通道号后如果按下K2则切换至定时值的设置,通过K3、K4来增加或减小定时值;当定时值设置好之后按下K1则程序执行所选通道的秒表定时;当定时时间到时,对应通道的LED灯点亮;
(3)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4
来增加或减小定时值;当设置好之后按下K1后直接执行一通道的秒表定时;当定时时间到时,对应通道的LED灯点亮;
(4)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4来增加或减小定时值;当设置好之后按下K2则切换至通道号的设置,通过K3、K4来增加或减小通道号;当设置好后按下K1则执行对应通道的定时;当定时时间到时,对应通道的LED灯点亮;
(5)当程序运行初始化后直接按下K3、K4进行定时时间的设置,通过K3、K4来增加或减小定时值;当设置好之后按下K2则切换至通道号的设置,通过K3、K4来增加或减小通道号;当设置好后按下按下K2则又切换至定时时间的设置,通过K3、K4来增加或减小定时值;依次可不断循环通道号和定时时间的切换设置,直至达到自己所想要的定时时间,此时按下K1则执行对应通道的秒表定时,当定时时间到时点亮对应的LED灯。
三、硬件的设计
硬件电路设计框图如下图所示,主要由:4个按键的键盘、AT89C51单片机、数码管、4个LED灯。
根据硬件系统电路设计框图,对各部分模块的原理进行分析,编写个子模块程序,最终将其组合。
图3-1硬件电路设计框图
1、信号输入电路
独立式按键就是各按键相互独立,每个按键各接入一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键按下了。独立式按键电路配置灵活,软件简单。但每个按键需要占用一个输入口线,在按键数量较多时,需要较多的输入口线且电路结构复杂,故此种键盘适用于按键较少或操作速度较高的场合。
图3-2键控电路
消除键抖动。一般按键在按下的时候有抖动的问题,即键的簧片在按下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。若在簧片抖动时进行扫描就可能得出不正确的结果。因此,在程序中要考虑防抖动的问题。最简单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描”,延迟时间为10~20ms。这可通过调用子程序来解决,当系统中有显示子程序时,调用几次显示子程序也能同时达到消除抖动的目的。
2、数码管的驱动模块的电路
图3-3数码管驱动模块电路
3、LED灯的驱动模块电路
图
3-4LED灯的驱动电路
四、软件设计
1、单片机选择
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(ROM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。
功能强大AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。此设计中就采用AT89C51。单片机小系统的电路图如图所示:
图4-1信号输入电路
单片机AT89C51的主要特征:
①与 MCS-51 兼容,4K 字节可编程闪烁存储 ②灵活的在线系统编程,掉电标识和快速编程特性; ③寿命为 1000 次写/擦周期,数据保留时间可 10 年以上; ④全静态工作模式:0HZ33HZ; ⑤三级程序存储器锁定;
⑥128×8 位内部 RAM,32 位可编 I/O 线;
⑦两个 16 位定时器/计数器,5 个中断源,4 个 8 位并行的 I/O 接口,个全双工 I/O 接口。
2、系统软件设计分析
模块的划分:
(1)键盘的设置、启动、停止、加
一、减一;(2)数码管显示通道号和定时时间;
(3)定时时间到后对应通道号的LED灯点亮。程序流程图如下:
开始 初始化 Y扫描K2键按N Y扫描K2键按下? 通道号设定下? N 通道号加一 Y扫描K3键按扫描K3键按Y下?下? 定时时间加一 N N 通道号减一 Y扫描K4键按扫描K4键按Y下?下? 定时时间减一 N N扫描K1键按N下? Y数码管计时 定时时间N到? Y通道号对应的LED灯点亮 结束
图4-1程序流程图
3、主要功能实现的程序
1)通道号的设置
uchar set_thax()
//设置通道函数
{
key_set();
if(set_2==2)
{
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
(
{
delay(300);
sec++;
if(sec==5)
{sec=1;}
}
}
if(k4==0)
//K4减1
{
delay(30);
if(k4==0)
{
delay(300);
sec--;
if(sec==0)
{sec=4;}
}
}
}
a=sec;
return a;}
2)定时值的设置
void set_time()//设置时间函数
{ key_set();if(set_2==1){
delay(10);
if(k3==0)
//K3加1
{
delay(30);
if(k3==0)
{
delay(300);
minu++;
if(minu==100)
{minu=1;}
}
}
(11
if(k4==0)
//K4减1
{
delay(30);
if(k4==0)
{
delay(300);
minu--;
if(minu==-1)
{
}
}
}
} }
五、调试说明
仿真结果和分析:
minu=99;12
1、未启动仿真时,初始状态:
图5-1未启动仿真时,初始状态
2、开始启动仿真后:
图5-2开始启动仿真后
3、通过按下K2切换至一、二、三、四通道和定时值的设置:
图5-3通过按下K2切换至一、二、三、四通道和定时值的设置
4、定时时间到后对应通道号LED灯点亮:
图5-4定时时间到后对应通道号LED灯点亮
六
心得体会
作为一名电气工程及其自动化专业的大二学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
在两个周的学习工作中,通过查阅相关资料了解了直流调速系统,加深了对直流电机调速控制系统的认识,熟悉了单片机在控制系统中的运用。并且在所学知识的基础上,利用已有的直流调速系统设计,尝试了自己的一些研究。并且使我将以前所学的知识系统化,理论化,实用化。对如何使用已有知识及获取相关资料方面的能力又有了提高。
根据课题要求,利用所学的相关知识,查询相关的资料。根据课程条件,找到适合的方案,找到需要的元器件。
根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。
除编写实现设计要求外的程序,还要根据课程设计的实际情况,添加些额外程序来使系统更加的稳定,如开关的去抖(采用延迟)。
该课程设计的程序可以参考MCS-51系列单片机,也可自己根据自己熟悉的方法来编程如单片机C语言或汇编语言。
在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。这次的单片机课程设计重点是理论与实际的相结合。该设计从头到尾都要自己参与,熟悉了整个设计的过程,更充分的锻炼了自己。
在此要感谢我的指导老师,感谢老师给我这样的机会锻炼。在整个设计过程中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中的探索的艰难和成功的喜悦。虽然这个设计还不是很完善,但是在设计过程中所学到的东西是这次设计的最大收获和财富,使我终身受益。
七、致谢
为期两个周的课程设计也接近了尾声。此次课程设计的完成离不开老师和同学对我的帮助,使我对单片机的工作原理和使用更近了一步。
首先要感谢我敬爱的指导教师。他们在学术上的精心指导和严格要求,在系统研究和调试过程中给予的及时帮助。这些使我组的课程设计得以顺利完成,并激励着我们在今后的人生道路上不断开拓进取,勇往直前。在此,我们再一次对诸位老师的培养和关怀表示诚挚的谢意!
同时我们也非常感谢所有教导过我的老师们,他们不但在课程设计中指导我们学习和生活,而且在完成论文期间给我许多帮助和建议,他们兢兢业业、对工作认真负责的态度为我们做出了好的表率,时刻鞭策着我们向他们学习。
非常感谢我的同学们,在与他们共同的学习、工作、生活过程中,他们给予了我及时的帮助和建议,开拓了我的思路。这使我在学习和生活中受益匪浅。
最后,向所有帮助过我的老师和同学致以最诚挚的谢意。
八、参考文献
[1] 陈伯石.电力拖动自动控制系统[M].北京:机械工业出版社,2003.[2] 钟富昭.8051单片机典型模块设计与应用[M].北京:人民邮电出版社,2007 [3] 张靖武.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007 [4] 杨恢先.单片机原理及应用[M].北京:人民邮电出版社,2006 [5] 孟庆涛.图解电子控制电路[M].北京:人民邮电出版社,2006 [6] 谢维成.单片机原理与应用及C51程序设计[M].北京:清华大学出版社,2006 [7] 周润景.基于PROTEUS 的电路及单片机系统设计与仿真[M].北京:北京航空航天出版社,2006 [8] 李光飞.单片机课程设计实例指导[M].北京:北京航空航天出版社,2004 [9] 杜坤梅.电机控制技术[M].哈尔滨:哈尔滨工业大学出版社,2002 [10] 李广第.单片机基础(修订版)[M].北京:北京航空航天大学出版社,2001 [11] 吴亦峰.单片机原理与接口技术[M].北京:电子工业出版社
九、附录
#include
sbit QB1=P2^0;sbit QB2=P2^1;sbit QB3=P2^2;sbit QB4=P2^3;sbit k1=P1^0;//k1按键, sbit k2=P1^1;//k2按键, sbit k3=P1^2;//k3按键,加1 sbit k4=P1^3;//k4按键,减1 sbit led4=P3^0;//LED灯 sbit led3=P3^1;sbit led2=P3^2;sbit led1=P3^3;sbit what=P0;uchar sec=1,minu,mstcnt;// 定义初始量 uchar set_2=1,set_1=1;uchar mis,mig,ss,sg;uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴显示
uchar code tabl[]={0x3F,0x06,0x5B,0x4F,0x66};int a;
void delay(uint);//延时函数 void key_change();// 扫描K1 void key_set();//
扫描K2 void disp(uchar,uchar,uchar,uchar);//显示函数 void set_time();//设置时间函数 uchar set_thax();//设置通道函数 void timer0();void haap();
void main()//主函数 { EA=1;//系统允许有开放的中断 ET0=1;//允许T0中断
TR0=1;//开启中断,启动定时器 TMOD=0x01;TH0=0x00;//选择数码管
TL0=0x01;
while(1){
sg=sec%10;//通道个位 mis=minu/10;//显示时间十位 mig=minu%10;key_set();//扫描K2 key_change();//扫描K1 if(set_1==1)//设置显示条件 {haap();} if(k1==1&&k2==1)//正常显示 { delay(10);if(k1==1&&k2==1){ sg=sec;disp(sg,mis,mig,ss);} } key_change();
if(set_1 ==2)//启动条件
{
timer0();
} key_change();if(set_1==3){minu=0;} } }
void haap()
//设置显示函数{ if(set_1==1){ delay(10);key_set();if(set_2==1){ delay(10);
set_time();}
key_set();if(set_2==2){
delay(10);
set_thax();
} } }
void timer0()interrupt 1 using 0 //启动函数{
TH0=0x01;TMOD = 0x01;
if(set_1==2)
{ delay(10);mstcnt++;
if(mstcnt==20){
mstcnt=0;
if(minu==0)
{
minu=0;
set_thax();
if(a==1)
{
led1=0;
led2=1;
led3=1;
led4=1;
}
else
{
if(a==2)
{
led1=1;
led2=0;
led3=1;
led4=1;
}
else { if(a==3)
}
}
}
else
{
minu--;
} } if(minu==0){ minu=0;
} } }
void key_change()//k1按键扫描 { if(k1==0){ delay(20);
{ led1=1;led2=1;led3=0;led4=1;
} else
if(a==4)
{
led1=1;
led2=1;
led3=1;
led4=0;
}
if(k1==0){ set_1++;while(k1!=1);if(set_1==4){set_1=1;} } } }
void key_set()//k2按键扫描 { if(k2==0){ delay(20);if(k2==0){ set_2++;while(k2!=1);if(set_2==3){set_2=1;} } } } void disp(uchar sg,uchar mis,uchar mig,uchar ss)//显示函数{ QB1=0;QB2=1;QB3=1;QB4=1;P0=table[sg];//第1个数码管显示通道 delay(10);//延时一小会
QB1=1;QB2=1;QB3=0;QB4=1;P0=table[mis];//第3个数码管显示十位 delay(10);QB1=1;QB2=1;QB3=1;QB4=0;P0=table[mig];//第4个数码管显示个位
delay(10);QB1=1;QB2=1;QB3=1;QB4=1;P0=table[ss];//第2个数码管不显示 delay(10);}
void set_time()//设置时间函数 { key_set();if(set_2==1){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){ delay(300);minu++;if(minu==100){minu=1;} } } if(k4==0)//K4减1 { delay(30);if(k4==0){ delay(300);minu--;if(minu==-1){
minu=99;
}
} } } }
uchar set_thax()
//设置通道函数
{ key_set();if(set_2==2){
delay(10);if(k3==0)//K3加1 { delay(30);if(k3==0){
delay(300);sec++;
if(sec==5){sec=1;} } } if(k4==0)//K4减1 { delay(30);if(k4==0){ delay(300);sec--;if(sec==0){sec=4;} } } } a=sec;return a;}
void delay(uint k)//延时函数 { uint i,j;for(i=k;i>0;i--)for(j=80;j>0;j--);}
第五篇:课程设计心得体会[推荐]
课程设计心得体会
课程设计心得体会一
经过一个学期的学习,我对C语言有了一定的了解。C语言是学习计算机科学的基础,作为一名计算机专业学生,掌握C语言更是毋庸置疑。在上课之前,就经常听同学说,C语言很难学,确实,刚开始听课时觉得老师不知所云。不过,发现对后续内容的预习后,前面的疑团都迎刃而解,这让我对C语言的学习更有信心。
计算机最重要的就是上机操作,自己编写程序,在VisualC++运行,刚开始经常会出现错误,经过分析改正后,终于能够运行了,就觉得特别激动。
课程设计是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程。在这个过程中,不仅锻炼了我们缜密的思维和坚持不解的毅力,更磨练了一个队伍的团结互助的精神。只有通过大家一起努力才能将课程设计的所有环节都顺利的完成。另外程序设计中我们遇到问题并解决问题的过程,使得我们独自探索并解决问题的能力了有了一个提高,这有利于我们以后的学习。同时这整一个过程,也使我们对程序编写的整个过程有了一个统筹全局的思想,因为需求分析、程序编写、程序调试、撰写报告这些过程是环环相扣的,绝对不可能独立进行。
课程设计是学习《C程序设计》后对知识的全面测试,刚拿到题目时不知道怎么去处理,觉得很复杂,经过和小组成员的讨论,上网查资料,逐个问题逐个击破,问题不再那么复杂。通过课程设计,我发现自己还存在很多知识漏洞,编写程序时,经常会出现低级错误,很多知识点都不熟悉。在今后的时间里,我一定要投入更多精力学习C语言,以课本为基础,请教老师,与同学讨论,参考资料,上机操作,我相信我一定能把C语言学好。
课程设计心得体会二
本学期我们开设了《模拟电路》与《数字电路》课,这两门学科都属于电子电路范畴,与我们的专业也都有联系,且都是理论方面的指示。正所谓“纸上谈兵终觉浅,觉知此事要躬行。”学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在本学期暨模电、数电刚学完之际,紧接着来一次电子电路课程设计是很及时、很必要的。这样不仅能加深我们对电子电路的任职,而且还及时、真正的做到了学以致用。
这两周的课程设计,先不说其他,就天气而言,确实很艰苦。受副热带高气压影响,江南大部这两周都被高温笼罩着。人在高温下的反应是很迟钝的,简言之,就是很难静坐下来动脑子做事。天气本身炎热,加之机房里又没有电扇、空调,故在上机仿真时,真是艰熬,坐下来才一会会,就全身湿透,但是炎炎烈日挡不住我们求知、探索的欲望。通过我们不懈的努力与切实追求,终于做完了课程设计。
在这次课程兼职设计过程中,我也遇到了很多问题。(心得体会 www.xiexiebang.com)比如在三角波、方波转换成正弦波时,我就弄了很长时间,先是远离不清晰,这直接导致了我无法很顺利地连接电路,然后翻阅了大量书籍,查资料,终于在书中查到了有关章节,并参考,并设计出了三角波、方波转换成正弦波的电路图。但在设计数字频率计时就不是那么一帆风顺了。我同样是查阅资料,虽找到了原理框图,但电路图却始终设计不出来,最后实在没办法,只能用数字是中来代替。在此,我深表遗憾!
这次课程设计让我学到了很多,不仅是巩固了先前学的模电、数电的理论知识,而且也培养了我的动手能力,更令我的创造性思维得到拓展。希望今后类似这样课程设计、类似这样的锻炼机会能更多些!
课程设计心得体会三
学习vb程序已经一个学期了,但是感觉没有学到真正的知识。但是最近几个课时的课程学习让我受益匪浅,学会了一些简单的程序语言设计,并且感觉这是一种乐趣,开始喜欢这门课程了。
然而,我深刻体会到这门课程并不是轻而易举就可也学好的,学习这门课程不仅需要细心严谨的态度,还需要充分发挥我们的想象力,让理论和实践充分的结合在一起,才能达到事半功倍的效果。细节决定成败这句话在程序设计中最恰当不过了,因为一个小小的错误代码就可以使你的整个的程序无法进行,有时候绞尽脑汁也没能找出错误所在,只好老老实实的从新进行编写工作。所以课程不仅理论性强,实际操作性更强,没有一个好的心态很难学好这门课程。我们学习的不仅是科学的方法,还包括用什么样的态度去对待这门课程,并且让自理论性和实践性在自身得到充分的发挥,用细心严谨的态度去认识事物,且希望通过这次的实践操作可以让我更好地学习vb程序设计。
CAD/CAM课程设计心得体会四
随着我国机械制造业的快速发展,我国正逐步变成“世界制造中心”。为了增强竞争能力,我国制造业正在广泛的使用先进的数控技术。21世纪机械制造业的竞争,很大程度上是数控技术的竞争。为了适应社会的需求,进一步增强机械专业学生的竞争能力,我们进行了为期2周的CAD/CAM综合实训。
这对于我们来说无疑是一件好事。通过两周的数控综合实训,使我们更深一步地认识和掌握CAD/CAM软件,并深刻体会到了自动编程软件(mastercam)在数控机床加工中的巨大作用,尤其是铣削部分。通过学习使我们从理论学习转到了实际生产,同时我们对加工参数的设置有了感性的认识,如下刀位置、下刀方式、进退刀参数以及刀具切削间距的设定等等。
我们加工的零件虽然难度不大,但是十分的耗时间,因为要大量的使用线切割,这就需要我们有足够的耐心。我们经历了穿丝、绘图、加工的整个过程,算是初步掌握了一项技能,确实是受益匪浅。
此次实训以培养学生的创新精神和实践能力为目的,以就业为导向,进一步提高学生对于计算机应用和分析问题及解决问题的能力,为以后适用于社会发展的需要。通过两周实训让我们更好的巩固理解并掌握CAD/CAM的有关知识。达到能熟练、独立的使用CAD/CAM软件配合数控机床,进行合理有效的完成产品加工。
经过两周的实训,我们认识到了我们专业的先进性,更重要的是为我们以后从事数控行业打下坚实的基础,学到了知识和技术,更重要的是学会了团队合作的精神。