51单片机的智能光电转速计设计
51单片机测电机转速LCD显示

主程序* 文件名称: Jiuzhouxuese.c 转速计的设计(LCD显示)的主程序* 原理: T1计数,T0计时,电动机每转动一周产生16个脉冲,T1采集一分钟内的脉冲数,后即可计算出转速* 版本信息: 2011-10-23---------------------------------------------------------------*/#include "LCD1602.h"#include<reg51.h>#define uint unsigned int#define uchar unsigned charbit flag; //计满1秒钟标志位uchar count=100; //储存定时器T0中断次数uint Speed; //储存电机转速uchar DispBuffer[4];//存放转换成液晶显示字符(ASCII)的数组/*------------------------------------------------------------功能:主函数说明:使用晶振为12MHz的芯片,定时0.01秒。
计时器初值为C=65536-0.01/10^(-6)=0D8F0H---------------------------------------------------------------*/void main(void){TMOD=0x51;//T1工作于计数模式1,T0工作于计时模式1;TH0=0xd8; //定时器T0赋初值TL0=0xf0;EA=1; //开总中断ET0=1; //定时器T0中断允许TR0=1; //启动定时器T0while(1){TR1=1; //计数T1启动TH1=0; //计数T1高8位赋初值0TL1=0; //计数T1低8位赋初值0flag=0; //时间还未满1秒钟while(flag==0) //时间未满等待Speed=(TH1*256+TL1)*60/16; //计算速度,每周产生16个脉冲}}/*-------------------------------------------------------------函数功能:定时器T0的中断服务函数--------------------------------------------------------------*/void Time0(void ) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器{count--; //T0每中断1次,count减1LCD_Initial();//液晶初始化if(count%4==0){DispBuffer[0]=Speed/1000+0x30; //将显示数据并分解出千位转换成ASCII码}if (count%4==1){DispBuffer[1]=Speed%1000/100+0x30;//将显示数据并分解出百位转换成ASCII码}if(count%4==2){DispBuffer[2]=Speed%100/10+0x30;//将显示数据并分解出十位转换成ASCII码}if(count%4==3){ DispBuffer[3]=Speed%10+0x30 ; // 将显示数据并分解出个位转换成ASCII码}LCD_Prints(1,0,DispBuffer);//LCD显示数据while(0);if(count==0) //若累计满100次,即计满1秒钟{flag=1; //计满1秒钟标志位置1count=100; //清0,重新统计中断次数}TH0=0xf0; //定时器T0重新赋初值TL0=0xd8;}LCM1602驱动程序/************************************* *************************************File Name: LCD1602.hAuthor: JiuzhouxunseCreated: 2011/10/23************************************* ************************************* */#ifndef _LCD_1602_H#define _LCD_1602_H#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char定义接口************************************* sbit LcdRs = P2^0;sbit LcdRw = P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//内部等待函数************************************* ************************************* unsigned char LCD_Wait(void){LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();//while(DBPort&0x80),在用Proteus仿真时,屏蔽此语句,否则会进入死循环!LcdEn=0;return DBPort;//向LCD写入命令或数据************************************* ***********************#define LCD_COMMAND 0 // 命令#define LCD_DATA 1 // 数据#define LCD_CLEAR_SCREEN 0x01// 清屏#define LCD_HOMING 0x02 // 光标返回原点void LCD_Write(bit style, unsigned char input){LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();//注意顺序LcdEn=1; _nop_();//注意顺序LcdEn=0; _nop_();LCD_Wait();}//设置显示模式************************************* ***********************#define LCD_SHOW 0x04 //显示开#define LCD_HIDE 0x00 //显示关#define LCD_CURSOR 0x02 //显示光标#define LCD_NO_CURSOR 0x00 //无光标#define LCD_FLASH 0x01 //光标闪动#define LCD_NO_FLASH 0x00 //光标不闪动void LCD_SetDisplay(unsigned char DisplayMode){LCD_Write(LCD_COMMAND,0x08|DisplayMode);}//设置输入模式************************************* ***********************#define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00// 为缺省设置#define LCD_MOVE 0x01 // 画面可平移#define LCD_NO_MOVE 0x00//画面不可平移void LCD_SetInput(unsigned char InputMode){LCD_Write(LCD_COMMAND,0x04|InputMode);}//初始化LCD********************************* ***************************void LCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);//此句不能省LCD_SetDisplay(LCD_SHOW|LCD_NO _CURSOR); //开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CL EAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_ MOVE); //AC递增, 画面不动}//************************************ ************************************ void LCD_Pos(unsigned char x, unsignedchar y){if(y==0)LCD_Write(LCD_COMMAND,0x80|x); if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0 x40));}void LCD_Prints(uchar x,uchar y, unsigned char *str){while(*str!='\0'){LCD_Write(LCD_DATA,*str);str++;}}Proteus仿真图。
基于51单片机的直流电机转速测控系统设计

基于51单片机的直流电机转速测控系统设计0 引言目前使用的电机模拟控制电路都比较复杂,测量范围与精度不能兼顾,且采样时间较长,难以测得瞬时转速。
本文介绍的电机控制系统利用PWM 控制原理,同时结合霍尔传感器来采集电机转速,并经单片机检测后在显示器上显示出转速值,而单片机则根据传感器输出的脉冲信号来分析转速的过程量,并超限自动报警。
本系统同时设置有按键操作仪表,可用于调节电机的转速。
1 系统方案的制定直流电机控制系统主要是以C8051 单片机为核心组成的控制系统,本系统中的电机转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此,由MCU 内部的可编程计数器阵列输出PWM 波,以调整电机两端电压与控制波形的占空比,从而实现调速。
本系统通过霍尔传感器来实现对直流电机转速的实时监测。
系统的设计任务包括硬件和软件两大部分,其中硬件设计包括方案选定、电路原理图设计、PCB 绘制、线路调试:软件设计包括内存空间的分配,直流电机控制应用程序模块的设计,程序调试、软件仿真等。
2 硬件设计C8051 是完全集成的混合信号系统级MCU 芯片,具有64 个数字I/O 引脚,片内含有VDD 监视器、看门狗定时器和时钟振荡器,是真正能独立工作的片上系统,并能快捷准确地完成信号采集和调节。
同时也方便软件编程、干扰防制、以及前向通道的结构优化。
本单片机控制系统与外部连接可实时接收到外部信号,以进行对外部设备的控制,这种闭环系统可以较准确的实现设计要求,从而制定出一个合理的方案,图1 所示是电机测控系统框图。
本系统先由单片机发出控制信号给驱动电机,同时通过传感器检测电机的转速信号并传送给单片机,单片机再通过软件将测速信号与给定转速进行比较,从而决定电机转速,同时将当前电机转速值送LED 显示。
此外,也可以通过。
基于51单片机和霍尔开关传感器的转速测量仪

基于51单片机和霍尔传感器的转速测量仪摘要系统由传感器、信号处理、系统软件等部分组成。
传感器采用霍尔开关传感器(JK8002C),负责将转速转化为脉冲信号;信号处理电路(反相器74LS14)包含待测信号整形反相等部分,波形变换和波形整形电路实现把正负交变的信号波形变换成可被单片机接受的TTL/CMOS兼容信号。
处理器采用51单片机,显示器采用单片机开发板自带的8位LED数码管动态显示。
课题背景在工农业生产和工程实践中,经常会遇到各种需要测量转速的场合,测量转速的方法分为模拟式和数字式两种。
模拟式采用测速发电机为检测元件,得到的信号是模拟量,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难。
数字式通常采用光电编码器、圆光栅、霍尔元件等为检测元件,得到的信号是脉冲信号。
单片机技术的日新月异,特别是高性能价格比的单片机的出现,转速测量普遍采用以单片机为核心的数字式测量方法,使得许多控制功能及算法可以采用软件技术来完成。
采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率。
本课题,是要利用霍尔传感器来测量转速。
由磁场的变化来使霍尔传感器产生脉冲,由单片机计数,经过数据计算转化成所测转速,再由数码管显示出来。
1.硬件部分概述1.1系统组成框图系统框图原理如图1-1所示,系统由传感器、信号处理、数码管显示、蜂鸣器超速报警和系统软件等部分组成。
传感器采用霍尔开关传感器(JK8002C),负责将转速转化为脉冲信号。
信号处理电路反相器74LS14)包含待测信号波形变换、波形整形等部分,波形变换和波形整形电路实现把正负交变的信号波形变换成可被单片机接受的TTL/CMOS 兼容信号。
处理器采用51单片机,显示器采用8位LED 数码管动态显示。
1.2霍尔传感器测转速原理及特性霍尔传感器是对磁敏感的传感元件,由磁钢、霍耳元件等组成。
测量系统的转速传感器选用SiKO 的 jk8002c 的霍尔传感器,其响应频率为100KHz ,额定电压为5-30(V )、检测距离为10(mm )。
基于51单片机的直流电机转速测控系统设计

