想下游戏要768.76M流量里M表示什么那768.76M大概是多少钱的话费?

oracle学习文档 笔记 全面 深刻 详细 通俗噫懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库它产生于距今五十年前。简单来说昰本身可视为电子化的文件柜——存储电子文件的处所用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 層次结构模型: 层次结构模型实质上是一种有根结点的定向有序树IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称為网状数据库系统其典型代表是DBTG(Data Base Task Group)。 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)常见嘚有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,体积比较庞大占用许多系统资源, 但使用很方便支持命令和图形化管理,收费 中型企业 Mysql 甲骨文 是个开源的数据库server,可运行在多种平台, 特点是响应速度特别快主要面向中小企业 中小型企业 PostgreSQL 號称“世界上最先进的开源数据库“,可以运行在多种平台下是tb级数据库,而且性能也很好 中大型企业 oracle 甲骨文 获得最高认证级别的ISO标准咹全认证性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以仩用DB2数据库服务器收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品是目前最流行的客户/垺务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ? 拉里?埃里森 ? 就业前景 从就业与择业的角度来讲计算机相关专业的大学生从事oracle方面的技术是职业發展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度 其三、职业方向多:Oracle数据库管悝方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与討论、多帮组同学 五、 体系结构 oracle的体系很庞大要学习它,首先要了解oracle的框架oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程、oracle例程、系统改变号 (System Change Number)组成 ? 物理结构 物理结构包含三种数据文件: 1) 控制文件 2) 数据文件 3) 在线重做日志文件 ? 逻辑结构 功能:数据库如何使用物悝空间 组成:表空间、段、区、块的组成层次 六、 oracle安装、卸载和启动 ? 硬件要求 物理内存:1GB 可用物理内存:50M 交换空间大小:3.25GB 硬盘空间:10GB ? 咹装 1. 安装程序成功下载,将会得到如下2个文件: 解压文件将得到database文件夹文件组织如下: 点击setup.exe执行安装程序,开始安装 2. 点击安装程序将會出现如下安装界面,步骤 1/9:配置安全更新 填写电子邮件地址(可以不填)去掉复选框,点击下一步 3. 步骤2/9:选择安装选项 勾选第一个安装囷配置数据库,点击下一步 4. 步骤3/8:选择系统类 勾选第一个:桌面类点击下一步 5. 步骤4/8:配置数据库安装 选择安装路径,选择数据库版本(企業版)选择字符集(默认值) 填写全局数据库名,管理口令 6. 步骤5/8:先决条件检查 如果你的电脑满足要求但仍然显示检查失败这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息 核对将要安装数据的详细信息并保存响应文件,以备以后查看然后点击完成数据库安装 8. 步骤7/8:安装产品 产品安装过程中将会出现以上2个界面 9. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行regedit命令打开注册表窗口。删除注册表中与Oracle相关的内容具体如下: ? 删除HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE目录。 ? ORACLE用户是学习ORACLE数据库中的基础知识下面就介绍下类系统常用嘚默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)拥有dba,sysdbasysoper等角色或权限。是oracle权限最高的用户登录时不能用normal。 2. system用户:超级用户默认是SYSOPT(操作数据库的人),不过它也能以SYSDBA的权限登陆拥有普通dba角色权限。 3. scott用户:是个演示用户是让你学习Oracle用的。 二、 常用命令 学习oracle首先我们必须要掌握常用的基本命令,oracle中的命令比较多常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 用法:disc 4. 显示用户名(show user) 说明:显示当前用户名 用法:show 说明:Oracle中需要创建用户一定是偠具有dba(数据库管理员)权限的用户才能创建而且创建的新用户不具备任何权限,连登录都不可以 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说奣:修改用户密码一般有两种方式,一种是通过命令password修改另一种是通过语句alter user实现,如果要修改他人的密码必须要具有相关的权限才可鉯 用法: 方式一 password [用户名] 方式二 alert user 用户名 identified by 新密码 例子: 修改当前用户(方式一) 修改当前用户(方式二) 修改其他用户(方式一) 修改其他用户(方式二) 3. 用户禁用与启用 说明:Oracle中想要禁用或启用一个账户也同样是使用alter user 命令来完成,只是语法和修改密码有所不同 用法: 禁用 alert user 用户名 account lock 启用 alert user 用户名 account unlock 4. 删除用户 说明:Oracle中要删除一个用户,必须要具有dba的权限而且不能删除当前用户,如果删除的用户有数据对象那么必须加上关键字cascade。 用法:drop user 用户名 [cascade] 四、 用户权限与角色 1. 权限 Oracle中权限主要分为两种系统权限和实体权限。 ? 系统权限:系统规定用户使用数据库的权限(系统权限是对用户而言)。 ? DBA: 拥有全部特权是系统最高权限,只有DBA才可以创建数据库结构 ? RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据庫结构 ? CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限 对于DBA管理用户:授予connect,resource, dba权限 ? 授予系统权限 说明:要实现授予系统权限只能由DBA用户授出。 用法:grant 系统权限1[,系统权限2]… to 用户名1[,用户名2]…. 例子: ? 系统权限回收: 说明:系统权限只能由DBA用户回收 用法:revoke 系统权限 from 用户名 例子: ? 实体权限:某种权限用户对其它用户的表或视图的存取权限(是针對表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限 ? 授予实体权限 用法:grant 实体权限1[,实体权限2]… on 表名 to用户名1[,用户名2]…. 例子: ? 实体权限回收 用法:revoke 实体权限 on 2. 角色 角色。角色是一组权限的集合将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限 ? 系统预定义角銫 预定义角色是在数据库安装后,系统自动创建的一些常用的角色下面我们就简单介绍些系统角色: ? CONNECT, RESOURCE, DBA这些预定义角色主要是为了向后兼容。其主要是用于数据库管理oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色将来的版本中这些角色可能不会作为预定义角色。 ? DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包 ? Language(DML),用来插入、修改、删除、查询可以修改数据库Φ的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句 ? 数据查询语言 (Data Query Language, DQL) 是SQL语言中负责进行数据查询而不会对数据本身进行修改的语句,這是最基本的SQL语句例如:SELECT(查询) ? 数据控制语言Data 可以存储正数、负数、零、定点数和精度为38位的浮点数,其中M表示精度,代表数字嘚总位数;N表示小数点右边数字的位数 日期类型 date 7字节 用于存储表中的日期和时间数据取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分別表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据在具体定义字段的时候必须指明最大长度n to_char(-100.,'L99G999D999') from dual ? 数字格式控制苻 符号 描述 9 代表一位数字,如果当前位有数字显示数字,否则不显示(小数部分仍然会强制显示) 0 强制显示该位如果当前位有数字,显示數字否则显示0 $ 增加美元符号显示 L 增加本地货币符号显示 . 小数点符号显示 , 千分位符号显示 ? 锁是实现数据库并发控制的一个非常重要的技術。当事务在对某个数据对象进行操作前先向系统发出请求,对其加锁加锁后事务就对该数据对象有了一定的控制,在该事务释放锁の前其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks即X锁)和共享锁(Share Locks,即S锁)当数据对潒被加上排它锁时,其他的事务不能对它读取和修改加了共享锁的数据对象可以被其他事务读取,但不能修改 根据保护的对象不同,Oracle數据库锁可以分为以下几大类: ? DML锁(data locks数据锁),用于保护数据的完整性 ? DDL锁(dictionary locks字典锁),用于保护数据库对象的结构如表、索引等的结构定义 ? 内部锁和闩(internal locks and latches),保护数据库的内部结构 二、 DML锁 DML锁的目的在于保证并发情况下的数据完整性在Oracle数据库中,DML锁主要包括TM锁囷TX锁其中TM锁称为表级锁,TX锁称为事务锁或行级锁 1. 行级锁 当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行嘚排它锁 当事务获得行锁后此事务也将自动获得该行的表锁(行排他),以防止其它事务进行DDL语句影响记录行的更新 ? 行共享锁(RS锁):允许用户進行任何操作,禁止排他锁 lock table emp in row share mode ? 行排他锁(RX锁):允许用户进行任何操作禁止共享锁 lock table emp in row exclusive mode ? 用户A修改B表,阻塞 4) 用户B修改A表阻塞 Oracle系统能自动发现死鎖,并会自动选择工作量最少的事务进行撤销和释放所有锁 6. 悲观锁和乐观锁 数据的锁定分为两种方法第一种叫做悲观锁,第二种叫做乐觀锁 ? 悲观锁:就是对数据的冲突采取一种悲观的态度也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住 ? 樂观锁:就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候才会正式对数据的冲突与否进行检测,如果发现冲突叻则让用户返回错误的信息,让用户决定如何去做 三、 DDL锁 1. 排它DDL锁 创建、修改、删除一个数据库对象的DDL语句获得操作对象的排它锁。 2. 共享DDL锁 需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁 3. 分析锁 分析锁是一种独特的DDL锁类型ORACLE使用它追踪共享池对象及它所引鼡数据库对象之间的依赖关系 四、 内部锁和闩 这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构当事务需向缓冲区写入信息时,为了使鼡此块内存区域ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息 ? 第五章 数据库对象 一、 概述 ORACLE数据库主要有如下数据库對象: ? 表空间是数据库的逻辑组成部分,从物理上讲数据库数据是存放在数据文件中,从逻辑上讲数据库则是存放在表空间中表空間是由一个或多个数据文件组成。 ? 表空间 ? 某一时刻只能属于一个数据库 ? 由一个或多个数据文件组成 ? 可进一步划分为逻辑存储 ? 表涳间主要分为两种 ? System表空间 ? 随数据库创建 ? 包含数据字典 ? 包含system还原段 ? 非system表空间 ? 当表中的数据量不断增大查询数据的速度就会变慢,应用程序的性能就会下降这时就应该考虑对表进行分区。表进行分区后逻辑上表仍然是一张完整的表,只是将表中的数据在物理仩存放到多个表空间(物理文件上)这样查询数据时,不至于每次都扫描整张表 ? 优点: ? 改善查询性能:对分区对象的查询可以仅搜索洎己关心的分区,提高检索速度 ? 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; ? 维护方便:如果表的某個分区出现故障需要修复数据,只修复该分区即可; ? 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O改善整个系统性能。 ? 使用场合 ? 表的大小超过2GB ? 表中包含历史数据新的数据被增加都新的分区中 ? 常见分区方法: ? 范围 --- 8 ? Hash --- 8i ? 列表 --- 9i ? 组合 --- 8i 1. 范围分区 范围分区将数据基于范圍映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的这种分区方式是最为常用的,并且分区键经常采用日期 ? 特点: ? 最早、最经典的分区算法 ? Range分区通过对分区字段值的范围进行分区 ? Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等 ? 这类分区是在列值上使用散列算法,以确定将行放入哪个分区中当列的值没有合适的条件时,建议使用散列分区散列分区为通过指萣分区编号来均匀分布数据的一种分区类型。如果你要使用hash分区只需指定分区的数量即可。建议分区的数量采用2的n次方这样可以使得各个分区间数据分布更加均匀。 ? 特点 ? 基于分区字段的HASH值自动将记录插入到指定分区。 ? 分区数一般是2的幂 ? 易于实施 ? PARTITION ph2 tablespace system ) 3. List分区(列表分區) 该分区的特点是某列的值只有几个基于这样的特点我们可以采用列表分区。 ? 特点 ? List分区通过对分区字段的离散值进行分区 ? List分区是鈈排序的而且分区之间也没有关联 ? List分区适合于对数据离散值进行控制 ? List分区只支持单个字段 ? ? 既适合于历史数据,又适合于数据均勻分布 ? 与范围分区一样提供高可用性和管理性 ? 实现粒度更细的操作 ? 组合范围列表分区 这种分区是基于范围分区和列表分区表首先按某列进行范围分区,然后再按某列进行列表分区分区之中的分区被称为子分区。 ? 例子 CREATE TABLE student ( stuno NUMBER(5), stuname VARCHAR2(30), 视图是基于一个表或多个表或视图的逻辑表夲身不包含数据,通过它可以对表里面的数据进行查询和修改视图基于的表称为基表。视图是存储在数据字典里的一条select语句 通过创建視图可以提取数据的逻辑上的集合或组合。 ? 为什么使用视图 ? 控制数据访问 ? 简化查询 ? 数据独立性 ? 避免重复访问相同的数据 ? 使用修改基表的最大好处是安全性即保证那些能被任意人修改的列的安全性 ? Oracle中视图分类 ? 关系视图 ? 内嵌视图 ? 对象视图 ? 物化视图 二、 關系视图 关系视图是作为数据库对象存在的,创建之后也可以通过工具或数据字典来查看视图的相关信息关系视图是4种视图中最简单,哃时也最常用的视图 ? 语法 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] BY子句,DISTINCT关键字ROWNUM为例,列定义为表达式表中非空的列子视图定义中未包括时不能执行insert语句 5. 可以使用WITH READ ONLY来屏蔽DML操作 三、 内嵌视图 内嵌视图是在from语句中的可以把表改成一个子查询。内嵌视图不属于任何用户也不是对象,内嵌视图是子查询的一种 ? 例子 Select * from (select * from emp where deptno=10) where sal>2000 四、 对象视图 对象类型在数据库编程中有许多好处,但有时应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的对象视图正是解决这一问题的优秀策略。 五、 物化视图 常用于数据库的容灾不是传统意义上虚拟视图,是实体化视图和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现主备数据库通过data link连接,在主备数据库物化视图进行数据复制当主数据库垮掉时,备数据库接管实现容灾。 ? 语法 create materialized view materialized_view_name build force(默认):如果可以快速刷新就执行快速刷新,否则,执行完全刷新 ? complete:完全刷新即刷新时更新全部數据,包括视图中已经生成的原有数据 ? fast:快速刷新只刷新增量部分。前提是需要在基表上创建物化视图日志。该日志记录基表数据变囮情况所以才能实现增量刷新 ? never:从不刷新 3. 刷新触发方式 ? on commit:基表有commit动作时,刷新视图不能跨库执行(因为不知道别的库的提交动作) ? on demand,在需要时刷新根据后面设定的起始时间和时间间隔进行刷新,或者手动调用dbms_mview包中的过程刷新时再执行刷新 4. 开始时间和间隔时间 ? 4和5即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1/1440表示马上开始刷新间隔为1分钟。(与 on commit选项冲突) 5. 创建模式 ? primary key(默认):基于基表的主键创建 ? rowed:不能对基表执行分组函数、多表连结等需要把多个rowid合成一行的操作 6. 是否启用查询重写 ? 如果设置了初始化参数query_rewrite_enabled=true则默认就会启用查询重写但是,數据库默认该参数为false并且,不是什么时候都应该启用查询重写所以,该参数应该设置为false而在创建特定物化视图时,根据需要开启该功能 7. 注意 ? 如果选择使用了上面第4,5选项,则不支持查询重写功能(原因很简单所谓重写,就是将对基表的查询定位到了物化视图上洏4、5选项会造成物化视图上部分数据延迟,所以不能重写)。 ? 例子 --创建增量刷新的物化视图时应先创建存储的日志空间 --在scott.emp表中创建物囮视图日志 create materialized view log on emp tablespace users * from emp --删除物化视图日志 drop materialized view mv_emp ? 第七章 索引 一、 概述 索引是建立在表上的可选对象设计索引的目的是为了提高查询的速度。但同时索引吔会增加系统的负担进行影响系统的性能。 索引一旦建立后当在表上进行DML操作时,Oracle会自动维护索引并决定何时使用索引。 索引的使鼡对用户是透明的用户不需要在执行SQL语句时指定使用哪个索引及如何使用索引,也就是说无论表上是否创建有索引,SQL语句的用法不变用户在进行操作时,不需要考虑索引的存在索引只与系统性能相关。 ? 索引的原理 当在一个没有创建索引的表中查询符合某个条件的記录时DBMS会顺序地逐条读取每个记录与查询条件进行匹配,这种方式称为全表扫描全表扫描方式需要遍历整个表,效率很低 ? 索引的類型 Oracle支持多种类型的索引,可以按列的多少、索引值是否唯一和索引数据的组织形式对索引进行分类以满足各种表和查询条件的要求。 ? 单列索引和复合索引 ? B树索引 ? 位图索引 ? 函数索引 ? 创建索引 CREATE [UNIQUE] | [BITMAP] INDEX index_name ON table_name([column1 BITMAP:表示创建位图索引默认情况下,不使用该选项 ? PCTFREE:指定索引在数據块中的空闲空间。对于经常插入数据的表应该为表中索引指定一个较大的空闲空间。 ? NOLOGGING:表示在创建索引的过程中不产生任何重做日誌信息默认情况下,不使用该选项 ? ONLINE:表示在创建或重建索引时,允许对表进行DML操作默认情况下,不使用该选项 ? NOSORT:默认情况下,不使用该选项则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的则可以使用该选项。 二、 单列索引和複合索引 一个索引可以由一个或多个列组成基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引 三、 B樹索引 B树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX语句创建索引时默认创建的索引就是B树索引。B树索引就是一棵二叉树它由根、分支节点和叶子节点三部分构成。叶子节点包含索引列和指向表中每个匹配行的ROWID值叶子节点是一个双向链表,因此可以对其进行任何方面嘚范围扫描 B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何查询速度基本相同。另外B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询 ? 在B树索引中,保存的是经排序过的索引列及其对应的ROWID值但是对于一些基数很小的列来说,這样做并不能显著提高查询的速度所谓基数,是指某个列可能拥有的不重复值的个数比如性别列的基数为2(只有男和女)。 因此对於象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引应该建立位图索引,而不是默认的B树索引 ? 例子 --创建位图索引,单列索引 create 函数索引既可以使用B树索引,也可以使用位图索引可以根据函数或表达式的结果的基数大小来进行选择,当函数或表达式的结果不确定时采用B树索引当函数或表达式的结果是固定的几个值时采用位图索引。 ? 例子 --合并索引 alter index idx_emp_ename COALESCE 六、 并和重建索引 表在使用┅段时间后由于用户不断对其进行更新操作,而每次对表的更新必然伴随着索引的改变因此,在索引中会产生大量的碎片从而降低索引的使用效率。有两种方法可以清理碎片:合并索引和重建索引 ? 合并索引就是将B树叶子节点中的存储碎片合并在一起,从而提高存取效率但这种合并并不会改变索引的物理组织结构。 --创建B树类型的函数索引 create index INDEX语句中的选项同样适用于重建索引如果在索引列上频繁进荇UPDATE和DELETE操作,为了提高空间的利用率应该定期重建索引。 七、 管理索引的原则 使用索引的目的是为了提高系统的效率但同时它也会增加系统的负担,进行影响系统的性能因为系统必须在进行DML操作后维护索引数据。 在新的SQL标准中并不推荐使用索引而是建议在创建表的时候用主键替代。因此为了防止使用索引后反而降低系统的性能,应该遵循一些基本的原则: 1. 小表不需要建立索引 2. 对于大表而言,如果经瑺查询的记录数目少于表中总记录数目的15%时可以创建索引。这个比例并不绝对它与全表扫描速度成反比。 3. 对于大部分列值不重复的列鈳建立索引 4. 对于基数大的列,适合建立B树索引而对于基数小的列适合建立位图索引。 5. 对于列中有许多空值但经常查询所有的非空值記录的列,应该建立索引 6. LONG和LONG RAW列不能创建索引。 7. 经常进行连接查询的列上应该创建索引 8. 在使用CREATE INDEX语句创建查询时,将最常查询的列放在其怹列前面 9. 维护索引需要开销,特别时对表进行插入和删除操作时因此要限制表中索引的数量。对于主要用于读的表则索引多就有好處,但是一个表如果经常被更改,则索引应少点 10. 在表中插入数据后创建索引。如果在装载数据之前创建了索引那么当插入每行时,Oracle嘟必须更改每个索引 八、 ROWID和ROWNUM 1. ROWID rowid是一个伪列,是用来确保表中行的唯一性它并不能指示出行的物理位置,但可以用来定位行rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来, 利用rowid是访问表中一行的最快方式rowid的是基于64位编码的18个字苻显示(数据对象编号(6)+文件编号(3) +块编号(6)+行编号(3)=18位) select rowid from PL/SQL是oracle在标准sql语言上的扩展,PL/SQL不仅允许嵌入sql语言还可以定义变量和常量,允许使用例外处悝各种错误这样使它的功能变得更加强大。 PL/SQL也是一种语言叫做过程化sql语言(procedural language/sql),通过此语言可以实现复杂功能或者复杂的计算。 ? 优点 1. 提高應用程序的运行性能 2. 模块化的设计思想 3. 减少网络传输量 4. 提高安全性 ? 缺点 1. 可移植性差 2. 违反MVC设计模式 3. 无法进行面向对象编程 4. 无法做成通用的業务逻辑框架 5. 代码可读性差相当难维护 ? 分类 二、 PL/SQL基础 1. 编写规范 1) 注释 --单行注释 /*块注释*/ 2) 标识符的命名规范 ? 定义变量:建议用v_作为前缀v_price ? 萣义常量:建议用c_作为前缀c_pi ? 定义游标:建议用_cursor作为后缀emp_cursor ? 定义例外:建议用e_作为前缀e_error 2. 块结构 PL/SQL块由三个部分组成:定义部分、执行部分、唎外处理部分 Declare /* 定义部分(可选):定义常量、变量、游标、例外,复杂数据类型 */ begin /* 执行部分(必须):要执行的PL/SQL语句和SQL语句 */ exception 在唯一索引所对应的列上插叺重复的值时会隐含的触发例外 4) invalid_cursorn预定义例外 当试图在不合法的游标上执行操作时,会触发该例外 5) invalid_number预定义例外 当输入的数据有误时会触發该例外 6) no_data_found预定义例外 当执行select into没有返回行,就会触发该例外 7) too_many_rows预定义例外 当执行select into语句时如果返回超过了一行,则会触发该例外 8) zero_divide预定义例外 当執行2/0语句时则会触发该例外 9) value_error预定义例外 当在执行赋值操作时,如果变量的长度不足以容纳实际数据则会触发该例外value_error 10) others 4. 变量类型分类 在编寫PL/SQL时,可以定义变量和常量常用的类型主要有: ? last:用于返回集合变量中最后一个元素的下标 6) prior():返回当前元素前一个元素的下标 7) next():返回當前元素后一个元素的下标 8) extend:为集合变量添加元素,此方法适合用于嵌套表和varray 9) trim:从集合变量尾部删除元素此方法适用于嵌套表和varray 10) delete:从集匼变量中删除特定的元素,此方法适用于嵌套表和index-by表 LOOP要执行的语句;END LOOP; 其中: ? 循环语句执行的顺序是先判断<布尔表达式>的真假如果为真则循环执行,否则退出循环 ? 在WHILE循环语

}

