版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、设计题目:基于51单片机的自行车测速系统protues仿真2、设计工具:keil C51v612中文完全版proteus7.53、设计要求:3.1 编程要求:主程序利用 C 语言编写。 3.2 实现功能:AT89C51单片机一个测量电动车车速的系统仿真,1602液晶显示。 实验现象:用霍尔传感器,在车轮上固定一个小磁铁,旁边安装一个霍尔传感器,车轮每转一周,经过一次霍尔传感器,产生一个脉冲,将脉冲接到中断0上(仿真中采用一个数字码盘代替),开启定时器0计时,这样就可以计算自行车路程和速度了。经单片机处理后把自行车时速显示在1602液晶显示屏上。3.3设计原理框图4、设计相关知识:4.1 硬
2、件设计4.1.1 AT89C51简介AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM) ,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。4.1.2 主要性能参数: 与MCS-51产品指令系统完全兼容 4k字节可重擦写Flash闪速存储器 1000次擦写周期 全静态操作:0Hz24
3、MHz 三级加密程序存储器 1288字节内部RAM 32个可编程IO口线 2个16位定时计数器 6个中断源 可编程串行UART通道 低功耗空闲和掉电模式4.1.3 功能特性概述: AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部 RAM,32 个 IO 口线,两个 16位定时计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止
4、其它所有部件工作直到下一个硬件复位。结构框图如图4-1:结构框图4-14.1.4引脚功能说明:引脚如下图4-2引脚图4-2VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被
5、外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号
6、。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口
7、同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态
8、ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。4.1.5 振荡器特性: XTAL1和XTAL
9、2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4.1.6 LCD显示器工作原理:液晶显示原理液晶显示的原理是利用液晶的物理特性, 通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。液晶显示器的分类液晶显示的分类方法有很多种
10、,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。液晶显示器各种图形的显示原理:线段的显示点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定
11、,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字
12、符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。汉字的显示汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5右边为2、4、6根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节直到32B显示完就可以LCD上得到一个完整汉字。1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母
13、、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:1602LCD主要技术参数: 显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表4-3所示:编号符号引脚说明编号符号引脚说明1VSS
14、电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极引脚接口说明表4-3第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共
15、同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。 10823 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表4-4所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00 00 0 001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7
16、置字符发生存贮器地址000 1字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容控制命令表4-41602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关
17、控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电
18、平表示不忙。 指令10:写数据。 指令11:读数据。本设计所使用的1602液晶显示屏与HD44780相兼容的芯片时序表4-5如下:读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无 基本操作时序表4-5读写操作时序如下图4-6和4-7所示:读操作时序4-6写操作时序4-7硬件原理图1602液晶显示模块可以和单片机AT89C51直接接口,电路如图4-8所示。图4-8 硬件原理图1602的驱动程序11条指令
19、,(1)void Clear_display(); /清显示屏指令(2)void Return_home(); /光标归位指令(3)void Entry_mode_set(); /输入模式设置指令(4)void Display_on_or_off(); /显示屏的开关控制指令(5)void Cursor_or_Display_shift(); /设定显示屏或光标移动方向指令(6)void Function_set(); /功能设定指令(7)void Set_character_address(); /设定CGRAM地址指令(8)void Set_display_address(); /设定DD
20、RAM地址指令(9)void Read_busy_flag(); /读取忙信号或AC地址指令(10)void Write_data(); /将数据写入DDRAM或CGRAM指令(11)void Read_data(); /从CGRAM或DDRAM读出数据的指令4.2 软件应用:4.2.1 Proteus:Proteus软件是来自英国Labcenter Electronics公司的EDA工具软件,Proteus软件除了其具有和其它EDA工具一样的原理布图,PCB自动或人工布线及电路仿真的功能外, 其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,
21、并实现软件源码级的实时调试,如有显示及输出, 还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器,逻辑分析仪等, Proteus建立了完备的电子设计开发环境!Proteus 是目前最好的模拟单片机外围器件的工具,它 可以仿真 51 系列、AVR,PIC 等常用的 MCU 及其外围电路 (如 LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分 SPI 器件,部分 IIC 器件)。当然,软件仿真精度有限,而且不可能所有的器件都找得 到相应的仿真模型,用开发板和仿真器当然是最好选择,可是 对于单片机爱好者,或者简单的开发应该是比较好的选择。Proteus 与其它单片机仿真软件不同
22、的是,它不仅能仿真 单片机 CPU 的工作情况,也能仿真单片机外围电路或没有单片 机参与的其它电路的工作情况。因此在仿真和程序调试时,关 心的不再是某些语句执行时单片机寄存器和存储器内容的改 变,而是从工程的角度直接看程序运行和电路工作的过程和结 果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和 工程应用间脱节的矛盾和现象。proteus 的工作过程运行 proteus 的 ISIS 程序后,进入该仿真软件的主界面。 在工作前,要设置 view 菜单下的捕捉对齐和 system 下的颜色、图形界面大小等项目。通过工具栏中的 p(从库中选择元件命令)命令,在 pick devices 窗口
23、中选择电路所需的元件,放置元件并调整其相对位置,元件参数设置,元器件间连线,编写程序;在 source 菜单的 Define code generation tools 菜单命 令下,选择程序编译的工具、路径、扩展名等项目;在 source 菜单的 Add/remove source files 命令下,加入单片机硬件电路的对应程序;通过 debug 菜单的相应命令仿真程序和电路的 运行情况。Proteus 软件所提供了30多个元件库,数千种元件。元 件涉及到数字和模拟、交流和直流等。 4.2.2 Keil C51开发系统基本知识:Keil C51是美国Keil Software公司出品的51
24、系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。C51工具包的整体结构,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开
25、发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。4.2.3 应用:首先用Keil编写主程序“.C”文件,再用keil转换成“.hex”文件,再打开proteus7.5,画单片
26、机仿真图,画好后鼠标右击图中的51单片机选择“编辑属性”,在Program File中载入之前的“.hex”文件,再点击“调试”中的“开始”或点击软件左下角的“”,即仿真开始运行。5、主程序及注解: #include d:c51reg51.h#include d:c51intrins.hsbit LCM_RS=P30;sbit LCM_RW=P31;sbit LCM_EN=P37;#define BUSY 0x80 /常量定义#define DATAPORT P1#define uchar unsigned char#define uint unsigned int#define L50uch
27、ar str016,str116,count;uint speed;unsigned long time;void ddelay(uint);void lcd_wait(void);void display();void initLCM();void WriteCommandLCM(uchar WCLCM,uchar BusyC);void STR();void account();/*延时K*1ms,12.000mhz*/void int0_isr(void) interrupt 0 /*遥控使用外部中断0,接P3.2口*/ unsigned int temp;time=count; TR0
28、=0;temp=TH0;temp=(temp 8) | TL0); TH0=0x3c; TL0=0xaf;count=0; TR0=1;time=time*50000+temp;void time0_isr(void) interrupt 1 /*遥控使用定时计数器1 */ TH0 =0x3c; TL0 =0xaf; count+;void main(void) TMOD=0x01; /*TMOD T0选用方式1(16位定时) */ IP|=0x01; /*INT0 中断优先*/ TCON|=0x11; /*TCON EX0下降沿触发,启动T0*/ IE|=0x83; TH0=0x3c; TL
29、0=0xaf; initLCM(); WriteCommandLCM(0x01,1); /清显示屏for(;)account();display();void account()unsigned long a; if (time!=0)a=L*/time;speed=a;void STR()str00=S;str01=p;str02=e; str03=e;str04=d;str05= ;str06=(speed%)/10000+0x30;str07=(speed%10000)/1000+0x30;str08=(speed%1000)/100+0x30;str09=.;str010=(speed
30、%100)/10+0x30;str011=speed%10+0x30;str012=k;str013=m;str014=/;str015=h;void ddelay(uint k) uint i,j; for(i=0;ik;i+) for(j=0;j60;j+) ; /*写指令到LCD子函数*/void WriteCommandLCM(uchar WCLCM,uchar BusyC) if(BusyC)lcd_wait();DATAPORT=WCLCM; LCM_RS=0; /* 选中指令寄存器*/ LCM_RW=0; / 写模式 LCM_EN=1;_nop_();_nop_();_nop_(
31、); LCM_EN=0;/*写数据到LCD子函数*/void WriteDataLCM(uchar WDLCM) lcd_wait( ); /检测忙信号DATAPORT=WDLCM; LCM_RS=1; /* 选中数据寄存器 */ LCM_RW=0; / 写模式 LCM_EN=1; _nop_();_nop_();_nop_(); LCM_EN=0;/*lcd内部等待函数*/void lcd_wait(void) DATAPORT=0xff; /读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色LCM_EN=1; LCM_RS=0; LCM_RW=1
32、; _nop_(); _nop_();_nop_(); while(DATAPORT&BUSY) LCM_EN=0; _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); LCM_EN=0;/*LCD初始化子函数*/void initLCM( )DATAPORT=0;ddelay(15);WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号 ddelay(5); WriteCommandLCM(0x38,0); ddelay(5); WriteCommandLCM(0x38,0); ddelay(5); WriteComman
33、dLCM(0x38,1); /8bit数据传送,2行显示,5*7字型,检测忙信号 WriteCommandLCM(0x08,1); /关闭显示,检测忙信号 WriteCommandLCM(0x01,1); /清屏,检测忙信号 WriteCommandLCM(0x06,1); /显示光标右移设置,检测忙信号 WriteCommandLCM(0x0c,1); /显示屏打开,光标不显示,不闪烁,检测忙信号/*显示指定坐标的一个字符子函数*/void DisplayOneChar(uchar X,uchar Y,uchar DData) Y&=1; X&=15; if(Y)X|=0x40; /若y为1(显示第二行),地址码+0X40 X|=0x80; /指令码为地址码+0X80 WriteCommandLCM(X,0); W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台州市专职消防员招聘考试题库及答案
- 项目7 使用Shell脚本管理服务器
- 石嘴山市教师招聘考试题及答案
- 公安基础知识试卷及分析
- 踝关节囊肿护理查房
- 医学26年:人工智能超声诊断进展 心内科查房
- 积极心理赋能成长
- 关节肿胀护理查房
- 强势起诉协议书
- 商品赔偿协议书范本
- 2026糖尿病患者合并心血管疾病诊治专家共识解读
- 2024年江苏省常州市中考化学真题(含答案)
- 地理俄罗斯课件 -2025-2026学年人教版地理七年级下册
- 蛋鸡养殖卫生免疫制度
- 节水灌溉工程技术标准
- 无人机飞行安全操作标准手册
- 钢筋混凝土雨水管道施工方案
- 2025广东佛山市南海区大沥镇镇属公有企业管理人员招聘3人笔试历年参考题库附带答案详解
- 2026年高考数学二轮复习检测卷(全国一卷01)(全解全析)
- 多源协同驱动主动配电网优化调度:策略、模型与实践
- T-CEPPEA 5027-2023直流配电网规划设计技术规范
评论
0/150
提交评论