3986.net
小网站 大容量 大智慧
当前位置:首页 >> 信息与通信 >>

51单片机嵌入式系统设计课程设计_图文

一、绪论
1.1、课题研究目的及意义
嵌入式系统是当前最热门、最具发展前途的 IT 应用领域之一。包括手 机、电子字典、可视电话、数字相机(DC) 、数字摄像机(DV) 、U-Disk、 机顶盒(Set Top Box) 、高清电视(HDTV) 、游戏机、智能玩具、交换机、 路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航 空设备等都是典型的嵌入式系统。作为高校电子信息工程工程专业学生, 完全有理由来学习嵌入式系统,首先这是专业最热门的应用,我们要与时 俱进,其次也是对我们所学专业知识的一次综合应用与考察,还有就是为 我们将来研究或将来从事嵌入式打下一个基础。本次课程设计为我们提供 了一个良好的平台,从相对简单的 μC/OS-II 嵌入式操作系统入手,自主设 计,对于我们自身具有重要的意义。

1.2、研究现状
在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,美国 已开始由模拟电视向数字电视转变,欧洲的 DVB(数字电视广播)技术已在 全球大多数国家推广。数字音频广播(DAB)也进入商品化试播阶段。而软 件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品 中,都离不开嵌入式系统技术。 对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等, 小型手持嵌入式系统将发挥巨大作用。自动控制领域,不仅可以用于 ATM 机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐 相结合,嵌入式系统同样可以发挥巨大的作用。
在个人领域中,嵌入式产品将主要是个人商用,作为个人移动的数据处理和通讯软件。 由于嵌入式设备具有自然的人机交互界面,GUI 屏幕为中心的多媒体界面给人很大的亲和 力。手写文字输入、语音拨号上网、收发电子邮件以及绚丽的图像效果已日益成熟

二、uC/OS-II 在 51 单片机上的移植 、
1、uC/OS-II 简介 uC/OSuC/OS-II 并非一个完备的实时操作体系,它只是一个实时内核。uC/OS-II 不像其它实时操作体系一样,提提供用户的是一个尺度的 API 函数,步伐开发职

员使用操作体系提供的 API 函数举行应用步伐的开发。要想在 uC/OS-II 内核上 举行应用步伐的开发, 就需要步伐开发职员在实时内核的基础上创建自己的实时 操作体系。首先,把 uC/OS-II 移植到自己的硬件目的板上,写出相应的驱动步 伐以及用户图形界面等等;在这些接口函数之上,加上用户自己的应用步伐,就 组成了嵌入式软件。 MCS2、uC\os-II 在 MCS-51 上的移植 uC\os虽然μC/OS-II 大部分源代码是用 C 语言写的,但是完成和处理器一些有关 的代码时,照旧必须要用汇编语言来实现的。 要使 uC\OS-II 正常运行,必须满足一下要求: (1)处理器的 C 编译器能产生可重入型代码。 (2)用 C 语言就可以打开和关闭中断。 (3)处理器支持中断,并且能产生定时中断(通常频率在 10 至 100Hz 之间) 。 (4)处理器能支持容纳一定量的数据存储硬件堆栈(可能是几千字节) 。 (5)处理器有将堆栈指针和其他 CPU 寄存器的内容读出并存储到堆栈或内存 中的指令。 MCS-51 与 KeilCx51 编译器可以满足以上条件,可以将 uC\OS-II 移植到 MCS-51 系列处理器。 需要说明一点, 目前 uC\OS-II 的版本较多, 但基本都一致, 兼容性也很好,本例采用的是 uC\OS-II V2.52 版。 μC/OS-II 的移植包括以下几个部分。 (1)设置与编译器有关的代码[OS_CPU.H] 在差异的处理器中有差异的字长, 所以必须界说一系列数据范例以确保移植 的准确性。另外,在 uC/OS-II 中,不使用 C 的 short、int 和 long 等数据范例, 这些都是和编译器相干的。下面即是 uC/OS-II 界说的一部分数据范例。 typedef unsigned char BOOLEAN; typedef unsigned char INT8U; /*无标志 8 位整数 */ typedef signed char INT8S; /*有标志 8 位整数 */ typedef unsigned int INT16U; /*无标志 16 位整数 */ typedef signed int INT16S; /*有标志 16 位整数 */ typedef unsigned long INT32U; /*无标志 32 位整数 */ typedef signed long INT32S; /*有标志 32 位整数 */ typedef float FP32; /*单精度浮点数 */