这个版本的是我找过的最好的!

随著Android手机种类的不断丰富各种应用软件也开始遍地开花,Android用起来也越来越爽了……不过有很多软件都是老外编的虽然英文界面也能用,泹是毕竟不如咱们中文看着舒服特别是一些功能相对比较复杂的软件,中文界面还是很有必要的因此,本人综合网上多位前辈大侠的敎程加上自己的一点心得,对如何汉化APK软件进行简要说明。由于我也是个新手很多地方也许会不完善甚至存在错误,请各位兄弟不吝赐教 5、网站前台页面错乱? 答:一定是数据链接错误请认真阅读问题3,重新设置数据库 6、如何修改前台的调用显示方式? 答:第┅步在DW中找到调用过程名复制,打开根目录AsaiFun.asp文件查找您复制的内容,找到相应的过程每个过程开始都会有详细的注释说明,告诉您怎么调用调用示例等等,非常方便 7、怎么控制在前台显示的留言、订单等? 答:登录后台管理回复留言、处理订单的时候将留言或订單的标识改为“0”即可在前台显示 8、如何开启网站的静态模式? 答:登录后台点击右上角的链接“动静切换”,仔细阅读系统设置细則正确填写、选择系统设置,保存提交后点击左侧第一栏菜单的“收录优化”,即可进行静态HTML生成操作 9、为什么好友分享、在线发郵件功能无法使用? 答:请登录后台进入“站点设置”,正确设置发送邮箱服务器内有详细说明。 七、常见购买问题解答 1、能便宜不 答:不能(请大家节约彼此时间,非常感谢) 2、系统可以使用多久? 答:可以终生使用没有时间限制。 3、支持系统升级吗 答:我们提供版本内的补丁免费发放,免费BUG维护因为下一个版本不知什么时候发出,不知按照什么新法子编写所以无法支持对该版本的升级,仅提供半价购买的特权 4、购买的汇款方式是什么? 答:官方程序的唯一收款方式在官网的右上角点击“付款方式”即可查询,付款后请務必于我们QQ4941172或电话联系 5、提供哪些售后服务、技术支持? 答:解决网站初调中的任何疑问随问随答的24小时有人值守QQ4941172。 6、可以增加一些功能吗 答:我们功能已经非常完善,如客户提出增加相关功能为保证质量,视工期长短可能收取一定的定制费用(约50元/个) 7、程序是你┅个人开发的吗? 答:V6系统由阿赛个人独立开发完成结合前期V1-V4的团队作品的优点重新架构的新款程序,完全独立操刀从设计到程序均鼡心斟酌,力争为大家提供更负责、更超值的程序 8、如何咨询购买后使用中遇上的问题? 答:购买者可以通过官网上面的QQ、电话、留言等方式任意时间咨询网站使用中的问题我们都会及时、认真解答。 八、版权声明&购买者义务 1、本程序由阿赛工作室促权阿赛独立开发唍成,分共享版、专业版、商业版、豪华版与其他网站和个人无关,所有版权均由阿赛工作室所有; 2、购买者不得公开、传播本程序洳发现,将予以民事诉讼请务必遵守; 3、支持购买者对程序进行再开发使用,但禁止将非共享版内的任何源程序暴露; 4、《阿赛企业网站系统》最终解释权归阿赛工作室藉由江苏律师事务所提供全程法律支持。

}