基于51单片机的直流电机转速测控系统设计—内容提要:随着现代科技的不断发展,现在的电子产品越来越多,在早期,电子产品一般是纯硬件电路,没有使用单片机,电路复杂难以设计,也难以检查问题,随着微控制技术的不断完善和发展,集成芯片越来越多,单片机便出来了,换言之,单片机的应用是对传统控制技术的一场革命。
具有划时代的意义。
在电机控制方面也是靠人的感觉,没有侧速和侧距的概念,以前人机界面一般采用LED数码二极管,随着LCD液晶显示器的出现,人机界面更加人性化、智能化,它能显示数字、汉字和图象,控制LCD液晶显示器也很方便,电路设计也比较简单;加上单片机,组合实现的功能也比较强大,还可方便以后电路的升级与扩展。
本文结合LCD显示、电机控速、红外侧距、键盘操作等多种技术,实现了基于51单片机的电机转速测量控制系统的设计。
本文从第二章方案论证与选择开始,就阐述了该系统的基本工作原理、所采用的相关技术等,进而交代了电机转速测量控制的实现方法。
最后重点阐述了LCD液晶显示和案键部分。
该设计经过测试,实现了在LCD上的菜单多级滚动显示,达到预期的设计效果。
基于该系统在LCD上实现菜单控制系统在电路图设计比较方便,主要分为四部分,电源部分、安键部分、LCD显示部分和控制部分;较复杂的是在控制软件部分,软件控制部分分为三部分,一部分是安键判断部分、菜单控制部分和显示部分。
关键词:单片机电机液晶显示器按键红外元件目录一、引言 4二、方案论证 4(一)基于嵌入式单片机的设计方案 4(二)基于EDA为核心的设计方案 5(三)方案选择 5三.结构设计 5(一)CPU控制模块 6(二)键盘模块7(三)LCD液晶显示模块7(四)电源模块8(五)红外侧距模块9(六)PWM电机控制模块9四、各硬件模块设计9(一)电源设计9(二)键盘设计10(三)LCD液晶显示设计11(四)CPU硬件设计13(五)时钟模块15(六)红外测速模块15(七)电机模块16五、软件设计17(一)初始化和主程序模块17(二)按键模块19(三)显示部分21(四)电机程序设计说明35六、测试报告35七、总结38八、附录38参考文献591 引言直流电机监控系统是机电产品中的重要环节,其控制性能反映了机电设备的控制质量。
C51单片机在电机转速测量仿真系统中的设计