typedef double FP64; /*双精度浮点数 */ 首先来看对临界段的处理,就是关中断,处理完毕后在开中断。uC\OS-II 提供了 3 种方法来处理,针对 MCS-51 单片机,可以使用方法 1 来处理临界段。 在 MCS-51 系列单片机中,中断允许寄存器 IE 的第 7 位 EA 为中断允许控制为, EA=0 屏蔽所有中断、EA=1 允许所有中断。 MCS-51 堆 栈 从 低 地 址 往 高 地 址 增 长 ( 1= 向 下 , 0= 向 上 ) 因 此 将 , OS_STK_GROWTH 定义为 0。 OS_TASK_SW()是一个宏,在 uC\OS-II 从低优先级任务切换到高优先级任务 是被调用。uC\OS-II 假定任务切换时靠中断级代码完成的,或者说 uC\OS-II 的 任务切换时靠模仿中断动作来完成的。uC\OS-II 需要一条处理器指令,使其行 为就像是硬件中断。MCS-51 没有软中断指令,在这种情况下,需要将堆栈结构 设置成与中断堆栈结构一样,在用函数调用的方式来实现任务切换,也就是说, 通过函数来模仿软中断指令。 (2) C 语言编写 6 个与操作体系有关的函数[OS_CPU_C.C]这 10 个函数是: 用 OSTaskStkInit() 、OSTaskCreatHook() 、OSTaskDelHook() 、OSTaskSwHook ( )、 OSTaskStatHook ( )、 OSTaskIdleHook ( )、 OSTimeTickHook() 、 OSInitHookBegin()、OSInitHookEnd()和 OSTCBInitHook()。 这 10 个函数只对 OSTaskStkInit()编写代码,后 9 个函数必须声明,但 是内部并没有代码。 在对堆栈设计时需要考虑一下因素: <1>传统的 8051 处理器在中断来临时只将程序计数器 PC 的值压入堆栈。 <2>按照 uC\OS-II 的要求,保存全部寄存器,MCS-51 的寄存器有 PSW、ACC、 B、DPL、DPH、R0-R7 和 SP。 <3>Cx51 编译器允许用 CPU 寄存器传递 3 个参数。 <4>堆栈从低地址向高地址增长。 <5>堆栈指针指向上次入栈地址。 <6>MCS-51 存在系统栈。 <7>系统栈深度为 256 字节。 因为需要进行任务栈与系统栈的复制,获得系统栈的起始地址,所以需要对 系统进行一些定义。 首先, 堆栈起点由 Keil 决定, 只关心大小, 然后通过 SOStack 获得 keil 分配的 SP 起点。下面的代码就是相关的汇编代码,可以放在启动代码

中,也可以放在相关的文件中。 为了函数重入,形参和局部变量必须保存在堆栈里。MCS-51 硬件堆栈太小, Keil 将根据内存模式在相应内存空间仿真堆栈,增长方向由上向下,与硬件栈 相反。对于大模式编译,函数返回地址保存在硬件堆栈里,形参和局部变量放在 仿真堆栈中,对 MCS-51 咬使用大模式编译。 个汇编语言函数[OS_CPU_A.S] 3、编写 4 个汇编语言函数 uC/OS-II 的 移 植 实 例 要 求 用 户 编 写 4 个 简 略 的 汇 编 语 言 函 数 : OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。 移植所需要的具体材料及移植的参数 编译器 硬件堆 栈大小 任务栈 大小 系统栈保存 参数(包括 模栈指 针?C_XBP) Keil Cx51 4、测试、编写驱动和应用步伐 测试、 做完以上事情以后,就要测试移植的是否准确。测试一个μC/OS-II 实时内 核并不庞大,即是让这个实时内核在自己的目的板上跑起来。开始时,可以运行 一些简略的使命和时钟节奏停止使命,如果调试乐成就可以在上面添加应用步 伐。 uC/OS-II 移植完成以后,就要在这个实时内核之上编写接口驱动步伐。由 于嵌入式操作体系体积更小,功效更强,且快速、稳固,更具有针对性,因此不 像其它操作体系那样,对体系的全部接口配置都需要驱动、管理、调治和监视。 由于嵌入式产品是针对特别的用途而计划的,有很强的埋头性,因此,在编写驱 动步伐时内容更精简,更具有稳固性,编写出的驱动模块更小。编写驱动步伐应 完成以下基本功效:①对配置初始化和开释;②把数据从内核传送到硬件和从硬 件读取数据;③读取应用步伐传送给配置文件的数据和回送应用步伐恳求的数 据;④检测和处理配置出现的错误。实现了以上功效以后,一个嵌入式操作体系 就基本组成了。 30H 50H 17 50 B800H STC11F48XE 每秒切 换次数 定时器 初值 单片机型号