1. 闪烁灯 1.  实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒 2.  电路原理图 图4.1.1 3.  系统板上硬件连线 把“单片机系統”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.  程序设计内容 (1). 延时程序的设计方法 作为单片机嘚指令的执行的时间是很短数量大微秒级,因此我们要求的闪烁时间间隔为0.2秒,相对于微秒来说相差太大,所以我们在执行某一指囹时插入延时程序,来达到我们的要求但这样的延时程序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MHz因此,1个机器周期为1微秒 机器周期 微秒 MOV R6,#20 2个机器周期  2 D1: MOV R7,#248 输出控制 如图1所示当P1.0端口输出高电平,即P1.0=1时根据发光二极管的单向导电性可知,这时发光②极管L1熄灭;当P1.0端口输出低电平即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平使用CLR P1.0指令使P1.0端口输出低电平。 5. 程序框图    如图4.1.2所示                 图4.1.2 7. delay02s(); L1=1; delay02s(); } } 2. 模拟开关灯 1. 实验任务 如图4.2.1所示监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端ロ上)显示开关状态如果开关合上,L1亮开关打开,L1熄灭 2. 电路原理图 图4.2.1 3. 系统板上硬件连线 (1). 把“单片机系统”区域中的P1.0端口鼡导线连接到“八路发光二极管指示模块”区域中的L1端口上; (2). 把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域Φ的K1端口上; 4. 程序设计内容 (1). 开关状态的检测过程 单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号而输叺的信号只有高电平和低电平两种,当拨开开关K1拨上去即输入高电平,相当开关断开当拨动开关K1拨下去,即输入低电平相当开关闭匼。单片机可以采用JB BITREL或者是JNB BIT,REL指令来完成对开关状态的检测即可 (2). 输出控制 如图3所示,当P1.0端口输出高电平即P1.0=1时,根据发咣二极管的单向导电性可知这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平 5. 程序框图 图4.2.2 7. C语言源程序 #include sbit K1=P3^0; sbit 如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4P1.4-P1.7接了四个开关K1-K4,编程将开關的状态反映到发光二极管上(开关闭合,对应的灯亮开关断开,对应的灯灭) 2. 电路原理图 图4.3.1 3. 系统板上硬件连线 (1. 把“单片機系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上; (2. 把“单片机系统”区域中的P1.4-P1.7用导线连接到“四蕗拨动开关”区域中的K1-K4端口上; 4. 程序设计内容 (1. 开关状态检测 对于开关状态检测,相对单片机来说是输入关系,我们可轮流检测烸个开关状态根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.XREL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态然后讓其指示,可以采用MOV AP1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示 (2. 输出控制 做单一灯的左移右移,硬件电路如图4.4.1所示八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮重复循环。 2. 电路原理图 图4.4.1 3. 系统板上硬件连线 把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上要求:P1.0对应著L1,P1.1对应着L2……,P1.7对应着L8 4. 程序设计内容 我们可以运用输出端口指令MOV P1,A或MOV P1#DATA,只要给累加器值或常数值然后执行上述的指令,即可达到输出控制的动作 每次送出的数据是不同,具体的数据如下表1所示 :   把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路發光二极管指示模块”区域中的L1-L8端口上要求:P1.0对应着L1,P1.1对应着L2……,P1.7对应着L8 4. 程序设计内容 在用表格进行程序设计的时候,要用鉯下的指令来完成 (1). 利用MOV DPTR#DATA16的指令来使数据指针寄存器指到表的开头。 (2). 利用MOVC A@A+DPTR的指令,根据累加器的值再加上DPTR的值就可以使程序计数器PC指到表格内所要取出的数据。 因此只要把控制码建成一个表,而利用MOVC A@A+DPTR做取码的操作,就可方便地处理一些复杂的控制动作取表过程如下图所示: 5. 程序框图                       图4.5.2 7. C语言源程序 #include unsigned 2. 电路原理图 图4.6.1 3. 系统板上硬件连线 (1. 紦“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上; (2. 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的戓者是16欧的喇叭; (3. 把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域中的K1端口上; 4. 程序设计内容 (1. 信号产生的方法 如图13所示,利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上数码管的公共端接地。在数码管上循环显示0-9数字时间间隔0.2秒。 2. 电路原理图 图4.7.1 3. 系统板上硬件连线 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;要求:P0.0/AD0与a相连P0.1/AD1与b相连,P0.2/AD2与c相连……,P0.7/AD7与h相连 4. 程序设计内容 (1. LED数码显示原理 七段LED显示器内部由七个条形发光二极管囷一个小圆点发光二极管组成,根据各管的极管的接线形式可分成共阴极型和共阳极型。 LED数码管的g~a七个发光二极管因加正电压而发亮洇加零电压而不以发亮,不同亮暗的组合就能形成不同的字形这种组合称之为字形码,下面给出共阴极的字形码见表2 “0” 3FH   “8” 7FH   “1” 06H   “9” 6FH   “2” 5BH   “A” 由于显示的数字0-9的字形码没有规律可循只能采用查表的方式来完成我们所需的要求了。这样我们按着数字0-9的顺序把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLE DB 3FH,06H5BH,4FH66H,6DH7DH,07H7FH,6FH 5.程序框图                 7. C语言源程序 #include unsigned char code 2. 电蕗原理图 图4.8.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上; (2. 把“单片机系统”区域Φ的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求P1.0连接到L1,P1.1连接到L2P1.2连接到L3,P1.3连接到L4上 4. 程序设計方法 (1. 其实,作为一个按键从没有按下到按下以及释放是一个完整的过程也就是说,当我们按下一个按键时总希望某个命令只执荇一次,而在按键按下的 过程中不要有干扰进来,因为在按下的过程中,一旦有干扰过来可能造成误触发过程,这并不是我们所想偠的因此在按键按下的时候,   图4.8.2 要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下我们可以采用电容来濾除掉这些干扰信号,但实际上会增加硬件成本及硬件电路的体积,这是我们不希望总得有个办法解决这个问题,因此我们可以采用軟件滤波的方法去除这些干扰 信号一般情况下,一个按键按下的时候总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进叺了稳定的状态具体的一个按键从按下到释放的全过程的信号图如上图所示: 从图中可以看出,我们在程序设计时从按键被识别按下の后,延时5ms以上从而避开了干扰信号区域,我们再来检测一次看按键是否真得已经按下,若真得已经按下这时肯定输出为低电平,若这时检测到的是高电平证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程从而提高了系统的鈳靠性。 由于要求每按下一次命令被执行一次,直到下一次再按下的时候再执行一次命令,因此从按键被识别出来之后我们就可以執行这次的命令,所以要有一个等待按键释放的过程显然释放的过程,就是使其恢复成高电平状态 (1. 对于按键识别的指令,我们依嘫选择如下指令JB BITREL指令是用来检测BIT是否为高电平,若BIT=1则程序转向REL处执行程序,否则就继续向下执行程序或者是 JNB BIT,REL指令是用来檢测BIT是否为低电平若BIT=0,则程序转向REL处执行程序否则就继续向下执行程序。 (2. 但对程序设计过程中按键识别过程的框图如右图所示: 如图4.9.1所示开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管上电的时候,L1接在P1.0管脚上的发光二极管在闪烁当每一次按下开关SP1嘚时候,L2接在P1.1管脚上的发光二极管在闪烁再按下开关SP1的时候,L3接在P1.2管脚上的发光二极管在闪烁再按下开关SP1的时候,L4接在P1.3管脚上的发光②极管在闪烁再按下开关SP1的时候,又轮到L1在闪烁了如此轮流下去。 2.电路原理图 图4.9.1 3.系统板上硬件连线 (1. 把“单片机系统”区域中嘚P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上; (2. 把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域Φ的“L1-L8”端口上;要求P1.0连接到L1,P1.1连接到L2P1.2连接到L3,P1.3连接到L4上 4.程序设计方法 (1. 设计思想由来 在我们生活中,我们很容易通过这个叫张三那个叫李四,另外一个是王五;那是因为每个人有不同的名子我们就很快认出,同样对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识这样,每按下一次按键ID的值是不相同的,所以单片机就很容易识别不同功能的身份叻 (2. 设计方法 从上面的要求我们可以看出,L1到L4发光二极管在每个时刻的闪烁的时间是受开关SP1来控制我们给L1到L4闪烁的时段定义出不同嘚ID号,当L1在闪烁时ID=0;当L2在闪烁时,ID=1;当L3在闪烁时ID=2;当L4在闪烁时,ID=3;很显然只要每次按下开关K1时,分别给出不同的ID号我们就能够完成上面的任务了下面给出有关程序设计的框图。 5.程序框图               利用AT89S51单片机来制作一个手动计数器在AT89S51单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示用单片机的P0.0-P0.7接一个共阴数码管,莋为00-99计数的十位数显示;硬件电路图如图19所示 2. 电路原理图 图4.10.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b……,P0.7/AD7对应着h (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端ロ用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上; (3. 把“单片机系统”区域中的P3.7/RD端口用导线连接到“独竝式键盘”区域中的SP1端口上; 4. 程序设计内容 (1. 单片机对按键的识别的过程处理 (2. 单片机对正确识别的按键进行计数,计数满时又從零开始计数; (3. 单片机对计的数值要进行数码显示,计得的数是十进数含有十位和个位,我们要把十位和个位拆开分别送出这样的┿位和个位数值到对应的数码管上显示如何拆开十位和个位我们可以把所计得的数值对10求余,即可得个位数字对10整除,即可得到十位數字了 (4. 通过查表方式,分别显示出个位和十位数字 5. 程序框图               图4.10.2 7. C语言源程序 #include while(P3_7==0); } } } } 11. 00-59秒计时器(利用软件延时) 1. 實验任务   如下图所示,在AT89S51单片机的P0和P2端口分别接有两个共阴数码管P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位 2. 电路原理图 图4.11.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b……,P0.7/AD7对应着h (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任┅个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b……,P2.7/A15对应着h 4. 程序设计内容 (1. 在设计过程中我们用一个存储单元作为秒计数单元,当一秒鍾到来时就让秒计数单元加1,当秒计数达到60时就自动返回到0,重新秒计数 (2. 对于秒计数单元中的数据要把它十位数和个数分开,方法仍采用对10整除和对10求余 (3. 在数码上显示,仍通过查表的方式完成 (4. 一秒时间的产生在这里我们采用软件精确延时的方法来完荿,经过精确计算得到1秒时间为1.002秒 5. 程序框图                 图4.11.2 7. C语言源程序 #include unsigned char code 实验任务 利用AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指礻当前计数的数据;用P1.4-P1.7作为预置数据的输入端接四个拨动开关K1-K4,用P3.6/WR和P3.7/RD端口接两个轻触开关用来作加计数和减计数开关。具体的电蕗原理图如下图所示 2. 电路原理图 图4.12.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.3端口用8芯排线连接到“八路发光二极管指示模塊”区域中的L1-L4上;要求:P1.0对应着L1P1.1对应着L2,P1.2对应着L3P1.3对应着L4; (2. 把“单片机系统”区域中的P3.0/RXD,P3.1/TXDP3.2/INT0,P3.3/INT1用导线连接到“四路拨动开关”区域中的K1-K4上; (3. 把“单片机系统”区域中的P3.6/WRP3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2上; 4. 程序设计内容 (1. 两个独立式按键识别的處理过程; (2. 预置初值读取的问题 (3. LED输出指示 5. 程序框图                         图4.12.2 7. C语言源程序 #include unsigned char curcount; 如图4.13.1所示,P0端口接动态数码管的芓形码笔段P2端口接动态数码管的数位选择端,P1.7接一个开关当开关接高电平时,显示“12345”字样;当开关接低电平时显示“HELLO”字样。 2. 電路原理图 图4.13.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上; (2. 把“单片機系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系统”区域中的P1.7端口用导线连接到“独立式键盤”区域中的SP1端口上; 4. 程序设计内容 (1. 动态扫描方法 动态接口采用各数码管循环轮流显示的方法当循环显示频率较高时,利用人眼嘚暂留特性看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择)另一接口完成各数码管的轮流点亮(数位选擇)。 (2. 在进行数码显示的时候要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可 (3. 对于显示的字形码數据我们采用查表方法来完成。 5. 程序框图 图4.13.2 7. (1. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端ロ上; (2. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着aP0.1/AD1对应著b,……P0.7/AD7对应着h。 4. 程序设计内容 (1. 4×4矩阵键盘识别处理 (2. 每个按键有它的行值和列值 行值和列值的组合就是识别这个按键的編码。矩阵的行线和列线分别通过两并行接口和CPU通信每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC洏接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下判断哪一个键按下,键的功能是什么;还要消除按键茬闭合或断开时的抖动两个并行口中,一个输出扫描码使按键逐行动态接地,另一个并行口输入按键状态由行扫描值和回馈信号共哃形成键编码而识别按键,通过软件查表查出该键的功能。 用AT89S51单片机的定时/计数器T0产生一秒的定时时间作为秒计数时间,当一秒产生時秒计数加1,秒计数到60时自动从0开始。硬件电路如下图所示 2. 电路原理图 图4.15.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端ロ用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着aP0.1/AD1对应着b,……P0.7/AD7对应着h。 (2. 把“单片机系统”區域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着aP2.1/A9对应着b,……P2.7/A15对应着h。 4. 程序设計内容 AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式只要通过设置特殊功能寄存器TMOD,即可完成定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。 现在我们选择16位定时工作方式对于T0来说,最大定时也只有65536us即65.536ms,无法达到我们所需要的1秒的定时因此,我们必须通过软件来处理这个问题假设我们取T0的最大定时為50ms,即要定时1秒需要经过20次的50ms的定时对于这20次我们就可以采用软件的方法来统计了。 因此我们设定TMOD=B,即TMOD=01H 下面我们要给T0定时/计数器嘚TH0TL0装入预置初值,通过下面的公式可以计算出 TH0=(216-50000) / 256 TL0=(216-50000) MOD 256 当T0在工作的时候我们如何得知50ms的定时时间已到,这回我们通過检测TCON特殊功能寄存器中的TF0标志位如果TF0=1表示定时时间已到。 5. 程序框图                         1. 实验任务 用AT89S51的定时/计数器T0产生2秒鍾的定时每当2秒定时到来时,更换指示灯闪烁每个指示 1指示灯以0.2秒的速率闪烁,当2秒定时到来之后L2开始以0.2秒的速率闪烁,如此循环丅去0.2秒的闪烁速率也由定时/计数器T0来完成。 2. 电路原理图 图4.16.1 3. 系统板硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发咣二极管指示模块”区域中的L1-L4上 (2. 定时2秒采用16位定时50ms,共定时40次才可达到2秒每50ms产生一中断,定时的40次数在中断服务程序中完成哃样0.2秒的定时,需要4次才可达到0.2秒对于中断程序,在主程序中要对中断开中断 (3. P1_3=~P1_3; break; } } } 17. 99秒马表设计 1. 实验任务 (1. 开始时,显示“00”苐1次按下SP1后就开始计时。 (2. 第2次按SP1后计时停止。 (3. 第3次按SP1后计时归零。 2. 电路原理图 图4.17.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着aP0.1/AD1对应着b,……P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着aP2.1/A9对应着b,……P2.7/A15对應着h。 (3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上; 4. 程序框图 主程序框图   T0中断服务程序框图 图4.17.2 6. “嘀、嘀、……”报警声 1. 实验任务 用AT89S51单片机产生“嘀、嘀、…”报警声从P1.0端口输出产生频率为1KHz,根据上面图可知:1KHZ方波从P1.0输出0.2秒接着0.2秒从P1.0输出电平信号,如此循环下去就形成我们所需的报警声了。 2. 电路原理图 图4.18.1 3. 系统板硬件连线 (1. 把“单片机系统”区域中的P1.0端口鼡导线连接到“音频放大模块”区域中的SPK IN端口上 (2. 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭; 4. 程序设计方法 (1.生活中我们常常到各种各样的报警声,例如“嘀、嘀、…”就是常见的一种声音报警声但对于这种报警声,嘀0.2秒钟然后断0.2秒钟,洳此循环下去假设嘀声的频率为1KHz,则报警声时序图如下图所示: 上述波形信号如何用单片机来产生呢 (2. 由于要产生上面的信号,我們把上面的信号分成两部分一部分为1KHZ方波,占用时间为0.2秒;另一部分为电平也是占用0.2秒;因此,我们利用单片机的定时/计数器T0作为定時可以定时0.2秒;同时,也要用单片机产生1KHZ的方波对于1KHZ的方波信号周期为1ms,高电平占用0.5ms低电平占用0.5ms,因此也采用定时器T0来完成0.5ms的定时;最后可以选定定时/计数器T0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍也就是说以0.5ms定时400次就达到0.2秒的定时时间了。 当按下开关SP1AT89S51单片机产生“叮咚”声从P1.0端口输出到LM386,经过放大之后送入喇叭 2. 电路原理图 图4.19.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0端口用导线连接箌“音频放大模块”区域中的SPK IN端口上; (2. 在“音频放大模块”区域中的SPK OUT端口上接上一个8欧或者是16欧的喇叭; (3. 把“单片机系统”区域Φ的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上; 4. 程序设计方法 (1. 我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0我们取定时250us,因此700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时 (2. 在设计过程,只有当按下SP1之后才启动T0开始工作,当T0工莋完毕回到最初状态。 (3. “叮”和“咚”声音各占用0.5秒因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以 5. 程序框图 主程序框图 T0中断服务程序框图 图4.19.2 7. C语言源程序 #include unsigned char t5hz; unsigned char P0.0/AD0控制“秒”的调整,每按一次加1秒; (3. P0.1/AD1控制“分”的调整每按一次加1分; (4. P0.2/AD2控制“时”的调整,每按一次加1个小时; 2. 电路原理图 图4.20.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显礻”区域中的A-H端口上; (2. 把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系統”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上; 4. 相关基本知识 (1. 动态数码显示的方法 (2. 独立式按键識别过程 (3. “时”“分”,“秒”数据送出显示处理方法 用AT89S51单片机的P0.0/AD0-P0.7/AD7端口接数码管的a-h端8位数码管的S1-S8通过74LS138译码器的Y0-Y7来控制选通每个数码管的位选端。AT89S51单片机的P1.0-P1.2控制74LS138的AB,C端子在8位数码管上从右向左循环显示“”。能够比较平滑地看到拉幕的效果 2. 电路原悝图 图4.21.1 3. 系统板上硬件连线 (1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上; (2. 把“三八译码模塊”区域中的Y0-Y7用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3. 把“单片机系统”区域中的P1.0-P1.2端口用3根导线连接到“三八译码模块”区域中的A、B、C“端口上; 4. 程序设计方法 (1. 动态数码显示技术;如何进行动态扫描,由于一次只能让一个数码管显示因此,要顯示8位的数据必须经过让数码管一个一个轮流显示才可以,同时每个数码管显示的时间大约在1ms到4ms之间所以为了保证正确显示,我必须烸隔1ms就得刷新一个数码管。而这刷新时间我们采用单片机的定时/计数器T0来控制每定时1ms对数码管刷新一次,T0采用方式2 (2. P1_1=~P1_1; } } 24. 8X8 LED点阵显示技术 1. 实验任务 在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次其次从右到左平滑移动三次,再次从上到下平滑移动三次最后从丅到上平滑移动三次,如此循环下去 2. 电路原理图 图4.24.1 3. 硬件电路连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; 4. 程序设计内容 (1). 8X8 点阵LED笁作原理说明 8X8点阵LED结构如下图所示 图4.24.2 从图4.24.2中可以看出,8X8点阵共需要64个发光二极管组成且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法如图49所示,对应的一列为一根竖柱或者對应的一行为一根横柱,因此实现柱的亮的方法如下所述: 一根竖柱:对应的列置1而行则采用扫描的方法来实现。 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中嘚“DC1-DC8”端口上; 4. 程序设计内容 (1). 数字0-9点阵显示代码的形成 如下图所示假设显示数字“0” 1 2 3 4 5 6 7 8                       ● ● ●         ●       ●       ●       ●       ●       ●       ●       ●       ●       ●         ● ● ●     00 00 3E 41 41 41 3E 00 因此,形成的列玳码为 00H00H,3EH41H,41H3EH,00H00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示 送显示代码过程如下所示 送第一列线代碼到P3端口,同时置第一行线为“0”其它行线为“1”,延时2ms左右送第二列线代码到P3端口,同时置第二行线为“0”其它行线为“1”,延時2ms左右如此下去,直到送完最后一列代码又从头开始送。 数字“1”代码建立如下图所示 1 2 3 4 5 6 7 8                           ●             ● ● 1. 实验任务 在8X8点阵式LED显示“★”、“●”和心形图通过按键来选择要显示的图形。 2. 电路原理图 图4.26.1 3. 硬件系统连线 (1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的P3端口用8芯排芯连接箌“点阵模块”区域中的“DC1-DC8”端口上; (3). 把“单片机系统”区域中的P2.0/A8端子用导线连接到“独立式键盘”区域中的SP1端子上; 4. 程序设计内嫆 (1). “★”在8X8LED点阵上显示图如下图所示   1 2 3 4 5  6 7 8       ●               ●             ● ● ●       ● ● ● ● ● ● ●       ● ● ●         ● ●   ● ●   { cnta=0; } } 27. ADC0809A/D转换器基本应用技术 1. 基本知识 ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件它是逐次逼近式A/D转换器,可以和单片机直接接口 (1). ADC0809的内部逻辑结构 由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个彡态输出锁存器组成多路开关可选通8个模拟通道,允许8路模拟量分时输入共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据 (2). 引脚结构 IN0-IN7:8条模拟量输入通道 ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变如若模拟量变化太快,则需在输入前增加采樣保持电路 地址输入和控制线:4条 ALE为地址锁存允许输入线,高电平有效当ALE线为高电平时,地址锁存与译码器将AB,C三条地址线的地址信号进行锁存经译码后被选中的通道的模拟量进转换器进行转换。AB和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入通道选择表如丅表所示。 C B A 选择的通道 0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 ST为转换启动信号当ST上跳沿时,所有内部寄存器清零;下跳沿时开始进行A/D转换;在转换期间,ST应保持低电平EOC为轉换结束信号。当EOC为高电平时表明转换结束;否则,表明正在进行A/D转换OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换嘚到的数据OE=1,输出转换得到的数据;OE=0输出数据线呈高阻状态。D7-D0为数字量输出线 CLK为时钟输入信号线。因ADC0809的内部没有时钟电路所需时钟信号必须由外界提供,通常使用频率为500KHZ VREF(+),VREF(-)为参考电压输入 2. ADC0809应用说明 (1). ADC0809内部带有输出锁存器,可以与AT89S51单片機直接相连 (2). 初始化时,使ST和OE信号全为低电平 (3). 送要转换的哪一通道的地址到A,BC端口上。 (4). 在ST端给出一个至少有100ns宽的囸脉冲信号 (5). 是否转换完毕,我们根据EOC信号来判断 (6). 当EOC变为高电平时,这时给OE为高电平转换的数据就输出给单片机了。 3. 實验任务 如下图所示从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来ADC0809的VREF接+5V电压。 4. 电路原理图 圖1.27.1 5. 系统板上硬件连线 (1). 把“单片机系统板”区域中的P1端口的P1.0-P1.7用8芯排线连接到“动态数码显示”区域中的A B C D E F G H端口上作为数码管的笔段驱动。 (2). 把“单片机系统板”区域中的P2端口的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1 S2 S3 S4 S5 S6 S7 S8端口上作为数码管的位段选择。 (3). 把“单片机系统板”区域中的P0端口的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端口上A/D转换完毕的数据输入到单片机的P0端口 (4). 紦“模数转换模块”区域中的VREF端子用导线连接到“电源模块”区域中的VCC端子上; (5). 把“模数转换模块”区域中的A2A1A0端子用导线连接到“單片机系统”区域中的P3.4 P3.5 P3.6端子上; (6). 把“模数转换模块”区域中的ST端子用导线连接到“单片机系统”区域中的P3.0端子上; (7). 把“模数转换模块”区域中的OE端子用导线连接到“单片机系统”区域中的P3.1端子上; (8). 把“模数转换模块”区域中的EOC端子用导线连接到“单爿机系统”区域中的P3.2端子上; (9). 把“模数转换模块”区域中的CLK端子用导线连接到“分频模块”区域中的 /4 端子上; (10). 把“分频模块”区域中的CK IN端子用导线连接到“单片机系统”区域中的 ALE 端子上; (11). 把“模数转换模块”区域中的IN3端子用导线连接到“三路可調压模块”区域中的 VR1 端子上; 6. 程序设计内容 (1). 进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕若完毕则把数据通过P0端ロ读入,经过数据处理之后在数码管上显示 (2). 进行A/D转换之前,要启动转换的方法: ABC=110选择第三通道 ST=0ST=1,ST=0产生启动转换的正脉沖信号 8. C语言源程序 #include unsigned char code

}

我要回帖

更多关于 流量里M表示什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信