C51 单片机在电机转速测量仿真系统中的设计单片机电机转速测量系统仿真系统采用单片机中T1 计数器对转速脉冲进行计数。
定时器T1 工作于外部事件计数方式,对转速脉冲计数; T0 工作于定时器方式。
每到1 s 读1 次计数值,此值即为脉冲信号的频率,根据式(1)可计算出电机的转速。
转速检测装置的软件系统主要包括:测速主程序、数据处理子程序和显示子程序。
单片机上电后,系统进入准备状态。
首先进行初始化,然后读取脉冲数据进行运算,将转速显示在LCD 上。
需要这款仿真及C 语言程序的爱好者可从文章配图左上角网址上了解。
该单片机电机转速测量系统仿真仿真采用测频法“M法”测量电机转速。
即在一定测量时间T 内,测量脉冲发生器(替代输入脉冲)产生的脉冲数m1 来测量转速,计算式如下:n=60m/TP,式中:P-为转轴转一周脉冲发生器产生的脉冲数;n-转速单位:(转/分);T-定时时间单位:(秒)。
在该方法中,测量精度是由于定时时间T 和脉冲不能保证严格同步,以及在T 内能否正好测量外部脉冲的完整的周期,可能产生的1 个脉冲的量化误差。
因此,为了提高测量精度,T 要有足够长的时间。
定时时间可根据测量对象情况预先设置。
设置的时间过长,可以提高精度,但在转速较快的情况下,所计的脉冲数增大(码盘孔数已定情况下),限制了转速测量的量程。
而设置的时间过短,测量精度会受到一定的影响。
转速部分软件设计思路:AT89S52 单片机的P3.5 口接收传感器的信号。
电路由显示电路、AT89S52 单片机,单片机时钟电路,复位电路,等组成。
中断服务程序INT0,软件需要解决的是定时器T0 的记数和外部计数器T1 的协调工作。
由于测量的转速范围大,所以低速和高速都要考虑在内,软件工作流程:传感器检测出电机转动一转的脉冲数,由单片机的P3.5 端口送入单片机,由单片机的内部计数器T1 计数,启动计数时,发送一个信号TR0=1,内部定时器T0 开始时,TH0、TL0 设定初值为0。
【精品】毕业设计-基于51单片机的转速测量系统设计