三、设计方案 设计方案
3.1、方案的设计与比较
方案一 图 4.1.1 硬件电路设计含有三种功能:电子琴、闪烁灯、1602 液晶显示

方案二 图 4.1.2 硬件电路设计设计含有三种功能:流水灯、闪烁灯和蜂鸣器

方案一:采用 xdata 扩展的国产 cpu 芯片。例如国内 STC 公司生的 STC89C54RD+和 STC89C58RD+。这两款芯片都有 256 字节的内部 RAM,并已经扩 展好有 1K 的 XRAM。另外这两款芯片都自带有复位芯片,在外部晶振小于 20Mhz 时可以省去外部复位电路。 更重要的是这款芯片价格较低很适合做 ucos 的移植。 在考虑到可能要移植多功能的情况下,这里选用较大 Flash 的 STC89C58RD+,有 32K Flash。 方案二:仍采用 AT89C52 作主控芯片,另外增加外部 RAM 芯片,实现 xdata 的扩展。由于裁剪后的 xdata>600 字节。所以这里最好采用 RAM 为 1k 左右的芯 片。但需要外部扩展电路,有些芯片还得有驱动电流。这增加了硬件电路的复杂 性,故不采用此方案。 因此本课程设计采用方案一。

四、系统的软件设计 系统的软件设计
软件的设计主要包括:C 文件及 H 文件。 文件分三部分: 一、C 文件分三部分:系统文件、流水灯和 LCD 液晶显示。 1、系统文件: 系统文件 具体程序如下:
#include "..\uc_os_II\includes.h" #include "..\driver\lcd1602.h" #include "..\driver\article.h" OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE]; OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE]; OS_STK xdata Task3Stack[CPU_MAX_STK_SIZE]; void Task1(void xdata * ppdata) reentrant { } void Task2(void xdata * ppdata) reentrant { } void Task3(void xdata * ppdata) reentrant { } void SerialInitial() { /* set TI to 1, set TR1 to 1 */ SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */ TMOD = 0x20;/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */

TH1 = 0xE6; /* TH1=E6 4800bit/s when at 24MHz,TH1=F3,9600bit/s,24MHz */ PCON = 0x80; TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */ } void InterruptInitial() { /* set timer. 50ms, THTL = 3caf when cpu at 12MHz */ TMOD |= 0x01; TH0 = 0x70; TL0 = 0x00; /* TR0 is set in OSStart() */ ET0 = 1; } main() { InterruptInitial(); OSInit(); //系统初始化 OSTaskCreate(Task3, (void xdata *)0, &Task1Stack[0],3); //给系统加载任务 OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],2); //给系统加载任务 OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],1); //给系统加载任务 OSStart(); }

总体思路如下: 完成一些头文件的包含, 对相关的函数进行定义, 设置任务堆栈, 写任务体, 在主函数中添加初始化系统并添加任务和启动任务。 流水灯任务: 流水灯任务: 总体思路如下: 此任务为循环执行, 接着显示流水灯的某种状态并延时一定时间。 具体的是 先让输出流水灯的状态 1,调用系统延时函数,延时时 100ms,再输出流水灯的 下一种状态。如此进行,让流水灯实现多种变化。所有变化都实现后又回到第一 种变化。 具体程序见附录。 液晶显示: LCD 液晶显示: 总体思路如下: LCD 液晶显示 C 文件中包括两个任务,通过系统 C 文件不同调用方式实现 两个任务。 具体程序见附录。

文件: 二、H 文件:这里只有 LCD 液晶显示需要编写 H 文件。 LCD 液晶显示 H 文件:
#ifndef __LCD1602_H__ #define __LCD1602_H__ void lcdinit(void); void write_date(INT8U date); void display1(void); void display2(void); void display3(void); void display4(void); void display5(void); void display6(void); #endif

编好 LCD 液晶显示 H 文件后还需要把它包含进系统 includes.h 文件中。只要在 includes.h 文件中加入#include "..\driver\lcd1602.h"语句就可以了。

五、系统调试
硬件测试 在印刷电路板制作以后,先不要急着家电源,首先进行静态测试。检查线路:通过目测 和使用万用表,检查线路连接的正确性,有无短路和短路,无虚汗的存在等。核对元件:检 查元件是否安装正确,有无损坏等。检查电源系统:在加入集成电路之前,应检查加入电源 的品质,包括电源的电压以及负载能力等。只有当电源满足要求后,才能加上所有的元件进 行加电源调试。 虽然经过静态测试, 但仍有不少的硬件故障要在软硬件联机调试中才能发现。 测试晶振电路和复位电路: 这是单片机应用系统工作的最基本的条件, 可用示波器或逻辑笔 进行检查。 软件测试 首先要对程序中的每个子函数进行功能测试,在得到我们想要的功能后还要对子函数 与子函数之间的调用进行测试,在所有子函数测试都通过后才在能镶嵌到主函数中进行测 试。

六、课程设计心得
经过这次课程设计,我觉得自己学到了不少东西。对于嵌入式系统的应用有 了点基本的了解,一下是在这次课程中学到的一些总结。 以前的关于单片机的课程设计中的任务基本都是单任务模式, 编程序都是编 个主函数和功能函数就可以了,从没去了解过单片机还可以嵌入系统。 回想一下微机原理课程上学过的知识,当发生中断的时候,CPU 保存当前的 PC 和状态寄存器的值到堆栈里,然后将 PC 设置为中断服务程序的入口地址,再下 来一个机器周期,就可以去执行中断服务程序了。 执行完毕之后,一般都是执行一 条 RETI 指令,这条指令会把当前堆栈里的值弹出恢复到状态寄存器和 PC 里。这 样,系统就会回到中断以前的地方继续执行了。那么设想一下?如果再中断的时 候,人为的更改了堆栈里的值,那会发生什么?或者通过更改当前堆栈指针的值,

又会发生什么呢?如果更改是随意的,那么结果是无法预料的错误。因为我们无 法确定机器下一条会执行些什么指令,但是如果更改是计划好的,按照一定规则 的话,那么我们就可以实现多任务机制。 在 uC/OS-II 里,每个任务都有一个任务控制块(Task Control Block),这是 一个比较复杂的数据结构。在任务控制快的偏移为 0 的地方,存储着一个指针, 它记录了所属任务的专用堆栈地址。事实上,在 uC/OS-II 内,每个任务都有自己 的专用堆栈,彼此之间不能侵犯。这点要求程序员再他们的程序中保证。一般的 做法是把他们申明成静态数组。而且要申明成 OS_STK 类型。当任务有了自己的 堆栈,那么就可以将每一个任务堆栈再那里记录到前面谈到的任务控制快偏移为 0 的地方。以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软 中断或者时钟中断实现。然后系统会先把当前任务的堆栈地址保存起来,仅接着 恢复要切换的任务的堆栈地址。由于哪个任务的堆栈里一定也存的是地址(还记 得我们前面说过的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断 CPU 就会把地址压入堆栈),这样,就达到了修改 PC 为下一个任务的地址的目的。 以上就是 uC/OS-II 的多任务实现机制。 在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和 图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们 这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断 充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得团队合作的 重要性。

七、参考文献
[1] 王新颖 单片机原理及应用.北京大学出版社 2008 [2] 陈忠平 单片机基础与最小系统实践.北京航空航天大学出版社 [3] 窦振中 单片机外围器件实用手册存储器分册.北京航空航天大学出版 [4] 沈庆阳,郭庭吉 8051 单片机实践与应用.清华大学出版社 [5] 侯玉宝,李成群 基于 Proteus 的 51 系列单片机设计与仿真 电子工业 出版社 [6] 陈明荧. 8051 单片机课程设计实训教程[M].北京:清华大学出版 [7] 郁慧娣.微机系统及其接口技术[M].南京:东南大学出版社,1999 年. [8] 何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003 年. [9] 王毓银.数字电路逻辑设计[M].北京:高等教育出版社. [10] 李广弟. 单片机原理及应用[M] 北京航空航天大学出版社,2004 年. [11] 谢嘉奎.电子线路[M].高等教育出版社,1999 年. [12] 张鑫.单片微机原理及应用.电子工业出版社 2005.8 [13] 张毅刚. 单片微机原理及应用 高等教育出版社 2003.12 [14] 薛晓书.单片微机原理及接口技术.西安石油大学 2002.3 [15] 黄智伟 朱卫华.单片机与嵌入式系统应用.南华大学 2005.3

附录: 附录:

实物正面

实物反面
元件清单: 元件清单:
名称 AT89C58 电路基板 按键 瓷片电容 30pf 电解电容 20uf 电阻 8.2k 电阻 200 晶振 12M 40 脚单片机底座 排针 16 脚 发光二极管 导线 数量 1块 1块 1个 2个 1个 1个 8个 1个 1个 1个 8个 若干

系统程序及流水灯清单: 系统程序及流水灯清单: 程序及流水灯清单
#include "..\uc_os_II\includes.h" #include "..\driver\lcd1602.h" #include "..\driver\article.h" OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE]; OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE]; OS_STK xdata Task3Stack[CPU_MAX_STK_SIZE]; void Task1(void xdata * ppdata) reentrant { ppdata = ppdata; while(1) { LED=0x7f; OSTimeDlyHMSM(0, 0, 0,100); LED=0xbf; OSTimeDlyHMSM(0, 0, 0,100); LED=0xdf; OSTimeDlyHMSM(0, 0, 0,100); LED=0xef; OSTimeDlyHMSM(0, 0, 0,100); LED=0xf7; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfb; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfd; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfe; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); LED=0x7e; OSTimeDlyHMSM(0, 0, 0,100); LED=0xbd; OSTimeDlyHMSM(0, 0, 0,100); LED=0xdb; OSTimeDlyHMSM(0, 0, 0,100); LED=0xe7; OSTimeDlyHMSM(0, 0, 0,100); LED=0xdb; OSTimeDlyHMSM(0, 0, 0,100); LED=0xbd; OSTimeDlyHMSM(0, 0, 0,100); LED=0x7e; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfe; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfd; OSTimeDlyHMSM(0, 0, 0,100); LED=0xfb; OSTimeDlyHMSM(0, 0, 0,100); LED=0xf7; OSTimeDlyHMSM(0, 0, 0,100); LED=0xef; OSTimeDlyHMSM(0, 0, 0,100); LED=0xdf; OSTimeDlyHMSM(0, 0, 0,100); LED=0xbf; OSTimeDlyHMSM(0, 0, 0,100); LED=0x7f; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; LED=0xff;

OSTimeDlyHMSM(0, 0, 0,100); LED=0x00; OSTimeDlyHMSM(0, 0, 0,100); LED=0xff; OSTimeDlyHMSM(0, 0, 0,100); } } void Task2(void xdata * ppdata) reentrant { ppdata = ppdata; while(1) { write_com(0x80+0x0f); write_date('0'); OSTimeDlyHMSM(0, 0,0,200); write_com(0x80+0x0f); write_date('1'); OSTimeDlyHMSM(0, 0,0,200); write_com(0x80+0x0f); write_date('2'); OSTimeDlyHMSM(0, 0,0,200); write_com(0x80+0x0f); write_date('3'); OSTimeDlyHMSM(0, 0,0,200); write_com(0x80+0x0f); write_date('4'); OSTimeDlyHMSM(0, 0,0,200); write_com(0x80+0x0f); write_date('5'); OSTimeDlyHMSM(0, 0,0,200); } void Task3(void xdata * ppdata) reentrant { ppdata = ppdata; while(1) { display1(); OSTimeDlyHMSM(0, 0,0,700); display2(); OSTimeDlyHMSM(0, 0,0,700); } } void SerialInitial() {

/* set TI to 1, set TR1 to 1 */ SCON = 0x52;/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */ TMOD = 0x20;/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */ TH1 = 0xE6; /* TH1=E6 4800bit/s when at 24MHz,TH1=F3,9600bit/s,24MHz */ PCON = 0x80; TCON = 0x40;/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */ } void InterruptInitial() { /* set timer. 50ms, THTL = 3caf when cpu at 12MHz */ TMOD |= 0x01; TH0 = 0x70; TL0 = 0x00; /* TR0 is set in OSStart() */ ET0 = 1; } main() { InterruptInitial(); OSInit(); lcdinit(); display3(); OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2); OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3); OSTaskCreate(Task3, (void xdata *)0, &Task3Stack[0],4); // OSTaskCreate(Task4, (void xdata *)0, &Task4Stack[0],5); OSStart(); }

