课程设计内容.docx
《课程设计内容.docx》由会员分享,可在线阅读,更多相关《课程设计内容.docx(46页珍藏版)》请在冰点文库上搜索。
课程设计内容
目录内容可按需要自行调整
摘要
本设计中,采用了新型数字温度传感器DS18B20,其特点是具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
本设计使用温度传感器所环境温度情况检测出来,再采用AT89S52单片机进行控制,可设置温度报警,采用数码管温度的显示,。
在本系统设计中共有以下四个模块组成:
输入模块、单片机控制模块、数码管显示模块、温度传感器模块。
能实现以下两个基本功能:
3位温度的显示、可设置报警温度。
关键词:
矩阵键盘;AT89S52;DS18B20;数字温度计
1概述
1.1Android
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于便携设备,如智能手机和平板电脑。
目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
Android操作系统最初由AndyRubin开发,主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良随后,逐渐扩展到平板电脑及其他领域上。
2008年10月第一部Android智能手机发布。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。
1.2JavaCard
JavaCard技术主要是让智慧卡或与智慧卡相近的装置上,以具有安全防护性的方式来执行小型的JavaApplet,此技术也被广泛运用在SIM卡、提款卡上。
。
Java卡是Java平台中最小的子集,也是一种特殊的智能卡。
智能卡是一种嵌入计算机芯片的卡片,广泛应用于通信、交通、金融、证券和保险等领域。
智能卡分为两大类:
一类是存储器卡,另一类是微处理器卡。
存储器卡仅仅被用于存储器数据。
微处理器卡有数据处理的功能:
它有自己的CPU、I/O端口、存储器和操作系统,可以被看作是一台微型电脑;可以安装并运行小的应用程序,通过串行通信接口与外部通信。
ISO(国际标准组织)制定了智能卡的国际标准ISO7816。
1.3SmartCard
SmartCard的中文名字叫做智能卡,其外型就和我们常用的一般银行储蓄卡大小一样,都是用PVC、ABS或更高级的合成材料做成的塑胶卡片,但是多了一块指甲大小的IC芯片。
这个芯片会让原本普通的一张卡片拥有资料控管与逻辑运算的能力,并可与外部的设备进行通讯。
一张标准的SmartCard由三个要素构成:
符合ISO标准规定的塑胶卡片(PVC、ABS或更高级的合成材料构成);由微处理器或是存储器和控制逻辑所组合而成的芯片(ICCHIP);另外可提供与外界通讯的界面组合。
卡片上的微型芯片至少可储存八个千位组数量的资料,相当于一篇1600字的文章,这样可大量存储我们日常的生活工作资料;因其内设有密码装置所以安全性较磁条卡高,可储存个人资料、消费信息而可使用于各种金融性与非金融性之服务当中,如大楼进出的门禁系统、商店的各种消费活动、银行的多事上、个人的保健资料等等,因此将成为卡片市场未来发展的重要趋势。
1.4Seek-For-Android
Seek-For-Android的全称是SecureElementEvaluationKitfortheAndroidplatform-the'SmartCardAPI',其是指Android平台通过SmartCardAPI,Android程序可以和一些安全机制的Card进行通讯,如SIMcard,embeddedSecureElements,MobileSecurityCard或者一些其他的Card。
2Android平台介绍
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:
阿童木(Android Beta),发条机器人(Android1.0)。
后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。
甜点命名法开始于 Android1.5 发布的时候。
作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:
纸杯蛋糕(Android1.5),甜甜圈(Android1.6),松饼(Android2.0/2.1),冻酸奶(Android2.2),姜饼(Android2.3),蜂巢(Android3.0),冰激凌三明治(Android4.0),果冻豆(JellyBean,Android4.1和Android4.2)。
Android的系统架构和其操作系统一样,采用了分层的架构。
从架构图图1看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
图1Android结构图
应用程序:
Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。
所有的应用程序都是使用JAVA语言编写的。
应用程序框架:
开发人员也可以完全访问核心应用程序所使用的API框架。
该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。
同样,该应用程序重用机制也使用户可以方便的替换程序组件。
隐藏在每个应用后面的是一系列的服务和系统,其中包括:
丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists),网格(Grids),文本框(Textboxes),按钮(Buttons),甚至可嵌入的web浏览器。
内容提供器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layoutfiles)。
通知管理器(NotificationManager)使得应用程序可以在状态栏中显示自定义的提示信息。
活动管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。
系统运行库:
Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。
它们通过Android应用程序框架为开发者提供服务。
以下是一些核心库:
系统C库-一个从BSD继承来的标准C系统函数库(Libc),它是专门为基于Embeddedlinux的设备定制的。
媒体库-基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。
编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。
SurfaceManager-对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
LibWebCore-一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。
系统内核:
Android是运行于Linuxkernel之上,但并不是GNU/Linux。
因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。
Android又以Bionic取代Glibc、以Skia取代Cairo、再以opencore 取代FFmpeg 等等。
Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到Userspace,使得Linuxdriver与Linuxkernel彻底分开。
Bionic/Libc/Kernel/并非标准的Kernelheaderfiles。
Android的Kernelheader是利用工具由LinuxKernelheader所产生的,这样做是为了保留常数、数据结构与宏。
Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagement),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。
下载Android源码之前,先要安装其构建工具Repo来初始化源码。
Repo是Android用来辅助Git工作的一个工具。
硬件抽像层:
Android的 HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。
HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成Kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。
HALstub是一种代理人(Proxy)的概念,Stub是以*.so档的形式存在。
Stub向HAL“提供”操作函数(Operations),并由Androidruntime向HAL取得Stub的Operations,再Callback这些操作函数。
HAL里包含了许多的Stub(代理人)。
Runtime只要说明“类型”,即ModuleID,就可以取得操作函数。
中介软件
操作系统与应用程序的沟通桥梁,应用分为两层:
函数层(Library)和虚拟机(VirtualMachine)。
Bionic是Android改良libc的版本。
Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。
Surfaceflinger是就2D或3D的内容显示到屏幕上。
Android使用工具链(Toolchain)为Google自制的BionicLibc。
Android采用OpenCORE作为基础多媒体框架。
OpenCORE可分7大块:
PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。
Android使用skia为核心图形引擎,搭配OpenGL/ES。
skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。
2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,Skia也是GoogleChrome的图形引擎。
Android的多媒体数据库采用SQLite数据库系统。
数据库又分为共用数据库及私用数据库。
用户可通过ContentResolver类(Column)取得共用数据库。
Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。
Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。
Dalvik虚拟机可以有多个实例(Instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。
Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。
安全权限机制
Android本身是一个权限分立的操作系统。
在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。
系统的各部分也分别使用各自独立的识别方式。
Linux就是这样将应用与应用,应用与系统隔离开。
系统更多的安全功能通过权限机制提供。
权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。
Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。
这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。
安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。
从用户角度看,一款Android应用通常会要求如下的权限:
拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。
一款应用应该根据自身提供的功能,要求合理的权限。
用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。
如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。
Android四大组件:
Android开发四大组件分别是:
活动(Activity):
用于表现功能。
服务(Service):
后台运行服务,不提供界面呈现。
广播接收器(BroadcastReceiver):
用于接收广播。
内容提供商(ContentProvider):
支持在多个应用中存储和读取数据,相当于数据库。
活动
Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。
在Android的程序当中,Activity一般代表手机屏幕的一屏。
如果把手机比作一个浏览器,那么Activity就相当于一个网页。
在Activity当中可以添加一些Button、Checkbox等控件。
可以看到Activity概念和网页的概念相当类似。
一般一个Android应用是由多个Activity组成的。
这多个Activity之间可以进行相互跳转,例如,按下一个Button 按钮后,可能会跳转到其他的Activity。
和网页跳转稍微有些不一样的是,Activity之间的跳转有可能返回值,例如,从ActivityA跳转到ActivityB,那么当ActivityB运行结束的时候,有可能会给ActivityA一个返回值。
这样做在很多时候是相当方便的。
当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。
用户可以通过回退操作返回到以前打开过的屏幕。
可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。
服务
Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。
Service是没有界面的长生命周期的代码。
Service 是一种程序,它可以运行很长时间,但是它却没有用户界面。
这么说有点枯燥,来看个例子。
打开一个音乐播放器的程序,这个时候若想上网了,那么,打开Android浏览器,这个时候虽然已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继续一首接着一首的播放。
其实这个播放就是由播放音乐的Service进行控制。
当然这个播放音乐的Service也可以停止,例如,当播放列表里边的歌曲都结束,或者用户按下了停止音乐播放的快捷键等。
Service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
开启Service有两种方式:
(1)Context.startService():
Service会经历onCreate->onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);StopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用StopService的话,Service会一直在后台运行。
该Service的调用者再启动起来后可以通过stopService关闭Service。
注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者StopSelf(),他都会被停止。
补充说明:
传递给StartService(0的Intent对象会传递给onStart()方法。
调用顺序为:
onCreate-->onStart(可多次调用)-->onDestroy。
(2)Context.bindService():
Service会经历onCreate()-->onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。
这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind-->onDestroyed相应退出,所谓绑定在一起就共存亡了。
广播接收器
在Android中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制。
而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。
可以使用BroadcastReceiver来让应用对一个外部的事件做出响应。
这是非常有意思的,例如,当电话呼入这个外部事件到来的时候,可以利用BroadcastReceiver进行处理。
例如,当下载一个程序成功完成的时候,仍然可以利用BroadcastReceiver进行处理。
BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。
BroadcastReceiver通过NotificationManager来通知用户这些事情发生了。
BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。
只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。
各种应用还可以通过使用Context.sendBroadcast()将它们自己的IntentBroadcasts广播给其他应用程序。
注册BroadcastReceiver有两种方式:
(1)在AndroidManifest.xml进行注册。
这种方法有一个特点即使应用程序已经关闭了,但这个BroadcastReceiver依然会接受广播出来的对象,也就是说无论这个应用程序时开还是关都属于活动状态都可以接受到广播的事件;
(2)在代码中注册广播。
第一种俗称静态注册,第二种俗称动态注册,这两种注册BroadcastReceiver的区别:
动态注册较静态注册灵活。
实验证明:
当静态注册一个BroadcastReceiver时,不论应用程序是启动与否。
都可以接受对应的广播。
动态注册的时候,如果不执行unregisterReceiver();方法取消注册,跟静态是一样的。
但是如果执行该方法,当执行过以后,就不能接受广播了。
内容提供
ContentProvider是Android提供的第三方应用数据的访问方案。
在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。
Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是ContentProvider。
应用想对外提供的数据,可以通过派生ContentProvider类,封装成一枚ContentProvider,每个ContentProvider都用一个uri作为独立的标识,形如:
content:
//com.xxxxx。
所有东西看着像REST的样子,但实际上,它比REST更为灵活。
和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。
另外,ContentProvider不和REST一样只有uri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影,选择和排序。
查询到的结果,以Cursor(参见:
Reference/Android/Database/Cursor.html)的形式进行返回,调用者可以移动Cursor来访问各列的数据。
ContentProvider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。
ContentProvider内部,常用数据库来实现,Android提供了强大的Sqlite支持,但很多时候,也可以封装文件或其他混合的数据。
在Android中,ContentResolver是用来发起ContentProvider的定位和访问的。
不过它仅提供了同步访问的ContentProvider的接口。
但通常,ContentProvider需要访问的可能是数据库等大数据源,效率上不足够快,会导致调用线程的拥塞。
因此Android提供了一个AsyncQueryHandler(参见:
Reference/Android/Content/AsyncQueryHandler.html),帮助进行异步访问ContentProvider。
在各大组件中,Service和ContentProvider都是那种需要持续访问的。
Service如果是一个耗时的场景,往往会提供异步访问的接口,而ContentProvider不论效率如何,都提供的是约定的同步访问接口。
编辑本段平台优势
一、开放性
在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。
显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。
开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
二、挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营