为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机数字转速表设计

2012-09-30 17页 doc 282KB 32阅读

用户头像

is_466571

暂无简介

举报
单片机数字转速表设计目 录 第1章 概述 1 2.1 基本原理 2 2.2 设计思路 2 2.3 设计方案 2 第3章 硬件电路设计 4 3.1按键设计电路图 4 3.2 显示电路设计图 4 3.3脉冲产生电路设计图………………………………………………..5 第4章 软件设计 6 4.1主程序流程及说明 6 4. 2中断服务子程序 6 4.3键盘扫描程序 7 第5章 系统调试及软件仿真 8 5.1 程序调试 8 5.2 硬件电路调试 9 第6章 总结 10 11参考文献 12附录A 12系统原理图: 13附录B 1...
单片机数字转速表设计
目 录 第1章 概述 1 2.1 基本原理 2 2.2 设计思路 2 2.3 设计 2 第3章 硬件设计 4 3.1按键设计电路图 4 3.2 显示电路设计图 4 3.3脉冲产生电路设计图………………………………………………..5 第4章 软件设计 6 4.1主程序流程及 6 4. 2中断服务子程序 6 4.3键盘扫描程序 7 第5章 系统调试及软件仿真 8 5.1 程序调试 8 5.2 硬件电路调试 9 第6章 总结 10 11参考文献 12附录A 12系统原理图: 13附录B 13程序清单: 第1章 概述 随着科学技术特别是微型计算机技术的高速发展,单片微机技术也获得了飞速发展。目前,单片机已经在日常生活和控制领域等方面得到广泛的应用,它正为我国经济的快速发展发挥着举足轻重的作用。作为自动化专业的一名工科学生应该牢牢掌握这一重要技术。而课程设计这一环节是我们提高单片机应用能力的很好机会,也是我们学好这一课程的必经环节。通过课程设计可以进一步巩固我们前面所学理论知识,使我们对单片机理论知识有一个深刻的认识和全面的掌握。另外通过这一真正意义上的实践活动,我们可以从中发现自己不足之处并能够在自己的深思下和老师的指导下得到及时的解决。再次,它能使我们的应用能力和科技创新能力得到较大的提高。 本课程设计是单片机系统在测速方面的简单应用。目前单片机技术已经在电机转速等为控制对象的控制系统中得到了广泛的应用,而在这一控制过程中必须通过单片机来测量转速。本课程设计利用89C51单片机及外围电路来设计一个数字转速表。通过测量转速所对应的方波脉冲来测量转速,,同时其具体数值也可以在LED上显示出来。 单片机作为嵌入式微控制器在工业测控系统,智能仪器和家用电气中得到广泛应用。虽然单片机的品种很多,但MCS-51系列单片机仍不失为单片机中的主流机型。本课程以MCS-51系列与其特点是由浅入深,注重接口技术和应用。机电一体化是当今制造技术和产品发展的主要倾向,也是我国机电工业发展的必由之路。可以认为,它是用系统工程学的观点和方法,研究在机电系统和产品中如何将机械、计算机、信息处理和自动控制技术综合应用,以求机电系统和产品达到最佳的组合。机电一体化产品所需要的是嵌入式微机,而单片机具有体积小、集成度高、功能强等特点,适于嵌入式应用。智能仪器、家用电器、数控机床、工业控制等机电设备和产品中竟相使用单片机。 第2章 工作原理和设计思路及方案 2.1 基本原理 本次课程设计用STC89C52作为主控器组成一个转速表。电机转速采用光电脉冲传感器来测量,通过设置定时器/计数器T0为1S,设置定时器/计数器T1为计数器对光电传感器传过来的脉冲进行计数,电动机测速采用测周法,即每旋转一周产生一个脉冲,则设在1s内测量的脉冲个数为n,故测到转速n就是脉冲频率,再乘以60就是电动机的转速,单位为r/min。在此期间定时1s,在1s内允许中断,每中断一次,软件计数器加1,1s后,关闭中断,则软件计数器即为1s内的脉冲数,通过计数一定时间内通过定时器的脉冲数通过软硬件结合工作即可测出电机的转速。 2.2 设计思路 为了确定其设计方案,首先必须构思好初步的设计思路。根据设计要求和实验仿真条件,初步的设计思路可以总结如下: (1) 当前转速与电动机的状态显示用4段LED数码管。 (2) 键盘采用独立式键盘,需要3个键。 (3) 采样时间用定时/计数器0来实现。 (4) 用定时/计数器1来统计采样时间内的脉冲数,进而计算转速。 2.3 设计方案 根据设计要求和设计思路,可以确定该系统的设计方案,图1为该系统设计的硬件电路设计框图。硬件主要由三部分组成,即单片机、键盘、LED显示器。单片机采用STC89C52。要求测量的脉冲直接用另一个单片机产生提供。 在单片机中,定时功能既可以由硬件(定时/记数器)实现,也可通过软件定时实现。硬件定时是利用单片机内定时器定时,启动以后定时器可与CPU并行工作,不占用CPU时间,CPU有较高的工作效率。采用硬件定时和软件定时并用的方式,即用T0溢出中断功能实现50ms定时,通过软件延时程序实现1s定时。定时器的TMOD用于设置定时器/计数器的工作方式0~3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。硬件电路设计如图2.1所示。 图2.1 硬件电路设计 第3章 硬件电路设计 3.1按键设计电路图 对于按键电路的设计可以有2种方式:一种方式是直接按键设计,也称独立按键,这种设计电路适用于按键较少的控制,具有按键电路简单,编程方便等优点;另一种方式是矩阵式键盘的设计,它适用于对控制按键较多的电路控制, 占用较少的I/O接口,但是按键电路复杂,编程比较复杂。本课总共需要3按键,所以采用独立按键设计。设计图如3.1.1:由上到下的按键分别是复位、停止、启动。 图3.1. 按键电路 3.2 显示电路设计图 本课题所采用得是由LED(数码管)作为显示电路,用以显示由单片机所接收的脉冲转换来的BCD码,以及开始测速时的各种状态。硬件电路连接是单片机P0.0~P0.7接数码管的由A~G、DP 8个各管脚,P2.0~P2.3接数码管的控制端W4、W3、W2、W1采用共阳极连接的方法连接图如图3.2.1所示。 图3.2显示电路 3.3脉冲产生电路设计图 在实际做试验是由另一块单片机产生脉冲,在本次设计中我让另一块单片机输入1Hz频率的脉冲,并把脉冲接到现实的单片机的P3.5口进行计数。 图3.3 脉冲电路 第4章 软件设计 4.1主程序流程及说明 本次设计用T0做定时器定时时间为50ms 、T1作计数器,都设置为工作方式一。在主程序钟通过先重装初值,然后再检测按键,根据按键的状态和定时器的状态调用相应的子程序。程序流程如图4.1所示 图4.1主程序流程图 4. 2中断服务子程序 当定时器的50MS的定时时间到时,假如计数值大于20次就改变定时器的状态位并清定时器的计数值。 图4.2中断程序流程图 4.3键盘扫描程序 数字转速表的键盘操作应具有3个功能,即:启动、停止、复位。本次采用的是直接连接的独立式按键,在键盘扫描过程中必须解决以下问题:1、是否有键按下;2、是哪一个键按下;3是不是有抖动;4、按键是不是松开。故在程序应该注意以上问题,不然会产生问题,不能正确的对按键进行识别。图4.3为键盘流程图: 图4.3按键流程图 第5章 系统调试及软件仿真 5.1 程序调试 试验所涉及的2个软件Keil uVsion2和proteus,以下是仿真步骤。 程序调试部分:uVsion2先新建一个工程,选择芯片为AT89C52然后点击是,然后弹出是否加入标准启动文件,点击否,再新建一个文件,保存为“文件名.C”。然后点开工程窗口的Target右键单击出现弹出菜单,选择添加文件到工程,选到刚才新建的文件然后点击OK,输入程序,点击工程选择,选中Output中的Creat Hex File,然后编译,连接生成Hex文件,有错误修改后再编译链接。当编译结果中没出现错误时证明该程序已不存在语法错误。是否能完成课题所要求的功能则需要进行仿真。 仿真部分:运行proteus的ISIS后进入仿真界面将所需元件选择好,根据原理图画出仿真图,待仿真图换好后双击AT89C52导入Keil uVsion2所产生的后缀名为.HEX文件,按开始键进行仿真。 当输入脉冲为6HZ时输出为360rad/min。 5.2 硬件电路调试 硬件调试的步骤如下:接通电源和数据线,通过软件将在Keil uVsion2中生成的HEX文件下载到单片机板子上,先对板子关电当显示请上电时按下单片机上的电源开关按钮上电下载程序到单片机中,通过按键和LED的显示进行调试。 当程序下载完之后,按下电源开关,LED上显示初始状态,按下启动键显示接收数据的状态,按下停止键后显示当前所的数据,按下复位键则显示初始状态,关闭所有数码管,为全黑状态。 第6章 总结 实验表明,本系统的设计在功能上完全满足要求,说明设计是有效的。具体来说,键盘上的各键都有效果,且能实现其功能;显示器也完全能满足要求;转速的测量基本上无误差,之所以还存在很小的误差是因为在计算上计算误差。 总的来说,本设计是合理的,但应当指出的是此系统还可以采用其它更好的方案,从而达到更好的效果。譬如在软件方面,键盘扫描程序和LED显示子程序等,但为了便于快速看懂程序,本程序没有进行一些复杂的处理,而是注重彰显各个部分。另外,由于时间关系和能力的局限性,错误之处难免,还请老师体谅。下面是我的一些体会与建议。 通过两周的单片机课程设计的实习,在老师的指导下和自己的努力下,我成功地完成了数字转速表的设计,真正地感觉到在这段时间里受益良多,这主要表现在:一是对之前所学的理论知识得到了很大的巩固和提高;二是对单片机课程设计有了一个全面的认识,对单片机有关的设备仪器和软件的使用有了很深的认识;三是对硬件设计,特别是软件设计有了较强的掌握;四是进一步培养了自己的思维,提高了动手能力和创新能力。 尽管在此之前,我已经做过不少专业课的课程设计,但这一次与前面的设计有很大的不同,其中最大的不同是,系统设计好后需在实验室调试,调试的成功与否具有直接否决权,而这一过程恰恰是我们最不敢面对的,也是最具有难度的。这一过程能够考验我们设计的系统,同时也能真正地考察我们对这门课程的应用能力。因此,突出这一环节的重要性,是完全正确的。在实验室调试过程中,我不断发现问题和解决问题。重点解决了键盘输入、调用显示和设计程序计算等问题。 总之,本次设计的收获是以往任何课程设计无法相比的。因为这次课程设计是真正意义上的课程设计,在形式上更具有实际意义。另外老师也非常负责。在这里向老师表示真心的感谢。 参考文献 [1] 周向红,刘国繁.51系列单片机应用与实践教程. 北京航空航天大学 出版社, 2008 [2] 王迎旭.单片机原理及应用.机械工业出版社,2010 [3] 张毅刚.新编MCS-51单片机应用设计,哈尔滨工业大学出版社, 2003 [4] 何立民.编单片机应用系统设计.北航出版社,2000 [5] 求是科技.8051系列单片机C程序设计完全手册人民邮电出版社, 2006 附录A 系统原理图: 附录B 程序清单: #include //头文件 #define uchar unsigned char //宏定义 #define uint unsigned int //宏定义 uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳数码管代码 0-F uint Count=0; //定时器中断的次数 uint Key_State,T_State; //定义键的状态和定时器的状态 int second=0; //定时器1在1S内计数的次数 sbit Stop=P3^0; //停止 sbit Reset=P3^1; //复位 sbit key=P3^2; //启动 void delay(uint ms) //延时子程序 { uint i; while(ms--) for(i=0;i<120;i++); } void Display() //显示子程序 { P2=0xFE; //显示个位 P0=Tab[second%10]; delay(5); P2=0xFD; //显示十位 P0=Tab[second%100/10]; delay(5); P2=0xFB; //显示百位 P0=Tab[second%1000/100]; delay(5); P2=0xF7; //显示千位 P0=Tab[second/1000]; delay(5); } void Scan_Key() //键盘扫描子程序 { if(key==0) //启动功能键被按下 { delay(10); //去抖 if(key==0) //启动键被按下 { if(Key_State==0|Key_State==3)//假如键状态为0或3 { TR0=1; //开启定时器/计数器0 TR1=1; //开启定时器/计数器1 Key_State=1; //把键状态设为1 } while(!key); //等待启动键释放 } } if(Stop==0) //复位键被按下 { delay(10); //延时去抖 if(Stop==0) //停止键被按下 { if(Key_State!=2) //键状态不为2 { Key_State=2; //状态设为2 TR0=0; //关闭定时器/计数器0 TR1=0; //关闭定时器/计数器1 } while(!Stop); //等待复位键释放 } } if(Reset==0) //停止键被按下 { delay(10); //延时去抖 if(Reset==0) //停止键确实被按下 { if(Key_State!=3) //键状态为不3 { Key_State=3; //键状态设为3 TR0=0; //关闭定时器/计数器0 TR1=0; //关闭定时器/计数器1 } while(!Reset); //等待停止键释放 } } } void main() //主函数 { TMOD=0x51; //定时器 1和0 都工作在方式1 TH0=(65536-50000)/256; //定时器0装入初值 TL0=(65536-50000)%256; TH1=0; //定时器1装入初值 TL1=0; EA=1; //开放总中断 ET0=1; //开放定时器/计数器0中断 ET1=1; //开放定时器/计数器1中断 TR0=0; //关闭定时器/计数器0 TR1=0; //关闭定时器/计数器1 P2=0xff; //关闭数码显示管 while(1) { Scan_Key(); //调用键盘扫描子程序 if(T_State==1&&Key_State==1)//键状态为1且定时器状态为1 { T_State=0; //把定时器状态清0 second=(TH1*256+TL1)*60;//计算转速 TH1=0; //清计数器 TL1=0; } if(Key_State==1|Key_State==2)//键状态为1或2 Display(); //调用显示子程序 if(Key_State==3) //键状态为3 P2=0XFF; //关闭显示 } } void T0timer() interrupt 1 //定时器0用于定时 { TH0=(65536-50000)/256; //重装初值 TL0=(65536-50000)%256; Count++; //计数值加1 if(Count>=20) //计数值到了20次,即1S就清0, 并把定时器状态设为1 { Count=0; T_State=1; } } void T1timer() interrupt 3 //定时器1用于计数 { TH1=0; //重装初值 TL1=0; } PAGE 1 _1369597509.vsd � � � 开始 设置T0、T1工作方式,装入初值、关闭各位数码管 T_State==1&& Key_State==1? 键盘扫描 是否有键按下 T_state==0、计算、计数器清零 Key_State==1| Key_State==2? 关闭显示器 调用显示子程序 No Yes Yes Yes No No _1369597926.vsd � � 定时器0中断 重装初值,计数初值Count加1 Count>=20? Count==0, T_Sate==1 中断返回 Yes No _1369598614.vsd � � 是否有键闭合 延时去抖 是否有键闭合 闭合键是否释放 相应处理 _1369595743.vsd � STC89C52 复位电路 时钟电路 LED显示电路 按键电路
/
本文档为【单片机数字转速表设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索