《单片机课程设计-计数器(10页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计-计数器(10页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-单片机课程设计-计数器-第 9 页单片机课程设计题 目定时器学 院华南理工大学广州学院专 业电子信息工程班 级电信3班20093006242姓 名杨振刚 43号指导教师肖婷2011年 5月 8日目 录一、课程设计题目(3)二、内容要求(3)三、目的和意义(3)四、总体方案设计思路(3)五、仿真电路设计(4)六、软件设计(7)七、仿真调试(10)八、实际目标时情况(10)十、参考文件(11)一、课程设计题目计时精度为1ms的电子定时器,可实现正计时。要求:定时器启动后,正常计数,按暂停/继续按钮,定时器暂停计时,再按一次暂停/继续按钮,计数器接着计数;按“清零“按钮后,定时器清零,;按退出”按
2、钮,退出计数器模式。二、内容要求定时器启动后,正常计数,按暂停/继续按钮,定时器暂停计时,再按一次暂停/继续按钮,计数器接着计数;按“清零“按钮后,定时器清零,;按退出”按钮,退出计数器模式。三、目的和意义1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。2、综合运用所学的单片机原理与应用理论知识,通过实践加强对所学知识 的理解,具备设计单片机应用系统的能力。 3、 通过本次课程设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。4、 通过本次试验,增强自己的动手能力。认识单片机在日常生活中的应用的广泛性,实用性。四
3、、总体方案设计思路本实验利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、LED数码管以及控件来控制表的计数以及计数的开启/暂停/继续与复位! 其中有三个数码管用来显示数据,二个数码管显示秒个位和十位,另一个数码管显示十分之一秒,十分之一秒的数码管计数从09,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。当计数超过范围是所有数码管全部清零重新计数。五、仿真电路设计AT89C51的芯片概述 AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system prog
4、rammable)的可反复擦写1000次的Flash只读程序内存,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 其工作电压在4.5V,一般我们选用5V电压。外形及引脚排列如图2所示 图1:89C51的核心电路框图l 管脚说明(1)电源及时钟引脚(4个)Vcc: 电源接入引脚Vss:接地引脚XTAL1:晶振震荡器接入的一个引脚
5、(采用外部振荡器时,此引脚接地);XTAL2:晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡器信号的输入端)。(2)控制线引脚(4个)RST/Vpd:复位信号输入引脚/备用电源输入引脚;ALE:地址锁存允许信号输出引脚/编程脉冲输入引脚:EA:内外内存选择引脚/片外EPROM编程电压输入引脚;PSEN:外部程序内存选通信号输出引脚。(3)并行I/O引脚P0.0-P0.7:一般I/O口引脚或数据/低位地址总线复用引脚;P1.0-P1.7:一般I/O口引脚;P2.0-P2.7:一般I/O口引脚或高位位址总线引脚;P3.0-P3.7:一般I/O口引脚或第二功能引脚元器件介绍及参数选择本
6、设计中还用到其它一些元器件,例如:晶振,电容,电阻排,电解电容,开关等等。晶振采用频率为12MHZ,连接的两个电容为1nF;电解电容为22uf;开关功能是在仿真过程中,按下开关便能实现60秒继续暂停或复位功能。关键单元 图2P3.4实现继续暂停功能P3.7实现复位功能 图3从左到右表示十位、个位、十分之一 图4 最少单片机系统电路原理图 六、软件设计是否是否手动开关定时器溢出中断对定时器重新赋值进行加一操作后重新计算时间往P0口和P2口送显示时间数码管显示中断返回主函数对定时器/计数器初始化始化程序开始判断P34口是否有低电平信号开中断并启动定时器开始、暂停或者继续计数置零判断P37口是否有低
7、电平信号软件程序 #include #define TIMES 2sbit sta_end=P34;sbit reset=P37;int count=TIMES;unsigned char code table0=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f;unsigned char code table1=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/*声明second10用于计数十分之一秒变化,second1用于记录秒的个*/ /*位,second2用于记录秒的十位*/unsi
8、gned int second10,second1,second2;bit bdata flag;/*以下是设置延时功能的函数*/ void Delay_1ms(unsigned int x) unsigned int i, j; for(i = 0; i x; i+) for(j = 0; j = 148; j+); /*以下是设置时间的函数*/void setTime() second10+; if(second10=10) /*当十分之一秒计数到十后从零重新计时*/second10=0; /*同时秒计时个位加一*/second1+;if(second1=10) /*当秒计数个位到十后从零
9、重新计时*/second1=0;second2+; /*同时秒计时十位加一*/if(second2=6) second2=0; /*以下是向LED管输数据并使之显示的函数*/void dispact() P1=table0second1; P0=table1second2; P2=table0second10;/*以下是设置时间函数和输数据函数被此函数调用实现,利用定时器中断*/Timer0 () interrupt 1 using 1 TH0 = (65535 - 50000)/256; TL0 = (65535 - 50000)%256; if(flag) count- ; if(coun
10、t=0) setTime(); dispact(); count=TIMES; void main(void) TMOD = 0x01; TH0 = (65535 - 50000)/256; /*定时器赋初值*/ TL0 = (65535 - 50000)%256; flag = 0; EA = 1; /*cpu开中断*/ TR0 = 1; /*利用定时器0*/ ET0 = 1; P1= 0x3f ; P2=0x3f ;P0= 0xc0 ; /*外部中断允许*/ while(1) if(!sta_end) Delay_1ms(1); if(flag = 0) flag = 1; else fl
11、ag = 0; if(!reset) /*复位设置,全部清零*/flag = 0; second10 = 0; second1 = 0; second2 = 0; dispact();定时/计数器初值计算(1)本电路应用TIMER0 MODE 16位计数器的计时中断法。 (2)1秒等于1000000微秒,而每一计时脉冲是1微秒,因此需输入100000个计时脉冲,方可达到1秒的时间。本设计中,设定中断每次溢出时间50ms。(3)由上式得知,循环2次即可达到100ms定时(4)设定TH0 = (65535 - 50000)/256;TL0 = (65535 - 50000)%256;(5)上电时,
12、显示000,按下开关开始计时。七、仿真调试调试方法:首先用Keil软件将C编译成HEX文件,打开Keil软件,新建一个文文件,输入C程序,保存成C格式文件,然后新建工程,连接单片机为AT89C51,选择Options for target,选择OUTPUT子菜单,在Create HEX Fi前打钩,DeBug子菜单中,Settings选择ProteusVSM Simulator,USE前打钩,再次运行文件,成功后在目录下会生成HEX文件,打开Proteus软件,或直接点击DSN檔,双击单片机模板,点击文件夹式样的图标选择对应的HEX驱动文件,然后点击开始,进行调试八、实际目标时情况在仿真,基本
13、满足题目要求,可以做到计时的开始、暂停、继续和复位,但在暂停和继续的功能实现上,不时出现失灵的现象。九、课程设计心得体会通过这个课程设计,我对一些专业知识和电子设计有了更深的了解,同时也尝试着去应用自己的所掌握的知识。本次电子课程设计主要是对已学习的模拟电子技术、数字电子技术和单片机的综合应用,同时加上电路等知识,设计完成了利用软件模拟的秒表。经过几天的奋战,我感受很深.首先摆在我面前的是要先弄懂所要设计电路的原理,于是最开始我在拿到题目之后就查找了大量的相关的数据,再加上平时理论课的学习以及充分利用了网络资源和在图书馆借了相关的书籍资料,在仔细分析了这个题目所要达到的目的之后,初步确定了原理
14、图。接下来的是单元电路的设计,以及进一步的分析其原理,实现哪些功能需要哪些电路,在此之间我们用到了以前没有用到过的芯片,但最终我们还是弄清楚了其原理。经过几天研究,终于确定好了符合要求的电路。在电路确定之后就需要编写程序,经过多次的修改和仿真,程序也顺利的编写完成。经过这些天的学习我深刻的体会到实际与理论有很大的区别。在我们学习的过程中不仅考验了我们对知识的吸收和掌握,而且也考验了我们的细心和耐心。特别是在仿真过程中对参数的改进和电路图的查找过程中,我深有体会。我认为这次实习不仅仅学习了软件知识,还提高了我们专业素质。作为一个电信专业的学生,我深知课程设计的重要性。这次课程设计我从刚开始的什么都不懂不会,到现在的基本了解了一个电路组件是如何构成的,完成这次课程设计我觉得收获很多,不但进一步掌握了单片机的知识及相关专业仿真软件的基本操作,还提高了自己的设计能力及动手能力。实践是检验真理的唯一标准。理论知识的不足在这次实习中表现的很明显。这将有助于我今后更加明确学习的方向,可认识到自己的不足,确定自己的目标,从而更加努力的学习。只有这样我们才能真正的去掌握它,真正的去运用它。十、参考文件1.单片机应用系统设计技术-基于C51的Proteus仿真 电子工业出版社2.单片机应用系统设计技术-基于C51的Proteus仿真实验与解题指导 电子工业出版社