车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料_第1页
车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料_第2页
车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料_第3页
车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料_第4页
车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)

车辆测速及显示系统设计嵌入式系统课程设计(完整版)资料(可以直接使用,可编辑优秀版资料,欢迎下载)课程设计报告(嵌入式系统课程设计)题目:车辆测速及显示系统设计学生姓名(学号):许心悦P71314034周梅P71314040庞影影P71314038郑辉P71314037课程院(系):电子信息工程学院物联网工程系指导老师姓名:徐磊职称/学位:讲师/博士指导老师所在单位:安徽大学电子信息工程学院完成时间:2021年12月目录TOC\o"1-3"\h\u18904第一章内容摘要 113882第二章设计内容及要求 110593第三章总设计原理 112277第四章硬件设计 285294.1硬件方案设计 236814.2AT89C51单片机介绍 4211114.3霍尔开关型传感器介绍 7144224.4LCD显示器介绍 813439 810787 828815 8138774.5单片机外围电路设计 91169710297921017818第五章软件设计 1671805.1软件总体程序分析 16195935.2软件主程序设计 16105045.3中断子程序设计 18279955.4软件应用介绍 1926590Proteus 1925354KeilC51 1911739第六章心得体会 20车辆测速及显示系统设计第一章内容摘要截至2021年初,全国有31个城市的汽车数量超过100万辆,特别是北京市汽车超过500万辆。国内汽车保有量从2004年的2400万辆增长到1.37亿辆。中国交通面临巨大的压力,且这种趋势短期内不会放缓。为解决交通问题,鼓励使用自行车是解决办法之一。但是自行车的骑行体验始终没有质的提升,甚至对于骑行者的安全没有完善的解决方案,也无法为骑行者提供多种骑行建议。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车里程速度表作为自行车的一大辅助工具也正是随着这个要求而迅速发展的,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能。本次课程设计我们主要针对车辆的速度测量及里程数进行了设计。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车的速度里程表,使其能自动地显示当前自行车行走的距离及运行的速度,从而方便人们的出行。第二章设计内容及要求本课题主要任务是利用霍尔元件、AT89C51单片机等部件设计一个可用1602液晶实时显示里程和速度的自行车的速度里程表。以通用MCS-51单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。里程及速度的测量,是经过MCS-51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,其结果通过LED显示器显示出来。实现自行车的LED显示屏上有里程、速度测试两项显示功能,采用单片机作控制,达到显示里程及速度的最终目标。第三章总设计原理图1:总设计原理图(1)通过利用霍尔传感器产生里程数的脉冲信号:假定车轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m。经综合分析,本设计中取m=1。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号。(2)利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数:将采集到的脉冲信号从引脚P3.2中断0端输入,开启定时器0计时,传感器每获取一个脉冲信号即对系统提供一次计数中断这样就可以计算自行车路程和速度了。(3)对数据进行处理得到需要的熟知,再用LED显示里程总数和即时速度:每次中断代表车轮转动一圈,中断数n与轮圈的周长L的乘积为里程值。计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。当里程键按下时,里程指示灯亮,LED切换显示当前里程,与当速度键按下时,速度指示灯亮,LED切换显示当前速度。第四章硬件设计4.1硬件方案设计测速,首先要解决是采样的问题。使用单片机进行测速,可以使用简单的脉冲计数法。只要转轴每旋转一周,产生一个或固定的多个脉冲,将脉冲送入单片机中进行计算,即可获得转速的信息。常用的测速元件有霍尔传感器、光电传感器和光电编码器。里程测量传感器的选择也有很多种。例如使用光敏电阻对里程进行测量、利用编码器对车轮的圈数进行测量、利用霍尔传感器对里程进行测量、利用干簧管型传感器测量里程等多种方案:(1)使用光敏电阻对里程进行测量。光敏电阻对光特别敏感,当白天行驶时,外界光源将导致光敏电阻发出错误信号;光敏电阻对环境的要求相当高,如果光敏或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行准确测量;而编码器必须安装在车轴上,安装较为复杂;(2)使用霍尔元件或干弹簧对里程进行测量。使用霍尔元件或干簧管不但不受天气的影响,即使被泥沙或灰尘覆盖也不会有影响,而且安装方便。使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的齿轮盘上粘上一粒磁钢,霍尔元件固定在前叉上,当车子转动时霍尔元件靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在齿轮盘上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。霍尔传感器是对磁敏感的传感元件,常用于信号采集的有A44E,该传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,工作电压范围宽,使用非常方便。图2:A44E外形图所以本设计采用霍尔元件对里程与速度进行测量,既简单易行,又经济适用。此外,单片机的使用也是本次设计中不可或缺的一部分。单片机由于将CPU、内存和一些必要的接口集成到一个芯片上,并且面向控制功能将结构作了一定的优化,所以它有一般芯片不具有的特点:1.体积小、重量轻;2.电源单一、功耗低;3.功能强、价格低;4.全部集成在一块芯片上,布线短、合理;5.数据大部分在单片机内传送,运行速度快、抗干扰能力强、可靠性高。目前,单片机被广泛的应用于测控系统、工业自动化、智能仪表、集成智能传感器、机电一体化产品、家用电器领域、办公自动化领域、汽车电子与航空航天器电子系统以及单片机的多机系统等领域。在设计中选用的是STC89C52单片机。外部信号外部信号霍尔传感器外部储存器单片机里程显示速度显示图3:系统的原理框图4.2AT89C51单片机介绍单片机是指集成在一个芯片上的微型计算机,也就是把组成微型计算机的各种功能部件,包括CPU(CentralProcessingUnit)、随机存储器RAM(RandomAccessMemory)、只读存储器ROM(Read-onlyMemory)、基本输入/输出(Input/Output)接口电路。定时器/计数器等部件都制作在一块集成芯片上,构成一个完整的微型计算机从而实现微型计算机的基本功能。AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示。图4:单片机内部结构示意图AT89C51提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。图5:AT89C51单片机引脚VCC:供电电压。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口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(计时器0外部输入)P3.5T1(计时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。4.3霍尔开关型传感器介绍霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。霍尔传感器分为线型霍尔传感器和开关型霍尔传感器两种:(一)开关型霍尔传感器由稳压器、霍尔元件、差分放大器,斯密特触发器和输出级组成,它输出数字量。开关型霍尔传感器还有一种特殊的形式,称为锁键型霍尔传感器。(二)线性型霍尔传感器由霍尔元件、线性放大器和射极跟随器组成,它输出模拟量。线性霍尔传感器又可分为开环式和闭环式。闭环式霍尔传感器又称零磁通霍尔传感器。线性霍尔传感器主要用于交直流电流和电压测量。A44E集成霍尔开关由稳压器A、霍尔电势发生器(即硅霍尔片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成,如图9(a)所示。(1)、(2)、(3)代表集成霍尔开关的三个引出端点。在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作。工作点与释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。传感器主要特性是它的输出特性,即输入磁感应强度B与输出电压V0之间的关系。A44E集成霍尔开关是单稳态型,由测量数据作出的输出特性曲线如下图所示。图6:集成开关型霍尔传感器图7:集成霍尔开关接线图4.4LCD显示器介绍液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。线段的显示:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。汉字的显示:汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。4.5单片机外围电路设计图8:硬件原理图时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。STC89C52片内由一个反相放大器构成振荡器,可以由它产生时钟。常用的时钟电路有两种方式,一种是内部时钟方式,另一种为外部时钟方式。本设计采用前者。单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和电容,就构成一个稳定的自激振荡器。单片机内部时钟方式的振荡电路如下图所示。图9:单片机内振荡电路1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。图10:1602字符型液晶表1:1602LCD主要技术参数显示容量16×2个字符芯片工作电压4.5—5.5V工作电流2.0mA(5.0V)模块最佳工作电压5.0V字符尺寸2.95×4.35(W×H)mm引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表所示:表2:引脚接口说明表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。指令功能说明:1602LCD模块内部控制器的11条控制指令说明如下表:表3:控制命令序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。时序说明:与HD44780相兼容的芯片时序表如下:表4:基本操作时序表读状态输入RS=L,R/W=H,E=H输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0—D7=数据写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲输出无图11:读时序操作图12:写时序操作硬件连接说明:1602液晶显示模块可以和单片机AT89C51直接接口,如下图所示。图13:硬件连线图1602的驱动程序11条指令:(1)voidClear_display();//清显示屏指令(2)voidReturn_home();//光标归位指令(3)voidEntry_mode_set();//输入模式设置指令(4)voidDisplay_on_or_off();//显示屏的开关控制指令(5)voidCursor_or_Display_shift();//设定显示屏或光标移动方向指令(6)voidFunction_set();//功能设定指令(7)voidSet_character_address();//设定CGRAM地址指令(8)voidSet_display_address();//设定DDRAM地址指令(9)voidRead_busy_flag();//读取忙信号或AC地址指令(10)voidWrite_data();//将数据写入DDRAM或CGRAM指令(11)voidRead_data();//从CGRAM或DDRAM读出数据的指令第五章软件设计5.1软件总体程序分析软件设计包括主程序、行车过程中里程和速度计算子程序、延时子程序、中断服务子程序、显示子程序等等。中断子程序是将传感器产生的信号接入外部中断0,利用中断和定时器分别对里程进行累加、每转一周的时间进行测量。数据处理子程序是将进入单片机的脉冲信号与实际要显示值之间有一定的对应关系,经过软件编程显示所需要的值。显示子程序是将数据处理的结果送显示器显示。系统软件总体流程图如下图所示。图14:软件总体流程图5.2软件主程序设计在主程序模块中,需要完成对各接口芯片的初始化、自行车里程和速度的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器、速度寄存器,并对它们进行初始化。然后主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计速等不同的操作。中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。将根据里程寄存器中的内容计算和判断出行驶里程数。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。其程序流程如下图所示。等待中断等待中断初始化设置特殊寄存器置定时常数设置计数器关键字开中断刷新里程、速度和时间开始中断开始中断返回定时器秒自动加1是否到1秒依次进位否是INTO图15:主程序流程图5.3中断子程序设计定时中断是为满足定时或计数的需要而设置的。在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单片机接受中断请求的标志。这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。本设计采用定时中断,对自行车的里程和速度进行计数。中断子程序流程图如图16所示。图16:中断子程序流程图5.4软件应用介绍ProteusProteus软件是来自英国LabcenterElectronics公司的EDA工具软件,Proteus软件除了其具有和其它EDA工具一样的原理布图,PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器,逻辑分析仪等,Proteus建立了完备的电子设计开发环境。Proteus是目前最好的模拟单片机外围器件的工具,它可以仿真51系列、AVR,PIC等常用的MCU及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC器件)。当然,软件仿真精度有限,而且不可能所有的器件都找得到相应的仿真模型,用开发板和仿真器当然是最好选择,可是对于单片机爱好者,或者简单的开发应该是比较好的选择。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象。KeilC51KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍KeilC51开发系统各部分功能和使用。C51工具包的整体结构,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。第六章心得体会心得体会许心悦这次的嵌入式课程设计对于我和小组成员们来说都是一次努力学习的过程,虽然我们在大二下半学期就学习了嵌入式课程原理这门课,这学期也进行了短暂的单片机实验课,做过几次实验,但是由于自己的专业课知识掌握的不够熟练,在课程设计中还是遇见了很多的难题。好在通过老师的帮助和指导顺利完成了课程设计的选题。在接下来的两个星期中,我分别通过重温单片机课程的书本与查阅网络资料,对于课题进行了进一步的设计与研究,终于顺利完成了此次课程设计报告的内容。在该课题中我们设计了一个自行车速度里程表,通过对车轮转动次数与时间的采集计算出行驶的里程数与速度,并用LED显示。通过Proteus对电路进行仿真,验证了系统的可行,能满足设计要求,达到设计的指标,实现对自行车里程/速度的计算功能,并用LED显示。本次设计电路简单、低成本,而且能够满足人们对高性能、多功能自行车的要求,可在很多里程/速度测量场合使用,相信在将来一定会具有广泛的应用前景。通过这次的课程设计作品的制作也让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我们发现现在书本上的知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,锻炼自己的动手操作能力。心得体会庞影影经过此次课程设计才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维,一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。一开始我们从网上找到了类似的课题,做到后来发现很多程序都是不完整的。网上的毕竟只是一个参考,设计这种东西最后还是要靠自己动脑筋。然后我们大家一起齐心协力,从平时做的实验﹑老师上课的举例﹑书本上的知识以及老师的辅导和其他同学的帮助下终于完成了。这次课程设计也让我们充分认识到团队合作的重要性,只有分工协作才能保证整个项目的有条不絮。通过这次设计,我们懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名物联网专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然我们很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这些天的学习,在小组同学的帮助和讲解下,我们开始主动学习并逐步从基础慢慢开始弄懂它。我相信逐步学习会一步步增强我们的工作技能,为以后步入社会打下基础。心得体会周梅通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充以及之前在进行书本学习中不能理解的问题都通过此次实际操作一一得以解决。同时也因为单片机这门课程是上个学期所学,对有的知识点可能有所遗忘,通过这次的课程设计我是相当于重新更者是更深层次的学习了一遍《单片机原理及应用教程》。对于一些已经遗忘的端口和引脚,我又重新认识了一遍,并且以前只通过书本学习,对于一些引脚和端口的认识只停留在书本上并不真正的了解它的功能,现在通过实际的操作模拟,我是真正的知道了这些端口和引脚的作用。同样也是因为之前对单片机这门课程、电子设计ADC课程设计的学习为此次的课程设计奠定了一定的基础。基于本次课程设计的课题,我们对车辆测速控制及显示系统由事先地不太了解到现在做完课程设计对各种测速传感器及开关以及显示系统的实现的深入了解,使我懂的了实践出真知的道理,而且通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。心得体会郑辉本次课程设计是检验我们是否掌握相关专业课程知识的重要手段,以我们小组成员为主体,加上老师的悉心教导,充分调动了我们的积极性和创造性,培养了我们得实际动手能力。本次课程设计让我们加深理解、巩固课堂教学和平时实验内容。让我们受益匪浅。本次课程设计,我们利用了嵌入式系统所学的知识,设计了一个车辆测速及显示系统。我们想要设计这个系统的原因是中国交通面临的巨大压力,我们得这个系统能很好地做到让自行车较多的普及。有了目标之后我们就可以行动了,我们开始设计硬件,之前课本上学习到的知识很好的融入到了这次设计之中,不仅加深了对知识的记忆,更加深了对知识的深刻理解。之后我们开始软件设计,由于对软件这一块的知识比较稀薄,当年也没有太认识学习,所以我便一边学习一边设计,因此这次课程设计给了我们一个很好的边学习边实践的机会,对我们深入学习这些技术有很大帮助,深刻体会到了这些技术的实用性。每当自己成功调试一段代码或者通过自己的努力克服一个技术困难,都颇有收获感。而且让我们了解了当前流行技术的软件开发,增加了一定的项目开发经验,增强了一定的就业竞争力。通过这次课程设计,我认识到了自己的很多不足,很多知识都只是一知半解,理解的不够透彻,甚至有些根本就不会。同时,通过这次课程设计,让我我了解到,要真真正正的掌握计算机程序还不是一件简单容易的事儿,但真正掌握后,它带给我们的将是无穷的便捷与科技。在此,要感谢老师对我们的帮助,让我们可以成功的完成本次课程设计。参考文献[1]李全利.单片机原理及应用技术[M].北京:高等教育出版社,2004.[2]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,2006.[3]徐晨,陈继红等.微机原理及应用[M].北京:高等教育出版社,2004.[4]姜秀英,姜涛等.传感器与自动检测技术[M].北京:中国电力出版社,2021.[5]阎焕忠,王长涛,马斌.单片机控制里程转速表的设计.沈阳建筑工程学院学报(自然科学版),2002,4:145-148.[6]曲家骇,王季秩,伺服控制系统中的传感器[M].机械工业出版社.1998.[7]张福学.传感器使用电路150例.中国技术出版社,1992.[8]张友德,赵志英,涂时亮.单片机微机原理,应用与实验[M].上海:复旦大学出版社,2003:122-136.附录A仿真运行图附录B部分程序源代码#include"reg51.h"#include"intrins.h"sbitLCM_RS=P3^0;sbitLCM_RW=P3^1;sbitLCM_EN=P3^7;#defineBUSY 0x80//常量定义#defineDATAPORT P1#defineuchar unsignedchar#defineuint unsignedint#defineL 50ucharstr0[16],str1[16],count;uintspeed;unsignedlongtime;voidddelay(uint);voidlcd_wait(void);voiddisplay();voidinitLCM();voidWriteCommandLCM(ucharWCLCM,ucharBusyC);voidSTR();voidaccount();/*********延时K*1ms,12.000mhz**********/voidint0_isr(void)interrupt0/*遥控使用外部中断0,接P3.2口*/{unsignedinttemp; time=count;TR0=0; temp=TH0; temp=((temp<<8)|TL0);TH0=0x3c;TL0=0xaf; count=0;TR0=1; time=time*50000+temp;}voidtime0_isr(void)interrupt1/*遥控使用定时计数器1*/{TH0=0x3c;TL0=0xaf;count++;}voidmain(void){ TMOD=0x01;/*TMODT0选用方式1(16位定时)*/IP|=0x01;/*INT0中断优先*/TCON|=0x11;/*TCONEX0下降沿触发,启动T0*/IE|=0x83;TH0=0x3c;TL0=0xaf; initLCM(); WriteCommandLCM(0x01,1); //清显示屏 for(;;) { account(); display(); }}voidaccount(){ unsignedlonga; if(time!=0) { a=L*360000000/time; } speed=a;}voidSTR(){ str0[0]='S'; str0[1]='p'; str0[2]='e';str0[3]='e'; str0[4]='d'; str0[5]=''; str0[6]=(speed%100000)/10000+0x30; str0[7]=(speed%10000)/1000+0x30; str0[8]=(speed%1000)/100+0x30; str0[9]='.'; str0[10]=(speed%100)/10+0x30; str0[11]=speed%10+0x30; str0[12]='k'; str0[13]='m'; str0[14]='/'; str0[15]='h'; str1[0]='L'; str1[1]='i'; str1[2]='c'; str1[3]='h'; str1[4]='e'; str1[5]='n'; str1[6]=''; str1[7]=789/100+0x30;str1[8]=(789%100)/10+0x30;str1[9]=789%10+0x30;str1[10]='k'; str1[11]='m';}voidddelay(uintk){uinti,j;for(i=0;i<k;i++){for(j=0;j<60;j++) {;}}}/**********写指令到LCD子函数************/voidWriteCommandLCM(ucharWCLCM,ucharBusyC){if(BusyC)lcd_wait(); DATAPORT=WCLCM;LCM_RS=0;/*选中指令寄存器*/LCM_RW=0; //写模式LCM_EN=1; _nop_(); _nop_(); _nop_();LCM_EN=0;}/**********写数据到LCD子函数************/voidWriteDataLCM(ucharWDLCM){lcd_wait();//检测忙信号 DATAPORT=WDLCM;LCM_RS=1;/*选中数据寄存器*/LCM_RW=0; //写模式LCM_EN=1;_nop_(); _nop_(); _nop_();LCM_EN=0;}/***********lcd内部等待函数*************/voidlcd_wait(void){DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色 LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();_nop_(); _nop_();while(DATAPORT&BUSY) {LCM_EN=0; _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); } LCM_EN=0;}/**********LCD初始化子函数***********/voidinitLCM(){ DATAPORT=0; ddelay(15); WriteCommandLCM(0x38,0);//三次显示模式设置,不检测忙信号ddelay(5);WriteCommandLCM(0x38,0);ddelay(5);WriteCommandLCM(0x38,0);ddelay(5);WriteCommandLCM(0x38,1);//8bit数据传送,2行显示,5*7字型,检测忙信号WriteCommandLCM(0x08,1);//关闭显示,检测忙信号WriteCommandLCM(0x01,1);//清屏,检测忙信号WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示,不闪烁,检测忙信号}/****显示指定坐标的一个字符子函数****/voidDisplayOneChar(ucharX,ucharY,ucharDData){Y&=1;X&=15;if(Y)X|=0x40;//若y为1(显示第二行),地址码+0X40X|=0x80;//指令码为地址码+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);}/*******显示指定坐标的一串字符子函数*****/voidDisplayListChar(ucharX,ucharY,uchar*DData){ucharListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}voiddisplay(){ STR(); DisplayListChar(0,0,str0); DisplayListChar(0,1,str1);}河海大学《操作系统》课程设计设计名称:模拟文件管理系统课程设计负责人:课程设计成员:河海大学计算机与信息学院二〇一一年十二月目录Contents第一部分:课程设计目的 3第二部分:设计要求 3第三部分:运行环境 3第四部分:实验内容 44.1前期知识巩固 44.2设计任务 54.3详细设计部分 104.3.1数据结构 104.3.2主要函数 114.3.3系统流程图 11第五部分:调试分析 135.1用户登录 135.2创建文件 145.3查看文件 155.4删除文件 155.5修改文件夹位置 16第六部分:参考文献 16第七部分:附录 177.1心得体会 177.2源代码(代码文字已缩小) 17第一部分:课程设计目的本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。具体指在内存中开辟一个虚拟的磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。在退出这个文件系统时应将该文件系统保存到磁盘上,以便下次可以再将它恢复到内存的虚拟磁盘空间中。第二部分:设计要求(1)对进行认真分析,列出实验具体步骤,写出符合题目要求的程序清单,准备出调试程序使用的数据。(2)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。(3)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。(4)文件保护简单使用三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。(5)以完整的论文形式提交原始代码、设计文档和可运行程序。提交的文档应当包括:设计题目,程序清单,运行结果分析,算法及其优缺点,以及通过上机取得了哪些经验。程序清单要求格式规范,注意加注释(包含关键字、方法、变量等),在每个模块前加注释。(6)本组交一份设计文档的同时每名组员交一份实践体会。第三部分:运行环境windowsxp系统,windows7旗舰版系统编译器:MicrosoftVisualC++6.0编辑语言:c++第四部分:实验内容4.1前期知识巩固A、文件系统:文件系统是操作系统的五大功能模块之一,主要实现操作系统对程序、数据、设备等的管理。文件系统的主要功能:完成文件存储空间管理,实现文件名到物理地址的映射,实现文件和目录的操作管理,提供文件共享能力和安全措施等功能。B、文件文件是信息的一种组织形式,是存储在外存上的带有标识号的一组相关信息的集合,而这个集合既可以由相关联的字符流组成,也可以由相关联的记录组成。文件的构成:文件控制块(FCB)、数据。FCB是系统在管理文件时所需信息的数据结构,是文件存在的惟一标志。包括了文件的基本属性,大致有文件名、地址、存取控制信息(如文件所有者、同组用户、访问权限)以及使用信息(如创建日期、修改日期)。C、文件目录文件控制块的有序集合称为文件目录。文件目录的基本功能是实现文件名与其存放位置的映射。D、文件的物理结构常用的结构有顺序结构、链接结构、文件分配表结构FAT、索引结构、多级索引结构。E、文件操作文件的操作就是创建/删除文件、打开/关闭文件、读/写文件等F、磁盘空间管理文件系统的一个重要任务是对磁盘空间进行管理。磁盘空间管理的关键问题是磁盘空闲空间的管理。常用的空闲块管理方法有:空闲文件目录法、空闲块链法、位示图法、空闲块成组链接法。4.2设计任务建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。在现有机器硬盘上开辟1M的硬盘空间,模拟作为作为设定的硬盘空间。编写一管理程序simdisk对此空间进行管理,以模拟Linux文件系统,要求:盘块大小1k空闲盘块的管理:Linux位图法结构:超级块,i结点区,根目录区该文件管理程序的功能要求如下:Format:对文件存储器进行格式化

mkdir:用于创建子目录

dir:用于显示目录

cd:更改当前目录create:创建文件

write:写文件read:读文件del:删除文件access:权限程序的总体流程为:初始化文件目录;输出提示符,等待接受命令,分析键入的命令;对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。总体流程图如下所示:是是登录输入命令退出退出失败成功否启动执行命令以下是各功能模块流程图:初始化当前状态读入i节点信息到内存当前目录为根目录初始化当前状态读入i节点信息到内存当前目录为根目录初始化超级块结束开始初始化函数format()是是否否遍历i节点区argv[1]=”..”目录是否存在找到的目录i节点号送当前目录inum_cur当前目录的父i节点号送当前目录inum_cur开始结束改变当前目录cd()是是是是否否遍历i节点区i节点的父节点是否为当前目录i节点区是否遍历完输出文件名或目录名开始结束显示目录dir()是是否否遍历i节点区要创建的目录是否存在是否有空的i节点遍历i节点区分配一个目录i节点开始结束创建目录mkdir()是是是是否否遍历目录索引要创建的文件是否存在是否有空的i节点遍历i节点区分配一个文件i节点开始结束创建文件creat()是否遍历i节点区要删除的文件是否存在释放文件对应的i节点区effect=0开始结束删除文件del()是是否是否是否遍历i节点区要打开的文件是否存在提示输入打开模式将打开文件信息写入打开文件信息表file_array[]遍历打开文件表file_array[]文件是否已经打开提示输入开始位置和读字节数调用读块操作,读出块内字符模式是否为可读开始结束开始结束打开文件open()读文件read()是是否是否遍历打开文件表file_array[]文件是否已经打开提示输入写入字节数调用写块操作,写入块内字符模式是否为可写是否遍历打开文件表file_array[]文件是否已经打开将打开文件表项标志位置-1file_array[i].inum=-1开始结束写文件write()开始结束关闭文件close()开始遍历i节点区开始遍历i节点区是待删除目录吗?遍历子目录子目录为空吗?是文件吗?是空目录吗?结束调用delet()删除目录或文件是空目录吗?删除目录树rd()是是否否否否否是是是开始当前是否有该文件是否为管理员是否为普通用户是公用么结束判断权限access()是否否否查找该文件是是有读写权限查找该文件是是是否遍历位示图表查找空闲块bitmap[]是否有空闲块分配一块,将位示图位置置’1’。返回找到的空闲块号将位示图位置置’0’。bitmap[i]='0清空块内容开始结束分配磁盘块get_blk()开始结束释放磁盘块release_blk(int)是是否输出给定i节点对应的第1块内容文件是否大于1块输出给定i节点对应的第2块内容是否将缓冲区buf内容写入第1块buf内容是否大于512字节将缓冲区buf的512字节后面的内容写入第2块开始结束写磁盘块write_blk(int)开始结束读磁盘块read_blk(int)4.3详细设计部分4.3.1数据结构定义功能描述数据结构typedefenumFileAccess文件元素可供操作性权限typedefenumFileType文件元素类型typedefenumUserType用户类型typedefenumFileStatus文件状态typedefstructFileIndexElement一个文件索引结构typedefstructFileIndex文件索引结构或目录表项typedefstructfbFileBlock文件块的结构typedefstructBitMap文件系统的位示图结构typedefstructSuperBlock;文件系统结构typedefstructUser用户信息typedefstructfseFSElement文件系统中的元素结构,包括文件和文件夹typedefstructCurrentStatus系统当前状态4.3.2主要函数定义功能描述函数unsignedFindBlankFileBlockId()char*FindBlankFileBlock(unsignedfileblockid)寻找第一个文件块地址voidGetCurrentTime(char*currtime)得到当前时间的字符串voidAddFileIndex(unsignedfileblockid,unsignedfilelevel,char*filename,char*parentname,FileTypetemp)更新文件索引voidUpdateBitMap(unsignedfileblockid)更新位示图FSElementCreateFileElement(FileAccessacc,char*filename,FileTypetype,char*filecontent,FSElement*parent)创建一个文件元素FileBlock*CreateFileBlockList(char*datahead,unsignedblockcap,unsignedlen)创建文件块链表boolInitFileSys()初始化模拟文件系统boolLogin()voidCreate(char*filename)系统登录模块创建一个文件voidDir(char*path)列出当前目录的文件和文件夹voidMkdir(char*filename)创建一个文件夹voidCd(char*path)进入一个文件夹voidDelete(char*path)删除当前目录的文件数据结构voidFindCommKey(char*command,char*key,char*path)命令分解voidShell()命令解释模块voidClearFileSys(退出时清理分配的内存空间4.3.3系统流程图(1)Login用户登录用户输入用户名和密码,在passwd文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。(2)format格式化初始化超级块,初始化主目录,初始化管理员admin目录,初始化用户目录,初始化用户passwd文件。(3)create创建文本文件查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以‘###’结束。申请硬盘空间,申请失败则结束。将文件内容写入硬盘空间。修改当前目录的结构,修改超级块。(4)cdir创建文件夹查找当前目录下是否有同名文件,是则退出,否则,申请硬盘空间,申请失败则结束。将文件夹内容写入硬盘空间。修改当前目录的结构,修改超级块,写入模拟硬盘。(5)readedit–读取和追加文本文件(6)Read查找当前目录下是否该文件,没有则退出,否则调用access()权限判断,有权限则判断是不是文件,不是则退出,是文件则读取文件并显示。(7)Edit调用读取文件模块,读取成功则用户输入追加的内容,如果追加的内容大于一个硬盘分配空间则申请分配空间,失败则退出,申请成功则保存文件。(8)access(文件名)权限判断先判断当前目录是否有该文件,在当前目录的硬盘空间找到该文件,判断当前登录用户是哪个组,判断是否该用户创建,判断该文件的可见级别。如果是该用户创建的则有读写权限如果当前用户是管理员组的也具有读写权限如果该文件是用户可查看文件则都具有权限。(9)cd–进入子目录或上级目录查找当前目录是否有该子目录,没有则退出,调用access()判断当前用户是否有权限,无则退出,有则读取该子目录的目录,将当前目录指向该目录。(10)attr(文件名)查看文件或者文件夹的属性先查找当前目录下是否有该文件或目录,有则判断文件是否系统文件,是否文本文件,是否目录,由谁创建,属于什么组,占用的空间和目录。将其全部显示出来。(11)del删除文件或目录查找当前目录是否有该文件名,没有则退出,有则调用access()判断是否有权限,有则判断是否为系统文件,是则无法删除,不是则判断是否是文件,是文件则直接删除,不是则判断是否文件夹,是文件夹则判断该文件夹下是否有文件,有文件则无法删除。提示用户是否删除,确认则删除文件,修改当前文件夹目录和硬盘空间结构,修改超级块,写入模拟硬盘。(12)Dir列文件目录(列出文件名、物理地址、保护码和文件长度)第五部分:调试分析5.1用户登录初始登陆界面,根据注册用户的信息,每次登陆有三次登陆机会,如果失败即结束并退出,用户名和验证码与注册的信息一致则进入系统,下图显示的是登陆时失败的画面:登陆成功后画面显示:5.2创建文件创建文件并输入文件内容,我们的创建文件模式为“CREAT+文件名称”,下图的名称为123,之后系统显示输入文件内容,同时会提醒内容以“###”结尾,此便于系统识别,具体画面如下所示:下面是创建文件夹,文件夹不需要输入文件信息。5.3查看文件根据之前创建的文件,可以查看当前文件夹中已经创建文件的信息。命令“dir”。5.4删除文件创建文件夹并删除,创建文件夹的命令为“CDIR+文件夹名称”,下图以123为例;删除命令为DEL+文件夹名称/文件名称,下图还以AAA文件夹为例,如下图所示:删除后查看,可以验证文件已经删除。5.5修改文件夹位置第六部分:参考文献[1]罗宇等.《操作系统(第2版)》.电子工业出版社[2]谭浩强.《C++程序设计》.清华大学出版社

[3]宁正元等.《算法与数据结构》.清华大学出版社

[4]林锐.《高质量程序设计》.电子工业出版社[5]张乃孝.《算法与数据结构-c语言描述》(第二版).高等教育出版社[6]严蔚敏等.《数据结构(C语言版)》.清华大学出版社[7]苏仕华等.《数据结构课程设计》.机械工业出版社[8]第七部分:附录7.1心得体会在本次课程设计刚刚开始时,不知道怎么设计,只知道大概的结构。后来认真阅读课本有关的知识,知道怎样设计结构体才方便文件操作。知道怎样设计后,写程序时也遇到很多的障碍,特别是指针的改接和指向和出错处理。此时深感自己编程能力的不足,经过多次修改,终于设计好了该设计。通过该课程设计,使我们更了解了课本知识,巩固了课本知识,同时也使我们的编程能力有了一定的提高,最重要的是我们深切体会到团队的重要,怎么配合和分工才能更快更好的完成任务。7.2源代码(代码文字已缩小)#include<iostream>#include<time.h>#include<string>#include<fstream>#include<sstream>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<iomanip>#include<io.h>#include<malloc.h>#include<dos.h>#include<conio.h>#include<windows.h>#defineBOOLintusingnamespacestd;constunsignedFILE_SYS_SIZE=1024*1024;//模拟文件系统的容量设为1MconstunsignedBITMAP_LEN=64;//位示图的长度512/8constunsignedBLOCK_SIZE=512;//一个文件块的大小constunsignedBLOCK_COUNT=512;//文件系统中文件块的数量constunsignedNAME_LEN=15;//最长文件名的长度constunsignedPASSWORD_LEN=15;//用户密码的最大长度constunsignedLOGIN_COUNT=3;//用户登录尝试次数constunsignedCOMMAND_LEN=200;//命令行最大长度constunsignedPRO_SET_COMM_COU=11;//预设命令数constunsignedUSER_NAME_SIZE=15;//最大用户名长度constunsignedUSER_PASSWORD_SIZE=15;//最大用户密码长度constunsignedMAX_USER_NUMBER=10;//最多用户数目constunsignedMAX_FILE_SIZE=200;//最大文本字符数目constchar*PRO_SET_COMM[]={"creat","format","read","write","logout","del","cdir","cd","dir","exit","help"};//文件元素可供操作性权限typedefenum{pub,//任何人可做任何操作(公共文件,所有人都可查看)protect,//非创建者或ADMIN,只可以察看(保护,只有自己和管理员可查看)pri//非创建者或ADMIN,不可以做任何操作(系统文件)}FileAccess;//文件元素类型typedefenum{file,//文件dir//文件夹}FileType;//表示文件状态typedefenumFileStatus{closed,opened,reading,writing};//一个文件索引结构(文件节点)structFileIndexElement{unsignedIndex;//文件元素索引编号charFileName[NAME_LEN];//文件元素名charParentName[NAME_LEN];//父节点名unsignedFileBlockId;//文件元素所在物理块编号unsignedFileLevel;//文件元素所在层次,层+文件元素名为一个文件元素的逻辑位置charcreatTime[18];//文件创建时间char*filecontent;//文件内容BOOLeffect;//是否有效,0-无效,1-有效FileTypeType;//识别文件还是目录};//文件索引结构或目录表项(文件目录结构)structFileIndex{FileIndexElement*FIStart;//文件系统中的文件索引起始位置unsignedFILen;//文件索引的最大长度unsignedFICount;//文件索引数量};//文件块的结构(存储数据块结构)structFileBlock;typedefstructFileBlock*pFileBlock;structFileBlock{unsignedFileBlockId;//文件块编号unsignedBLOCK_SIZE;//文件块的容量char*FileBlockAddr;//文件块地址pFileBlocknext;//下一个文件块的地址};//文件系统的位示图结构(用于显示分配的存储器分配情况)structBitMap{unsignedBITMAP_LEN;//文件位示图长度char*BMStart;//位示图的起始指针};//文件系统结构(超级块的结构,全局变量)structSuperBlock{char*FSStart;//文件系统的起始地址unsignedSuperBlockSize;//文件系统的容量BitMapbm;//文件系统中的位示图unsignedBLOCK_COUNT;//文件系统中文件块的数量pFileBlockhead;//文件系统中文件块首地址FileIndexFI;//文件系统中的文件索引};//登陆用户的数据结构(用户的数据结构)structUser;typedefstructUser*pUser;structUser{char

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论