Keywordsmonolithic integrated circuits;speedsmeasure;Hall element
第
1.1
随着超大规模集成电路技术提高,尤其是单片机应用技术以其功能强大,价格低廉的显著特点,使全数字化测量转速系统得以广泛应用。由于单片机在测量转速方面具有体积小、性能强、成本低的特点,越来越受到企业用户的青睐。转速是工程中应用非常广泛的一个参数,其测量方法较多,而模拟量的采集和模拟处理一直是转速测量的主要方法,这种测量方技术已不能适应现代科技发展的要求,在测量范围和测量精度上,已不能满足大多数系统的使用。随着大规模及超大规模集成电路技术的发展,数字系统测量得到普遍应用,特别是单片机对脉冲数字信号的强大处理能力,使得全数字量系统越来越普及,其转速测量系统也可以用全数字化处理。在测量范围和测量精度方面都有极大的提高。
电式转速表测量。用这种方法测量时,既要在发动机转动轴上粘贴光标纸,又要求测量人员把转速表与光标纸的距离控制在很近的范围,测量十分不方便。随着科学技术的迅速发展,转速测量仪表已步入现代化、电子化的行列。过去曾经使用过的接触式测量仪表,如离心式转速表、磁性转速表、微型发电机转速表及钟表是定时转速表,均已先后受到冷落;而利用已知频率的闪光与被测轴转速同步的方法来测速的闪光测速仪,虽属非接触式仪表,目前仍有应用,但也退居次要地位。代之而起的是非接触式的电子与数字化的测速仪表。这类转速仪表大多具有体积小、重量轻、读数准确、使用方便等优点,容易实现电脑荧屏显示和打印输出,能够连续的反映转速变化,既能测定发动机稳定情况下的平均转速,也能够用来在足够小的时间间隔这一特定条件下测定发动机的瞬时转速。
基于51单片机测电机转速的设计

基于51单片机测电机转速的设计[摘要]:本课题设计了一种基于单片机的电子测速仪,测速仪以89C51为数据处理主控芯片。
测速仪的主要组成部分:霍尔传感器、以89C51芯片为核心的密码锁的数据处理与控制电路、输出显示电路。
另外系统还有LED报警灯,单片机复位电路等。
测速电路的关键问题是物理信号到电信号的转换,以及脉冲的产生、报警与复位。
同时该测速仪具有低能耗、体积小、使用方便,非接触等优点,具有很强的使用价值[关键词]:单片机;测速仪51 singlechip design of measurement of motor speed based onAbstract:This project is to design a kind of electronic measurement instrument based on single chip microcomputer, velocimetry using 89C51 as main control chip data processing.Main components: Holzer velocimetry sensors, taking the 89C51 chip as the corecryptographic data processing and control circuit, the lock output display circuit.Another system and LED warning lamp, microprocessor reset circuit etc.. The keyproblem of conversion speed measuring circuit is a physical signal to electrical signal,and the pulse generation, alarm and reset. At the same time, the instrument has theadvantages of low energy consumption, small volume, convenient use, non - contactand other advantages, has the very strong use valueKeywords:MCU; velocimetry目录第一章绪论 (3)1.1测速仪的背景与分类 (3)1.2测速仪的运用于发展 (3)1.3本设计的意义与要求.................................................. .1 第二章单片机测速仪的主要元件介绍.. (2)2.1单片机89c51的介绍 (2)2.2 霍尔元件的介绍 (5)2.3比较器LM393的介绍............................................................................. (6)第三章基于单片机测速的工作概述以及原理分析 (9)3.1基于单片机测速的工作概述 (9)3.2系统硬件总电路图............................................................................. .. (9)3.3检测电路模块............................................................................. (9)3.4复位电路模块 (10)3.5晶振电路模块 (11)3.6电源电路模块 (11)3.7显示电路模块............................................................................. (12)3.8报警电路模块............................................................................. (12)第四章单片机测速系统组成 (13)4.1转速测量系统原理框图 (13)4.2系统软件框图 (13)第五章系统软件设计 (14)5.1系统流程序 (14)5.1.1系统主程序流程图............................................................................. (14)5.1.2测速程序流............................................................................. . (15)5.1.3 显示流程图............................................................................. (16)5.2程序............................................................................. . (21)第六章单片机测速电路实物运行 (22)6.1实物整体图......................................................... .226.2 测速显示 (23)6.2.1转速显示............................................................................. (23)6.2.2低速报警显............................................................................. . (24)6.2.3高速报警显示............................................................................. (25)小结............................................................................. ............................................................................... . (26)致谢 (27)附录一单片机测速PCB原理图............................................................................. . (28)附录二单片机测速元器件清单............................................................................. .. (29)参考文献............................................................................. ............................................................................... . (30)第一章绪论1.1测速仪的分类目前测量电机转速的方法很多,按照不同的理论方法,先后产生过模拟测速法(如离心式转速表、用电机转矩或者电机电枢电动势计算所得)、同步测速法(如机械式或闪光式频闪测速仪)以及计数测速法。
基于51单片机的光电传感器转速计设计