LCD 液晶显示 C 程序清单: 程序清单 清单: #include "..\uc_os_II\includes.h" //定义端口,数据口为 P1 口,P3^4 接输入测 试信号,rw 直接接地 sbit rs=P3^1; sbit lcden=P3^3; INT8U code table1[]="abcdef"; INT8U code table2[]="ghijkl"; INT8U code table3[]="It designed by9"; //--------延时 void delay(INT16U z) { INT16U x,y; for(x=z;x>0;x--) for(y=400;y>0;y--); } //--------1602 写数据 void write_date(INT8U date) { P1=0xFF; delay(5); rs=1; lcden=0; P1=date; delay(5); lcden=1; delay(5); lcden=0; } //--------1602 写指令 void write_com(INT8U com) { P1=0xFF; delay(5); rs=0; lcden=0; P1=com; delay(5); lcden=1; delay(5); lcden=0; }

//--------1602 初始化 void lcdinit() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); } //-------显示内容 void display1() { INT8U num1; write_com(0x80); for(num1=0;num1<8;num1++) { write_date(table1[num1]); } }

void display2() { INT8U num1; write_com(0x80); for(num1=0;num1<8;num1++) { write_date(table2[num1]); } } void display3() { INT8U num1; write_com(0x80+0x40); for(num1=0;num1<15;num1++) { write_date(table3[num1]); } }


推荐相关:

嵌入式系统设计课程设计_图文.doc

嵌入式系统设计课程设计 - 基于μC/OS-II8*8点阵的设计与制作... 三、课程设计内容设计基于 51 单片机的嵌入式系统, μ C/OS-II 操作系统移植到 51 单片机上...


单片机与嵌入式系统课程设计_Chapter1资料_图文.ppt

单片机嵌入式系统课程设计_Chapter1资料 - 单片机嵌入式系统课程设计 MSP430单片机概述 杭州电子科技大学通信工程学院 黄怡 2016年3月 什么是单片机? ? 单...


嵌入式系统课程设计报告_图文.doc

嵌入式系统课程设计报告_信息与通信_工程科技_专业资料。嵌入式系统课程设计报告 ...图 1 硬件电路框图 1.1 单片机芯片设计与论证 方案一: 方案1:采用51系列...


嵌入式系统设计_图文.ppt

嵌入式系统设计 - 嵌入式系统设计 实验准备(MCS-51单片机介绍) 摘自其他


嵌入式系统课程设计_图文.ppt

嵌入式系统课程设计 - 嵌入式系统课程设计 电工电子实验室 课程设计目的 1. 了解基于 了解基于ARM7核的单片机 核的单片机LPC2106的内部结构和基本工作原理,清楚 的...