#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned char/*----1602 Part------*/sbit RS = P2^4; //定义端口sbit RW = P2^5;sbit EN = P2^6;#define RS_CLR RS=0#define RS_SET RS=1#define RW_CLR RW=0#define RW_SET RW=1#define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0/*---------ISR Part-----------*/uint timer=0,timer1=0,PWM_timer=0;/*---------KEY Part-----------*/sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;char key1_flag=0,key2_flag=0,key3_flag=0;/*---------MOTOR Part-----------*/sbit PWM=P1^4;int pwm_num=5;char exchange_flag=0; //切换显示 minute or second/*---------REV Part-----------*/sbit REV_flag=P1^5;uint grating=0; //光栅数uchar ge_num=0,shi_num=0,bai_num=0,qian_num=0,tens_num=0,percentile_num=0;/*---------MAIN Part-----------*//*------------------------------------------------ T=tx2+5 uS------------------------------------------------*/ void DelayUs2x(unsigned char t){while(--t);}/*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是0~255 这里使用晶振12M,精确延时请使用汇编------------------------------------------------*/ void DelayMs(unsigned char t){while(t--){//大致延时1mSDelayUs2x(245);DelayUs2x(245);}}/*------------------------------------------------判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void){DataPort= 0xFF;RS_CLR;RW_SET;EN_CLR;_nop_();EN_SET;return (bit)(DataPort & 0x80);}/*------------------------------------------------写入命令函数------------------------------------------------*/ void LCD_Write_Com(unsigned char com){// while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_CLR;RW_CLR;EN_SET;DataPort= com;_nop_();EN_CLR;}/*------------------------------------------------写入数据函数------------------------------------------------*/void LCD_Write_Data(unsigned char Data){//while(LCD_Check_Busy()); //忙则等待DelayMs(5);RS_SET;RW_CLR;EN_SET;DataPort= Data;_nop_();EN_CLR;}/*------------------------------------------------清屏函数------------------------------------------------*/void LCD_Clear(void){LCD_Write_Com(0x01);DelayMs(5);}/*------------------------------------------------写入字符串函数------------------------------------------------*/void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) {if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}while (*s){LCD_Write_Data( *s);s ++;}}/*------------------------------------------------写入字符函数------------------------------------------------*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) {if (y == 0){LCD_Write_Com(0x80 + x);}else{LCD_Write_Com(0xC0 + x);}LCD_Write_Data( Data);}/*------------------------------------------------初始化函数------------------------------------------------*/void LCD_Init(void){LCD_Write_Com(0x38); /*显示模式设置*/DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);DelayMs(5);LCD_Write_Com(0x38);LCD_Write_Com(0x08); /*显示关闭*/LCD_Write_Com(0x01); /*显示清屏*/LCD_Write_Com(0x06); /*显示光标移动设置*/DelayMs(5);LCD_Write_Com(0x0C); /*显示开及光标设置*/}/*--------------KEY------------------*/void key(){if(!KEY1){DelayMs(10);if(!KEY1){pwm_num++;if(pwm_num>=19) pwm_num=19;while(!KEY1);}}if(!KEY2){DelayMs(10);if(!KEY2){pwm_num--;if(pwm_num<=1) pwm_num=1;while(!KEY2);}}if(!KEY3){DelayMs(5);if(!KEY3){exchange_flag=!exchange_flag;while(!KEY3);}}}/*-------------REV--------------*/unsigned char Trg;unsigned char Cont;void REVRead(){unsigned char ReadData = REV_flag^0xff; // 1Trg = ReadData & (ReadData ^ Cont); // 2Cont = ReadData; // 3 if(Trg==0x01){grating++; //记录光栅数目}}/*--------------ISR------------------*/ void ISR_init(){TMOD=0x01;TH0=(65536-1000)/256; //1msTL0=(65536-1000)%256;EA=1;ET0=1;TR0=1;}void T0_ISR()interrupt 1{TH0=(65536-1000)/256; //1msTL0=(65536-1000)%256;PWM_timer++;timer++;REVRead();if(PWM_timer==0){PWM = 1;}if(PWM_timer==pwm_num){PWM = 0;}if(PWM_timer==20){PWM = 1;PWM_timer =0;}if(timer==1) //1ms 扫描一次{timer1++;timer=0;}if(timer1==1000) //1000ms 计算一次光栅数量{if(exchange_flag==0){ge_num=grating/20%10; //20 plus per revshi_num=grating/20%1000/100 ;bai_num=grating/20%1000/100;qian_num=grating/20%10000/1000;tens_num=grating%20/10; //十分位percentile_num=grating%20%10; //百分位 }if(exchange_flag==1){grating=grating*60; //REV per secondge_num=grating/20%10; //20 plus per revshi_num=grating/20%1000/100 ;bai_num=grating/20%1000/100;qian_num=grating/20%10000/1000;tens_num=grating%20/10; //十分位percentile_num=grating%20%10; //百分位 }grating=0;timer1=0;}}/*------------------------------------------------主函数------------------------------------------------*/void main(void){ISR_init();LCD_Init();PWM = 0;LCD_Write_String(0,0,"THE REV IS:");while (1){//LCD_Clear();key();if(exchange_flag==0){LCD_Write_Char(1,1,qian_num+0x30);LCD_Write_Char(2,1,bai_num+0x30);LCD_Write_Char(3,1,shi_num+0x30);LCD_Write_Char(4,1,ge_num+0x30);LCD_Write_Char(5,1,'.');LCD_Write_Char(6,1,tens_num+0x30);LCD_Write_Char(7,1,percentile_num+0x30);LCD_Write_String(9,1,"rad/sec");}if(exchange_flag==1){LCD_Write_Char(1,1,qian_num+0x30);LCD_Write_Char(2,1,bai_num+0x30);LCD_Write_Char(3,1,shi_num+0x30);LCD_Write_Char(4,1,ge_num+0x30);LCD_Write_Char(5,1,'.');LCD_Write_Char(6,1,tens_num+0x30);LCD_Write_Char(7,1,percentile_num+0x30);LCD_Write_String(9,1,"rad/min");}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉理工大学华夏学院电子工程课程设计报告书课程名称智能电子小产品课程设计课程设计总评成绩学生姓名、学号万小志(10211807231)学生专业班级电子信息工程1072班指导教师姓名徐国成课程设计起止日期2010.06.21---2010.07.09智能电子小产品课程设计任务书学生姓名:万小志专业班级:电信1072班指导老师:徐国成工作单位:信息工程系一、课程的性质、目的与任务通过《电子小产品设计与实践》课程设计,使学生能够掌握电子小产品的开发过程、设计方法和电子系统的应用特点,使学生能够综合应用《单片机原理及应用》、《电子线路设计与测试》、《模拟电子技术基础》、《数字电子技术基础》等课程的知识。
要求学生经过课程设计的教学环节进一步理解电子小产品的结构和组成原理,掌握电子系统的基本设计方法,完成系统电路和应用程序的实践,从而使学生的电子线路设计能力、单片机机应用能力有较大提高。
二、课程设计内容及基本要求1.熟悉单片机最小系统及应用;2.结合任务要求,完成系统设计和调试,鼓励功能扩展和创新;3.根据设计的电路,用protel工具,画出完整的硬件电路图;4.熟悉C51语言,用C51完成系统的软件编程;光电转速计要求:1.设计完整的转速计智能产品;2.利用光电传感器采集数据;3.利用AT89C52作为MCU,处理数据,并显示转速。
扩展部分要求:1)使用LCD1602显示信息;2)扩展计算里程功能,计算产品运行的距离;3)扩展外部存储器EEPROM,记录总行程。
三、设计说明书要求课程设计说明书要求逻辑清晰、层次分明、书写整洁。
说明书格式包括标题(中英文)、提要、正文(包括①设计项目要求与说明。
②电路原理分析。
③软件流程分析。
④调试分析。
⑤实验数据分析。
⑥答辩。
⑦成绩评定。
)、附录(图纸.程序清单或软盘) 。
课程设计说明书须每人一份,独立完成。
四、图纸要求系统结构框图、protel工具画电路图五、说明本课程是学完电子技术和单片机原理及应用课程后的一门综合性,设计型课程设计。
要求学生能够进一步应用电子技术、熟悉单片机的工作原理,编程方法。
能独立的完成电子应用系统的设计、编程、及调试的全过程。
一、课程设计项目名称光电转速计二、项目设计目的及技术要求设计目的:1.熟悉掌握AT89C51系列单片微型计算机的工作原理;2.掌握利用MCU创建工程项目,并可用于实际项目;3.理解51系列单片机的信号采集,及其数据处理的过程;4.了解光电传感器的工作原理及其使用方法。
技术要求:1.光电转速计要求:1).设计完整的转速计智能产品;2).利用光电传感器采集数据;3).利用AT89C52作为MCU,处理数据,并显示转速。
2.扩展部分要求:4) .使用LCD1602显示信息;5) .扩展计算里程功能,计算产品运行的距离; 6) .扩展外部存储器EEPROM ,记录总行程。
3.报告要求:1).根据设计的电路,用protel 工具,画出完整的硬件电路图及PCB 板图; 2).熟悉C51语言,用C51完成系统的软件编程,完成交通灯的控制程序; 3).按要求撰写课程设计报告。
三、项目设计方案论证(可行性方案、最佳方案、软件程序、硬件电路原理图和PCB 图 )1.方案结构图:2.方案论证:信号采集模块单片机数据处理 (MCU )信息输出显示模块按键控制模块EEPROM 存储数据1)电源供电模块为使模块稳定工作,须有可靠电源。
我们考虑了两种电源方案方案一:采用独立的稳压电源。
此方案的优点是稳定可靠,且有各种成熟电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。
方案二:采用单片机控制模块提供电源。
改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。
综上所述,我们选择第二种方案。
2)信号采集模块该模块分为两个部分:光电传感器部分和光脉冲信号整形部分。
(1)光电传感器部分:方案一:选用单光束反射式红外光电传感器(ST188),其特点是:采用高发射功率红外光电二极管和高灵敏度光电晶体管组成;其检测距离为4--13mm。
如右上图为ST188封装实物图AK为发光二极管,EC为光敏三极管。
它具有很好的开关特性,使用于耦合电路,控制电路,及信号传递电路。
方案二:选用光敏电阻(P1201)作为光电传感器。
其特点是:采用硅光材料感光技术,光敏电阻的阻值与其光强具有很好的线性关系;其检测距离为:3mm--20mm 如右上图为P1201实物封装;其电阻值随光强的增加而减小。
光敏电阻广泛用于光源的检测,光照大小检测。
比较上述两种方案,利用光电对管ST188的开关特性,检测转盘转速比较容易实现,因此选择方案一。
(2)光脉冲信号整形部分:方案一:经电压比较器LM311,对光脉冲信号进行整形,得到一个较好的脉冲信号,在经过施密特触发器进行二次整形,以便于单片机识别信号。
另外,加一个电容进行滤波。
方案二:经电压比较器LM393,对光脉冲信号进行整形,再由两个与非门74LS00构成的RS触发器对信号进行滤波及二次整形。
对比两种方案,方案一较为经济,且实现方便,因此选择方案一。
3)按键控制模块按键是输入设备,是人为控制的关键因素。
方案一:利用矩阵按键,有多按键,输入方便,控制简单。
但矩阵按键浪费CPU时间,影响工作效率。
方案二:普通单排按键,CPU扫描简便,效率较高,且易于控制。
效率较矩阵按键有明显提高。
方案三:只用一个按键,利用其复用,可实现一个按键控制多个功能。
效率高实现方便。
使用一个按键方便用户控制,且节约成本。
因此选择方案三。
4)EEPROM数据存储模块显示里程需要记录数据,89C51系列片内没有EEPROM,因此,需要外接EEPROM。
方案一:选用并行EEPROM(2804),4K内存的EEPROM。
并行EEPROM写入数据及读出数据速度快,但其可擦写次数少,不宜用于记录里程。
方案二:选用串行EEPROM(AT24C02),2K内存的EEPROM。
串行EEPROM使用的是总线技术,单片机模拟总线方式,可实现对串行EEPROM的读写操作。
AT24C02可擦写次数达10万次左右,可用于更新数据快的产品。
综合上述两种方案,选择价格较低的串行EEPROM(AT24C02),较为合适。
5)信息输出显示模块显示模块是输出设备,是人机交互的重要环节。
方案一:选用开发板上的串行LED显示转速及里程,四位数码管显示的数据制约性比较大,无法实现显示多个信息。
方案二:选用LCD1602显示信息,LCD1602可显示2*16个字符。
极大地满足了多信息输出的需要。
综合上述两种方案,因此选择方案二的LCD1602进行信息输出。
综合以上,论证的个模块方案。
进行系统电路的搭建,及程序的编写和实现!3.硬件电路:根据以上方案的论证。
突出系统电路原理图,见附录一!4.程序流程:该产品系统程序分为四个部分:LCD驱动,EEPROM驱动,初始化,定时器及中断采样!各个部分详细程序流程图如下所示:LCD 初始化显示题目显示姓名显示转速读EEPROM显示里程数据清零改变显示方式按键按下长按定时器初始化关总中断 停止T0 送初值显示转速 数据清零关总中断 读取时间值中断返回存储数据 开总中断Timej=2000Sh=0开始T0开总中断 显示速度中断返回Sj++,si=8四、项目设计结果分析(分析试验过程中获得的数据、波形、现象或问题的正确性和必然性,分析产生不正确结果的原因和处理方法)1 系统调试(1).LCD显示初始化测试搭建完成LCD1602,下载程序,调试结果。
在LCD上从左到右显示“DAN PIAN JI KE SHE !”“GUANG DIAN ZHUAN SU JI!”显示完毕后清屏。
接着从左到右依次显示姓名学号!然后显示出示的转速及里程。
初始化完毕!(2).AT24C02读写的测试连接AT24C02到电路上,下载程序,调试结果。
先向A T24C02中写入数据123456,掉电后读取AT24C02内存的数据,并在里程中显示,得到结果12.3456。
调试完成(3).按键功能测试以上部分调试完成后,测试按键功能,按下按键切换显示的状态。
可在转速及速度中循环转换显示。
若长按按键,转速及里程数据清空。
功能实现则调试完成!(4).系统测试连接电路,下载程序,单片机上电,进行系统测试!初始化完成后,光电对管对检测盘进行检测,引入INT1引脚中,进行信号采集及其处理,显示转速信息,存储里程信息并显示。
用按键控制显示方式,切换显示转速及速度。
长按清空所有存储数据。
系统测试完成!2 实验结果分析运行程序,LCD上显示转速和里程或速度和里程。
调节调速电位计,电机转速发生变化,并在LCD上显示相对应的转速或速度。
长按控制按钮,将里程数据清零,使遮光板转动进行检测。
由于遮光板有八条反射板,因此每接收八个光脉冲信号,里程将自动加1.57M,并加以显示。
没接收两个光脉冲信号,读取之间的时间值为int_tp ms。
因此可以计算出相应的速度值和转速值!3 元件清单元件型号数量价格LCD1602 JHD162A 1个15元光电对管ST188 1个3元电压比较器LM311 1个1元施密特触发器CD40106 1个0.5元EEPROM AT24C02 1个2元电阻180,10K 10个0.1元总成本:22.5元预计价值:20万五、参考文摘(相关文摘不少于5篇,记录每篇文献的作者姓名.文献名称.文献发行城市:文献出版社,出版年;文献内容摘要, 每篇不少于100字)[1] 楼然苗等51 系列单片机设计实例北京航空航天出版社,2003.3本书是为希望掌握单片机设计应用技术的电子爱好者而编著的。
除简要地介绍51系列单片机的硬件资源及指令外,本书重点列举了13个实际应用设计实例。
文中对实例的硬件电路原理、软件设计的思路及功能模块进行了详细的介绍,并给出了完整的源程序及注释,这对单片机初学者迅速理解单片机的设计应用原理具有很好的效果。
读者可以参考书中给出的硬件电路及源程序进行实验设计练习,从而逐步掌握具体应用系统的设计方法。
[2] 唐俊翟等单片机原理与应用冶金工业出版社,2003.9本书详细讲解了NCS-51单片机的原理及应用。
全书共11章,内容包括单片机概述,硬件结构,指令系统及程序设计,定时器/计数器,中断系统,串行通信,扩展存储器技术,I/O口扩展设计,与键盘、显示器、打印机的接口,与A/D、D/A转换器的接口等,最后还介绍了应用系统设计,并以实例的形式加以说明。
[3] 刘瑞新等单片机原理及应用教程机械工业出版社,2003.7本书详尽地介绍了MCS—51系列单片机的硬件结构、指令系统及编程、内部功能及接口、系统外部功能的扩展、单片机系统开发及应用实例,最后介绍了新型串行总线接口芯片、其他单片机类型及选购。