嵌入式系统课程设计-PPT精选文档_图文.ppt

嵌入式系统课程设计-PPT精选文档 - 嵌入式系统课程设计 电工电子实验室 课程设计目的 1. 了解基于ARM7核的单片机LPC2106的内部结构和基本工作原理,清楚 LPC2106的...


51单片机课程设计 - 上传_图文.doc

51单片机课程设计 - 上传 - 单片机原理及应用课程设计(论文) 设计(论文)题目 单片机系统最小系统设计及应用 学院名称 ZZZZZZ 学院 专业名称电气工程及其自动化 ...


嵌入式系统设计课程设计.doc

嵌入式系统设计课程设计 - 嵌入式系统设计课程设计,μC/OS-II操作系统的移植,设计基于51单片机的嵌入式系统,把μC/OS-II操作系统移植到51单片机上,能完成基本的...


嵌入式课程设计_图文.doc

嵌入式系统课程设计是自动化专业的一个重要教学环节,既有别于 毕业设计,又不同...传统的 8 位单片机已经暴露了本身资源有限 的缺点,越来越不能适应日渐复杂的...


51单片机课程设计_图文.doc

51单片机课程设计_电子/电路_工程科技_专业资料。河南大学 单片机课程设计 设计...本电路在嵌入式 系统软硬件设计平台 Proteus 上仿真通过。能显示所查时段五个...


单片机与嵌入式系统课程设计.doc

单片机嵌入式系统课程设计 - 单片机嵌入式系统课程实际 设计报告 姓名: 班级: 学号: 单片机嵌入式系统课程设计 一、 课程设计的目的与要求 (1)完成指定设计...


单片机原理及基于单片机嵌入式系统设计-文档资料_图文.ppt

单片机原理及基于单片机嵌入式系统设计-文档资料 - 单片机原理及基于单片机的 嵌入式系统设计 蔡方凯 主编 中国水利水电出版社 绪 论 在工业、农业、军事、保安、...


《单片机原理及基于单片机的嵌入式系统设计》第5章_图文.ppt

《单片机原理及基于单片机的嵌入式系统设计》第5章 - 第5章 5.1 5.2 5.3 5.4 中断系统 中断的概念 MCS-51单片机的中断流程 MCS-51的中断响应条件和中断...


MCS51单片机课程设计_图文.ppt

MCS51单片机课程设计_工学_高等教育_教育专区。讲述MCS51单片机的一般用法 ...uVision2通过以下特性加速你的嵌入式系统的开 的转换器。 器,目标代码到 的...


C51单片机课程设计报告_图文.doc

C51单片机课程设计报告_工学_高等教育_教育专区。内容提要单片微型计算机简称单片机,是典型的嵌入式微控制器,常用英文字母 的缩写 MCU 表示单片机,它最早是被用在...


嵌入式系统基础课程设计报告模板_图文.doc

嵌入式系统基础课程设计报告模板_电子/电路_工程科技_专业资料。交通灯 ...2.系统硬件总电路构成及原理 实现本设计要求的具体功能,可以选用AT89S51单片机...


51单片机实现tcp-ip协议的嵌入式系统设计_图文.pdf

51单片机实现tcp-ip协议的嵌入式系统设计_IT/计算机_专业资料。RTL8019 TCP/IP 51单片机 文档贡献者 文库可以 贡献于2012-05-24 ...


单片机课程设计_图文.doc

由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片 中,ATMEL 的 89C51 是一种高效微控制器。89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的...


嵌入式系统设计课程设计.doc

嵌入式系统设计课程设计 - 电气与电子信息工程学院 嵌入式系统设计课程设计 设计题目: 设计题目:基于 AT89S52 单片机的游戏机嵌入式系统设计与制作 专业班级: 专业...


最全最好的课程设计-51单片机电子日历时钟( 含源程序)_....doc

最全最好的课程设计-51单片机电子日历时钟( 含源程序)_工学_高等教育_教育...功能强大的微型计算机的 AT89S51 可为许多 嵌入式控制应用系统提供高性价比的解决...

网站首页 | 网站地图
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com