天津大学嵌入式系统——Blinky实验

合集下载

独立学院《嵌入式系统》实验及实践教学探索

独立学院《嵌入式系统》实验及实践教学探索
的 课 程 我 院 从 0 6届 开 始 . 加 入 了 AR M 方 向《 嵌 入 式
2 《 嵌 入 式 系 统》 实 验及 实 践 课 程 建 设
我 院 是 独 立 学 院 .招 收 的学 生 主 要 来 自高考 的 第 三批 次 . 学 生 的主要特点 是兴趣 广泛 . 思维灵 活 . 但 基 础薄 弱 , 学 习 自觉 性 不 够 , 不 习惯 理 论 学 习 和思 考 。 如 何在 帮助学生打好基础 的同时 . 提 高 学 生 的动 手 能 力 . 培 养 出 适 合 用 人 单 位 的技 术 型 人 才 .是 当前 面 临 的主 要 问题 , 为此 . 本 院作 了 以下 探 索
《 嵌入 式系统 》 是一 门实践 性很强 的课 程 , 如 果 只 是 注 重 于 理 论 知 识 的 灌输 . 缺乏实践性训 练 . 无 异 于 纸 上谈 兵 . 因此 . 只有 在 教 学 过 程 中充 分 融 人 实 验 和 实 践 教 学 .在 提 高 学 生 理 论 知 识 的 同时 .培 养 学 生 独 立 思 考、 实践动手 、 综 合 运 用 知 识 的能 力 才 是 嵌 入 式 教 学 的
0 引

课 教 师 和 实 验 技 术 人 员 所 面 临 的 一 个 难 题
( 2 ) 面 向应 用 , 实践 性 强
嵌 入 式 系 统 是 嵌 入 到 对 象 体 中 的 专 用 计 算 机 系 统, 其 应用 涉及 金融 、 航天 、 网络 、 电信 、 信息 家 电 、 医
疗、 工业 控制 、 军 事 等 各 个 领 域 。甚 至 于 有 些 学 者 断 言
王春 明 . 陈儒 敏
( 北 京 科 技 大 学 天 津 学 院信 息 工 程 系 , 天津 3 0 1 8 3 0 ) 摘 要 :《 嵌 入 式 系统 》 课 程 是 一 门侧 重 实践 和 应 用 的课 程 , 注 重 培 养 学 生 的 实 际动 手 能 力 。 分析 《 嵌

天津大学嵌入式课程设计报告材料

天津大学嵌入式课程设计报告材料

嵌入式课程(设计文档)题目:数字电子时钟设计学院专业学号年级姓名2011 年 12月 14 日数字电子时钟设计一实现功能1 基本的数字时钟计时功能2 时间设定功能3 闹钟功能二设计思路数字时钟在lcd上显示,分为三个部分:时钟,分钟和秒钟,为照顾整体美观性,时钟和分钟为统一大字体,在lcd上用矩形拼凑而成,秒钟为小字体,在lcd上用线画出。

秒钟满60自动分钟加一,秒钟重计。

分钟满60后时钟自动加一,分钟重计。

时钟满二十四后自动清零。

在初始时候可以从键盘中输入时钟的时和分进行时间的设定,数字时钟在lcd上显示此时间并以此为基础进行计时。

此时钟还有设定闹钟功能,按下开关键sw2由超级终端开始提示输入闹钟时间并亮起led4,由键盘输入设定时间后当时间到达此设定时间则响起闹钟铃声,关闭sw2,则闹钟停止。

三硬件支持实验设计由MX1下的lcd显示屏,led灯,键盘,开关,音频播放器以及RS232串口通信支持。

四源代码分析#include "INCLUDES.H"#include "mx1_aitc.h"#include "IRQ.h"#include "mx1_gpio.h"#include "mx1_uart.h"#include <string.h>#include "misc.h"#include "mx1_lcdc.h"#include "mx1_ssi.h"#include "wave.h"#include "switch.h"#include "led.h"extern void OSStartTimeTick( void );extern void OSTickISR( void );int sec_1=0,sec_2=0, min_1,min_2,hour_1,hour_2,i;/* 定义所需要的变量*//* 下面定义几个函数*/void Showtime_sec_1(int sec_1)/* 用于显示秒钟第一位的函数*/{MX1_LCDC_DrawRect( 240,0, 280,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第一位的屏幕*/switch(sec_1){case(0):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,250,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, LS_SOLID );MX1_LCDC_DrawLine( 270, 5,270, 35, 31, FS_SOLID );MX1_LCDC_DrawLine(250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 250, 5,250, 20, 31, LS_SOLID );MX1_LCDC_DrawLine( 250, 20,270, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 5,270,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 250, 5,270, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 5,250, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 20,270,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 270, 20,270,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 250, 35,270,35, 31, FS_SOLID );}}void Showtime_sec_2(int sec_2)/* 用于显示秒钟第二位的函数*/{MX1_LCDC_DrawRect( 280,0, 320,40, 50, 50, LS_SOLID, FS_SOLID );/* 刷新秒钟第二位的屏幕*/switch(sec_2){case(0):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(1):MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(2):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,290,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(3):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(4):MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(5):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 25, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(6):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 20,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(7):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );break;case(8):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 35, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31,FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );break;case(9):MX1_LCDC_DrawLine( 290, 5,310, 5, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 5,290, 20, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 20,310,20, 31, FS_SOLID );MX1_LCDC_DrawLine( 310, 5,310,35, 31, FS_SOLID );MX1_LCDC_DrawLine( 290, 35,310,35, 31, FS_SOLID );}}void Showtime_min_1(int min_1)///* 用于显示分钟第一位的函数*/{MX1_LCDC_DrawRect( 170,40, 240,200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新分钟第一位的屏幕*/switch( min_1){case(0):MX1_LCDC_DrawRect( 170, 40,230, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 215, 40,230, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 112,185, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(215, 40,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 170, 40,230,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170,112,230,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(170, 40,185,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 170, 185,230,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(215, 112,230,200, 31,31, LS_SOLID,FS_SOLID );}}void Showtime_min_2(int min_2)/* 用于显示分钟第二位的函数*/{MX1_LCDC_DrawRect( 240, 40, 320, 200, 50, 50, LS_SOLID,FS_SOLID );/* 刷新分钟第二位的屏幕*/switch(min_2){case(0):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 40,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 112,265, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );break;case(3):MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 250, 40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 112,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 250, 40,310, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 295, 40,310, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(250,40,310,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 40,265,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 250,112,310,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(250, 185,310,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(295, 40,310,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_1(int hour_1)/* 用于显示时钟第一位的函数*/{MX1_LCDC_DrawRect( 10, 40, 70, 200, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch( hour_1){case(0):MX1_LCDC_DrawRect( 10, 40,70, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 55, 40,70, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 10, 40,70,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(10,112,70,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(55, 40,70, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 112,25, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 10, 185,70,200, 31,31, LS_SOLID, FS_SOLID );}}void Showtime_hour_2(int hour_2)/* 用于显示时钟第二位的函数*/{MX1_LCDC_DrawRect( 90, 40, 80, 150, 50, 50, LS_SOLID, FS_SOLID );/* 刷新时钟第一位的屏幕*/switch(hour_2){case(0):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 40,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(1):MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(2):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150, 127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 112,105, 200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(3):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(4):MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );break;case(5):MX1_LCDC_DrawRect( 90, 40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(6):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 112,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(7):MX1_LCDC_DrawRect( 90, 40,150, 55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 135, 40,150, 200, 31,31, LS_SOLID, FS_SOLID );break;case(8):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(90, 40,105,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );break;case(9):MX1_LCDC_DrawRect(90,40,150,55, 31,31, LS_SOLID, FS_SOLID);MX1_LCDC_DrawRect(90, 40,105,127, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect( 90,112,150,127, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawRect(90, 185,150,200, 31,31, LS_SOLID, FS_SOLID );MX1_LCDC_DrawRect(135, 40,150,200, 31,31, LS_SOLID, FS_SOLID );}}void change(char tmp)/* 将从键盘输入的字符转为整数的函数*/{switch(tmp){case('0'):i=0;break;case('1'):i=1;break;case('2'):i=2;break;case('3'):i=3;break;case('4'):i=4;break;case('5'):i=5;break;case('6'):i=6;break;case('7'):i=7;break;case('8'):i=8;break;case('9'):i=9;}}/* 下面定义两个任务*/#define STK_SIZE_TASK1 256 /* 分配给任务的堆栈大小 */#define STK_SIZE_TASK2 256#define PRIO_TASK1 3 /* 任务的优先级 */#define PRIO_TASK2 4OS_STK StkTask1[STK_SIZE_TASK1]; /* 为任务分配堆栈空间 */OS_STK StkTask2[STK_SIZE_TASK2];void YourTask1( void *pdata )/* 任务一用于显示从键盘输入时间和基本的时钟功能*/{char tmp1,tmp2,tmp3,tmp4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断(必须在第一个运行的任务里进行) */OSStartTimeTick();/* 在下面添加任务内容 */MX1_LCDC_DrawRect(0,0,320,240, 50,50, LS_SOLID, FS_SOLID);MX1_UART_Init( COM1 );MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp1 );change(tmp1);hour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp2 );change(tmp2);hour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp3 );change(tmp3);min_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmp4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmp4 );change(tmp4);min_2=i;Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 显示从键盘的输入时间,实现功能一*/MX1_LCDC_DrawCircle(160, 100,5, 31,31, LS_SOLID,FS_SOLID );MX1_LCDC_DrawCircle(160, 160,5, 31,31, LS_SOLID, FS_SOLID );while( 1 ){OSTimeDlyHMSM( 0, 0, 1, 0);/* 延时一秒后秒钟加一*//* 下面为实现时钟的逻辑*/sec_2++;if(sec_2>9){sec_1++;sec_2=0;}if(sec_1>5){min_2++;sec_1=0;}if(min_2>9){min_1++;min_2=0;}if(min_1>5){hour_2++;min_1=0;}if(hour_2>9){hour_1++;hour_2=0;}if(hour_1==2&&hour_2==4){hour_1=0;hour_2=0;}Showtime_sec_1(sec_1);Showtime_sec_2(sec_2);Showtime_min_1(min_1);Showtime_min_2(min_2);Showtime_hour_1(hour_1);Showtime_hour_2(hour_2);/* 实现基本时钟功能即功能二*/}}/* 任务二实现闹钟功能*/void YourTask2(void *pdata){int sethour_1,sethour_2,setmin_1,setmin_2;int j=1;char tmpl1,tmpl2,tmpl3,tmpl4;IRQ_Register( OSTickISR, TIMER1_INT ); /* 开启uC/OS-II的时钟中断 */OSStartTimeTick();MX1_UART_Init( COM1 );WAVE_Init( WAVE_BASE_DEFAULT );LED_Init( LED3 );SWITCH_Init( SW2 ); /* 初始化开关 */while(1){if( SWITCH_IS_ON( SW2 )&&j==1 )/* 如果开关二按下超级终端提示依次输入闹钟时间*/{ LED_On( LED4 );j++;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl1 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl1 );change(tmp1);sethour_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl2 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl2 );change(tmp2);sethour_2=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl3 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl3 );change(tmp3);setmin_1=i;MX1_UART_PutString( COM1, "enter the time:\n", strlen("Ienter the time:\n") );MX1_UART_GetChar( COM1, &tmpl4 ); /* 显示输入的字符 */MX1_UART_PutChar( COM1, tmpl4 );change(tmp4);setmin_2=i;}elseLED_Off( LED4 );if(hour_1==sethour_1&&hour_2==sethour_2&&min_1==sethour_1&&min_2==sethour_2 )/* 达到闹钟时间后开始放音乐*/{WAVE_Play( );OSTimeDlyHMSM( 0, 0, 0, 500);}}}/* 初始化后,从这里开始执行C代码 */int __main( void ){unsigned int palette[LCDC_CMRAM_SIZE];int i;MX1_AITC_Init(); /* 初始化中断控制器 */IRQ_Init(); /* 初始化中断管理 */OSInit(); /* 初始化uC/OS-II内核数据结构 */MX1_GPIO_Init( MX1_GPIO_PC );MX1_SSI_Init( MX1_SSI1 );//初始化LCDMX1_LCDC_Init(LCDC_PANEL_WIDTH, LCDC_PANEL_HEIGHT,LCDC_INIT_STARTX, LCDC_INIT_STARTY, LCDC_VPW, LCDC_PANEL_CONF, LCDC_BPP );// 初始化调色板for( i=0; i<16; i++ ){palette[i] = RGB( i, 0, 0 );palette[i+16] = RGB( 0, i, 0 );palette[i+32] = RGB( 0, 0, i );palette[i+48] = RGB( i, i, i );}MX1_LCDC_CMRAM_Set( palette );/* 建立一个任务 */OSTaskCreate( YourTask1, 0, &StkTask1[STK_SIZE_TASK1-1], PRIO_TASK1 );OSTaskCreate( YourTask2, 0, &StkTask2[STK_SIZE_TASK2-1], PRIO_TASK2 );OSStart(); /* 开始调度 */return 0;}五实验现象初始化后,超级终端显示提示时间设定,由键盘输入后,开始计时功能,屏幕上显示时,分,秒在计时阶段若打开开关sw2则提示输入设定闹钟值,输入后当时间到达闹钟值时音乐响起,关闭sw2,则闹钟停止。

嵌入式操作系统---Windows_CE-天津大学-36页精选文档

嵌入式操作系统---Windows_CE-天津大学-36页精选文档
• 实时性
– 实时嵌入式操作系统
• 可抢占型实时操作系统 • 不可抢占型实时操作系统
– 非实时嵌入式操作系统
1.4 嵌入式操作系统的特点
• 可定制性
– 可添加或可裁剪内核
• 可移植性
– 支持多种微处理器
• 实时性
– 嵌入式系统环境的现实要求
• 低资源占有性
– 由系统资源少的特点决定
2. 嵌入式操作系统简史
1.2 嵌入式系统的特点
与通用计算机系统相比的特点:
• 面向特定应用; • 结合了计算机技术、半导体技术和电子技术
等技术; • 软件和硬件设计都要求高效率; • 软件、硬件和具体应用及行业特点有机地结
合在一起; • 软件一般都固化在存储器或单片机中。
1.3 嵌入式操作系统的概念
• 支持嵌入式系统应用的操作系统软件; • 嵌入式系统的重要组成部分; • 具有通用操作系统的基本特点; • 将硬件虚拟化,使开发人员从驱动程序
嵌入式Linux的特点
• 多任务、多用户支持 • 共享库支持 • POSIX 1003.1支持 • 内存保护模式 • 支持不同种类的文件系统 • TCP/IP、SLIP和PPP支持
嵌入式Linux的开发环境
• 基于Linux操作系统的应用开发环境一般是由 目标系统硬件开发板和宿主PC机所构成。
• 目标硬件开发板(基于ARM的系统板)用于运 行操作系统和系统应用软件,而目标板所用 到的操作系统的内核编译、应用程序的开发 和调试则需要通过宿主PC机来完成。双方之 间一般通过串口,并口或以太网接口建立连 接关系。
• 从开发角度来看
– 定制系统内核 – 开发驱动程序 – 导出SDK – 编写应用软件 – 源代码的共享

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告引言嵌入式系统作为一种广泛应用于各行各业的计算机系统,其本身具有一定的难度与挑战。

本实验报告将围绕嵌入式系统的设计、开发以及应用展开讨论,旨在总结并分享在实验中所获得的经验与知识。

一. 实验背景嵌入式系统是指以特定功能为目标的计算机系统,其设计与开发过程相较于传统的计算机系统更为复杂和精细。

本次实验的主要目标是通过设计一个基于嵌入式系统的智能家居控制器,来探索嵌入式系统的应用与实践。

二. 实验内容2.1 硬件设计嵌入式系统的硬件设计是整个实验的基础,其合理性与稳定性直接影响系统的性能和可靠性。

在本次实验中,我们选择了一块主频为xx的处理器作为核心,配备了丰富的外设接口,如GPIO、串口等。

我们还为系统增加了一块液晶显示屏和一组按键,以实现简单的用户交互。

2.2 软件开发在硬件设计完成后,我们开始进行软件开发。

首先,我们需要选择一个合适的操作系统作为嵌入式系统的基础。

针对本次实验,我们选择了xx操作系统,其具备较强的实时性和稳定性,能够满足我们对系统性能的要求。

接着,我们进行了嵌入式系统的驱动程序开发。

通过编写各个外设的驱动程序,我们实现了与液晶显示屏和按键的交互,并将其与处理器进行了适当的接口配置。

另外,我们还开发了嵌入式系统的应用程序。

通过编写智能家居控制器的代码,我们成功实现了对家居设备的远程控制和监测。

用户可以通过液晶显示屏和按键进行交互,实现对家居设备的开关、调节和状态查看等操作。

三. 实验结果与分析经过实验测试,我们发现嵌入式系统在智能家居领域的应用具有较高的可行性与实用性。

通过嵌入式系统的控制,用户可以方便地实现对家居设备的远程操控,提升了家居智能化的程度。

同时,嵌入式系统的实时性和稳定性使得智能家居控制器具备了较高的安全性和可靠性。

然而,在实验过程中我们也遇到了一些挑战。

其中,系统的驱动程序开发是较为复杂的一环,需要仔细理解硬件接口和协议,并进行合理的配置。

此外,系统的稳定性和功耗管理也是需要重点关注的问题。

光电工程学院学生嵌入式实验报告

光电工程学院学生嵌入式实验报告

Workspace。

jpeg工程,并打开。

④编译链接工程,选择菜单Project->Rebuild All。

⑤选择窗口中右上角的“Download and Debug”绿色按钮,下载目标文件。

○6选择Debug->go或点击按钮全速运行程序。

○7观察LM3S9B96 实验评估板上液晶屏,若液晶无显示,则需要按一下下开发板上的“RESET”复位键,液晶上便会出现图像,可用手指拖动移动图像。

双击打开ResultActivity.java,在public class ResultActivity extends Activity。

输入以下代码:<EditTextandroid:id="@+id/factorOne")为symbol和calculate设置显示的值,接着上面的位置输入代码:symbol.setText(R.string.symbol);calculate.setText(R.string.calculate);)最后几行选中的代码和大括号可以删除,也可不删。

对按钮设置监听器,在activity01中输入以下代码:Class CalculateListener implements OnClickListener{ }鼠标放在报错处,点击第一个Import,如下图:鼠标放在另一个报错处CalculateListener点击第一个Add后,得到如下图。

对按钮绑定监听器。

在Activity01.java中输入:calculate.setOnClickListener(new CalculateListener());Activity01.this.startActivity(intent);报错后点击Import‘Intent’(android.content)。

)打开ResultActivity.java,在public class下面一行点击鼠标右键选择source—Override/ImplementMethods。

嵌入式实训课实验报告

嵌入式实训课实验报告

一、实验背景嵌入式系统在现代工业、消费电子、智能家居等领域扮演着越来越重要的角色。

为了让学生深入了解嵌入式系统的设计原理和开发过程,提高学生的实践能力和创新精神,我们开设了嵌入式实训课程。

本次实验报告将针对实训课程中的部分实验进行总结和分析。

二、实验目的1. 掌握嵌入式系统的基本原理和开发流程。

2. 熟悉嵌入式开发工具和环境。

3. 熟练使用C语言进行嵌入式编程。

4. 学会调试和优化嵌入式程序。

三、实验内容本次实训课程共安排了五个实验,以下是每个实验的具体内容和实验步骤:实验一:使用NeoPixel库控制RGB LED灯带1. 实验目的:学习使用NeoPixel库控制RGB LED灯带,实现循环显示不同颜色。

2. 实验步骤:(1)搭建实验平台,连接NeoPixel LED灯带。

(2)编写程序,初始化NeoPixel库,设置LED灯带模式。

(3)通过循环,控制LED灯带显示不同的颜色。

实验二:使用tm1637库控制数码管显示器1. 实验目的:学习使用tm1637库控制数码管显示器,显示数字、十六进制数、温度值以及字符串,并实现字符串滚动显示和倒计时功能。

2. 实验步骤:(1)搭建实验平台,连接tm1637数码管显示器。

(2)编写程序,初始化tm1637库,设置显示模式。

(3)编写函数,实现数字、十六进制数、温度值的显示。

(4)编写函数,实现字符串滚动显示和倒计时功能。

实验三:使用ds18x20库和onewire库读取DS18B20温度传感器的数据1. 实验目的:学习使用ds18x20库和onewire库读取DS18B20温度传感器的数据,并输出温度值。

2. 实验步骤:(1)搭建实验平台,连接DS18B20温度传感器。

(2)编写程序,初始化ds18x20库和onewire库。

(3)编写函数,读取温度传感器的数据,并输出温度值。

实验四:使用ESP32开发板连接手机热点,并实现LED1作为连接指示灯1. 实验目的:学习使用ESP32开发板连接手机热点,并通过LED1指示灯显示连接状态。

嵌入式系统实训(基于小凌派的开源鸿蒙应用开发)

嵌入式系统实训(基于小凌派的开源鸿蒙应用开发)

嵌入式系统实训(基于小凌派的开源鸿蒙应用
开发)
嵌入式系统实训是一门基于小凌派的开源鸿蒙应用开发的课程,旨在培养学生在嵌入式系统领域的应用开发能力。

嵌入式系统是指集成了一定的硬件和软件的特殊计算机系统,广泛应用于电子产品、车载系统、智能家居等领域。

小凌派是一款基于ARM架构的开发板,具备强大的计算能力和丰富的外设接口,非常适合进行嵌入式系统的开发实践。

鸿蒙操作系统是由华为公司自主研发的开源操作系统,具有高效稳定、安全可靠的特点。

通过学习鸿蒙应用开发,学生可以掌握开发基于鸿蒙操作系统的嵌入式应用的技能,提升自己在嵌入式系统行业的竞争力。

在嵌入式系统实训中,学生将学习开发环境搭建、应用程序设计、硬件驱动开发等内容。

他们将通过实际操作,熟悉鸿蒙应用开发的流程和方法,掌握基本的应用开发技巧。

嵌入式系统实训将以项目驱动的方式进行,学生将分为小组进行实际应用开发。

通过团队合作,学生可以培养自己的沟通协作能力,并且在实际项目中解决问题,锻炼自己的解决问题的能力。

通过嵌入式系统实训,学生可以获得宝贵的实践经验,从而更好地应对实际工作中的挑战。

同时,他们还可以将所学知识应用到自己的毕业设计或创新创业项目中,为自己的未来发展打下坚实的基础。

总之,嵌入式系统实训是一门有着广阔应用前景的课程,通过学习鸿蒙应用开发,学生可以在嵌入式系统领域中获得更多的机会和挑战。

希望通过实训,学生们能够掌握嵌入式系统开发的核心技术,为自己的职业发展打下坚实的基础。

天津大学嵌入式系统实验报告

天津大学嵌入式系统实验报告

2013-2014-(2)-Embedded System
《嵌入式系统设计》
实验报告
成绩:
评阅人:
学院:计算机科学与技术
专业:计算机科学与技术
年级:2011级
学生:童浏靓/ 3011216104
邱碧茹/ 3011216076
日期:2014年5月
1.实验内容:
实验内容描述。

参考:《嵌入式系统实验指导书》
注:前几个实验汇总为一个实验报告,综合实验单独一个报告。

2.实验系统框图:
参考:《嵌入式系统实验指导书》
3.软件设计:(综合实验)
软件各组成部分的说明,整体软件流程图,可附少量你自己修改过的代码。

4.实验结果和效果描述:
对实验完成后的结果或效果进行描述。

5.实验心得:
你在本次实习中的心得体会或任何你想说明的其他问题。

嵌入式系统实验报告_2

嵌入式系统实验报告_2

嵌入式系统设计实验报告班级:学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP-3000实验台基本结构及使用方法1.2 实验目的1.学习嵌入式系统开发流程。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。

3.增加对各个外设的了解,为今后各个接口实验打下基础。

1.3 实验环境博创UP-NETARM3000 嵌入式开发平台1.4 实验内容及要求(1)嵌入式系统开发流程概述(2)熟悉UP-net3000实验平台的核心硬件电路和外设(3)ARM JTAG的安装与使用(4)通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态(5)通过本次课程对各个外设的了解,为今后各个接口实验打下基础1.5 实验设计与实验步骤1.硬件安装2.软件安装(1)超级终端:运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择 ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。

(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装 JTAG 软件。

1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。

1.8 心得体会通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。

2. 实验二2.1 实验名称ADS1.2软件开发环境使用方法2.2 实验目的熟悉ADS1.2开发环境,学会 ARM仿真器的使用。

使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。

2.3 实验环境(1)ADS1.2开发环境(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线2.4 实验内容及要求本次实验使用ADS 集成开发环境,新建一个简单的工程文件,并编译这个工程文件。

嵌入式综合实训实验报告

嵌入式综合实训实验报告

一、实验背景与目的随着信息技术的飞速发展,嵌入式系统在各个领域的应用越来越广泛。

为了提升学生对嵌入式系统的理解和应用能力,本实验课程旨在通过综合实训,让学生全面掌握嵌入式系统的开发流程,包括硬件选型、软件开发、系统调试以及项目实施等环节。

通过本实验,学生能够熟悉嵌入式系统的基本原理,提高实际操作能力,为今后从事嵌入式系统相关工作打下坚实基础。

二、实验环境与工具1. 硬件平台:选用某型号嵌入式开发板作为实验平台,具备丰富的外设接口,如GPIO、UART、SPI、I2C等。

2. 软件平台:采用某主流嵌入式Linux操作系统,支持交叉编译工具链,方便软件开发和调试。

3. 开发工具:集成开发环境(IDE),如Eclipse、Keil等,提供代码编辑、编译、调试等功能。

4. 其他工具:示波器、逻辑分析仪、电源适配器等。

三、实验内容与步骤1. 硬件平台搭建(1)根据实验要求,连接嵌入式开发板与计算机,确保硬件连接正确无误。

(2)配置开发板电源,检查开发板各个外设是否正常工作。

2. 软件环境搭建(1)在计算机上安装嵌入式Linux操作系统,并配置交叉编译工具链。

(2)安装集成开发环境(IDE),如Eclipse或Keil,并进行相关配置。

3. 嵌入式系统开发(1)根据实验要求,设计嵌入式系统功能模块,编写相关代码。

(2)利用IDE进行代码编辑、编译、调试,确保程序正常运行。

4. 系统调试与优化(1)使用示波器、逻辑分析仪等工具,对系统进行调试,检查各个模块是否正常工作。

(2)根据调试结果,对系统进行优化,提高系统性能和稳定性。

5. 项目实施(1)根据实验要求,设计并实现一个嵌入式系统项目,如智能家居控制系统、工业自动化控制系统等。

(2)编写项目报告,总结项目实施过程和心得体会。

四、实验结果与分析通过本次嵌入式综合实训,我们完成了以下实验内容:1. 熟悉嵌入式开发平台的基本硬件和软件环境。

2. 掌握嵌入式系统开发流程,包括硬件选型、软件开发、系统调试等环节。

嵌入式LabVIEW调用DLL实现数据采集

嵌入式LabVIEW调用DLL实现数据采集

嵌入式LabVIEW调用DLL实现数据采集
黄佳钰;邓焱;张锦杰
【期刊名称】《微计算机信息》
【年(卷),期】2010(026)011
【摘要】为了实现便携式高精度检波器测试仪的数据采集和信号处理,本文研究了嵌入式系统中开发LabVIEW应用程序的方法.本文以ARM+Windows CE为平台进行了检波器测试仪的软硬件设计,分析了基于24位地震勘探芯片组的数据采集模块的控制方法,开发了实现SPI总线通讯和GPIO控制的驱动程序,以及实现芯片组数据采集流程的接口函数,针对嵌入式LabVIEW应用程序编译和运行环境的跨平台问题,研究并验证了动态连接库的存根调用方法,最终在嵌入式系统中实现了LabVIEW应用程序的数据采集.
【总页数】3页(P26-28)
【作者】黄佳钰;邓焱;张锦杰
【作者单位】100084,北京,清华大学精密仪器与机械学系精密计量测试技术与仪器国家重点实验室;100084,北京,清华大学精密仪器与机械学系精密计量测试技术与仪器国家重点实验室;100084,北京,清华大学精密仪器与机械学系精密计量测试技术与仪器国家重点实验室
【正文语种】中文
【中图分类】TP274
【相关文献】
bVIEW中调用DLL实现PC-6313接口卡的数据采集 [J], 黄艳岩;杨孝鹏;陈乐
bVIEW对数据采集卡DLL函数的调用 [J], 刘传清
3.基于LabVIEW环境下调用DLL实现仪器控制 [J], 侯博;廖醒宇
bVIEW平台下调用DLL实现PC/104数据采集 [J], 袁魏华;韩裕生;张伟伟;李小明
5.基于调用DLL的LabVIEW数据采集的实现 [J], 张亿雄;顾海明
因版权原因,仅展示原文概要,查看原文内容请购买。

嵌入式系统实训报告范文3篇

嵌入式系统实训报告范文3篇

嵌入式系统实训报告范文嵌入式系统实训报告范文精选3篇(一)以下是一份嵌入式系统实训报告范文,供参考:实训报告课程名称:嵌入式系统实训姓名:XXX学号:XXXX日期:XXXX年XX月XX日一、实训目的和背景嵌入式系统是一种专门用于控制和执行特定任务的计算机系统。

本次实训旨在通过设计、搭建并测试一个简单的嵌入式系统,帮助学生理解嵌入式系统的根本原理和应用,并提供理论时机来加深对嵌入式系统的理解和应用才能。

二、实训内容1. 系统设计本实训的目的是设计一个简单的温度监测系统。

该系统包括一个传感器用于检测环境温度,并将温度值传输到单片机上进展处理。

单片机再将处理后的数据显示在LCD屏幕上。

2. 硬件搭建根据系统设计,我们首先需要准备以下硬件器件:传感器、单片机、LCD屏幕、电等。

实际搭建时,我们按照电路图连接各个硬件器件,并进展电接入和信号连接的测试。

3. 软件编程完成硬件搭建后,接下来需要进展软件编程。

我们使用C语言来编写嵌入式系统的程序。

主要编程内容包括读取传感器数据、对数据进展处理和计算、将计算结果显示在LCD屏幕上等。

4. 系统测试完成软件编程后,我们进展系统测试。

主要测试内容包括:检测传感器是否能准确读取温度数据、单片机是否能正确处理数据、LCD屏幕是否正常显示等。

通过测试,可以评估系统的稳定性和可靠性。

三、实训收获通过参与本次实训,我收获了以下几点:1. 对嵌入式系统的理解更加深化:通过实操,我对嵌入式系统的原理和应用有了更深化的理解。

2. 掌握了硬件搭建和连接的技能:我学会了如何搭建和连接硬件器件,进步了理论操作才能。

3. 锻炼了软件编程才能:通过编写嵌入式系统的程序,我熟悉了C语言的应用,并提升了编程才能。

4. 增加了问题解决才能:在搭建和编程过程中,遇到了一些困难和问题,通过不断调试和学习,我学会了如何解决问题和排除故障。

综上所述,本次嵌入式系统实训对于进步我的理论操作才能、编程才能和问题解决才能具有重要意义。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告学院:计算机科学与工程姓名:学号:______________专业:指导老师:完成日期:实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1进一步熟悉Keil C51集成开发环境调试功能的使用;1.2学会自己编写程序,进行编译和仿真测试;1.3利用开发板下载hex文件后验证功能。

二、实验原理2.1:实验原理图2.2:工作原理2.2.1:流水灯电路中有LO,1,L2,L3,4,L5,L6,L7 共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。

A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。

引脚LED_ SEL 为1时,发光二极管才工作,否则右边的数码管工作。

注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。

2.2.2:8位数码管数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。

当E3输入为1,也就是LED_ SEL输入为0时,根据SELO~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。

三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。

当全部点亮八个发光二极管后,八个发光二极管同时熄灭,间隔300ms后,发光二极管再次从左至右依次点亮。

如此反复循坏。

3.2:8位数码管对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。

可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。

在后续的案例中可以看到该现象。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告实验题目:嵌入式系统设计与开发实验时间:2021年10月10日实验地点:实验室一号机房实验目的:通过完成嵌入式系统的设计与开发实验,掌握嵌入式系统的基本原理和开发方法。

实验设备:ARM开发板、电脑、网络连接器、编程软件、USB数据线等实验步骤:1. 配置开发环境将ARM开发板与电脑通过USB数据线连接,并安装相应的开发软件,包括编程软件和编译器。

2. 设计嵌入式系统根据实验要求和功能需求,设计嵌入式系统的硬件和软件部分。

确定所需的传感器、执行器和其他硬件模块,并设计系统的软件架构。

3. 开发嵌入式系统编写系统的底层驱动程序,包括对各个硬件模块的控制和通信。

使用C语言或汇编语言进行编程,并进行编译和调试。

4. 系统测试与调试将开发板与相应的传感器和执行器连接,并进行系统测试。

通过调试程序代码,确保系统的各个功能正常运行。

5. 性能优化与扩展根据实际的需求和性能要求,对系统进行优化和扩展。

可以优化程序的运行效率、增加系统的功能模块等。

实验结果:经过一段时间的设计、开发和调试,我成功地完成了嵌入式系统的设计与开发。

该系统具有以下功能:1. 实时监测温度和湿度,并将数据实时显示在LCD屏幕上。

2. 当温度或湿度超过设定阈值时,系统会自动发出警报并记录异常。

3. 根据用户的输入,可以手动控制执行器的开关状态。

实验总结:通过本次实验,我对嵌入式系统的设计和开发有了更深入的了解。

我学到了如何在嵌入式系统中进行硬件和软件的协同设计,以及如何使用相应的开发工具进行开发和调试。

通过不断实践和调试,我也提高了自己的问题解决能力和编程能力。

在以后的学习和工作中,我将继续学习和探索嵌入式系统的更多知识,并应用于实际项目中。

嵌入式专周实训总结报告

嵌入式专周实训总结报告

一、前言嵌入式系统作为现代科技的重要组成部分,广泛应用于工业、消费电子、医疗、交通等领域。

为了提高我国嵌入式系统研发水平,培养具备实际操作能力的嵌入式系统研发人才,我校特开展了嵌入式专周实训。

本次实训旨在让学生深入了解嵌入式系统原理,掌握嵌入式系统开发流程,提高学生的实际动手能力。

以下是本次实训的总结报告。

二、实训目的与意义1. 了解嵌入式系统基础知识,包括硬件、软件、系统架构等方面。

2. 掌握嵌入式系统开发流程,包括需求分析、硬件选型、软件设计、编程调试等。

3. 培养学生的实际动手能力,提高学生的团队协作能力。

4. 为学生提供实践平台,为今后从事嵌入式系统研发工作奠定基础。

三、实训内容与过程1. 理论学习本次实训首先进行了嵌入式系统基础知识的学习,包括嵌入式系统定义、分类、特点、发展趋势等。

通过学习,学生掌握了嵌入式系统的基础理论,为后续实践奠定了基础。

2. 硬件学习实训过程中,学生学习了嵌入式系统硬件知识,包括处理器、存储器、外设接口、通信接口等。

通过学习,学生了解了硬件选型原则和嵌入式系统硬件设计方法。

3. 软件学习在软件学习环节,学生学习了嵌入式系统软件开发流程,包括操作系统选择、编程语言、开发环境搭建、编程规范等。

通过学习,学生掌握了嵌入式系统软件开发的基本方法。

4. 实践操作在实践操作环节,学生分为小组,根据实训任务进行嵌入式系统开发。

具体任务包括:(1)硬件选型:根据项目需求,选择合适的处理器、存储器、外设等硬件资源。

(2)软件设计:根据硬件选型,设计嵌入式系统软件架构,编写代码实现功能。

(3)编程调试:在开发过程中,对代码进行调试,确保系统稳定运行。

(4)项目演示:完成嵌入式系统开发后,进行项目演示,展示实训成果。

四、实训成果与收获1. 学生掌握了嵌入式系统基础知识,为今后从事嵌入式系统研发工作奠定了基础。

2. 学生熟悉了嵌入式系统开发流程,具备实际动手能力。

3. 学生通过团队协作,提高了沟通能力和团队协作能力。

嵌入式系统开发实训报告

嵌入式系统开发实训报告

一、引言随着科技的飞速发展,嵌入式系统在各个领域的应用越来越广泛,嵌入式系统开发已成为当今IT行业的热门方向。

为了提高我国嵌入式系统开发人才的综合素质,培养具有创新能力和实践能力的高素质人才,我国高校纷纷开设了嵌入式系统开发实训课程。

本文以某高校嵌入式系统开发实训课程为例,对实训过程、实训成果及实训体会进行总结。

二、实训过程1. 实训目标(1)掌握嵌入式系统基本原理,熟悉嵌入式系统开发流程。

(2)熟练使用嵌入式开发工具,如Keil、IAR等。

(3)具备嵌入式系统硬件电路设计与调试能力。

(4)掌握C语言编程,熟悉嵌入式系统开发中的算法设计。

(5)具备嵌入式系统项目开发与团队协作能力。

2. 实训内容(1)嵌入式系统基础知识:了解嵌入式系统概念、特点、分类及发展趋势。

(2)嵌入式系统硬件电路设计:学习嵌入式系统硬件电路设计方法,包括电源电路、时钟电路、存储器电路、外设接口电路等。

(3)嵌入式系统软件开发:学习嵌入式系统软件开发流程,掌握C语言编程,熟悉嵌入式系统开发中的算法设计。

(4)嵌入式系统调试:学习嵌入式系统调试方法,包括代码调试、硬件调试、系统调试等。

(5)嵌入式系统项目开发:以实际项目为背景,进行嵌入式系统项目开发,培养团队协作能力。

3. 实训方法(1)理论学习:通过课堂讲解、教材阅读等方式,学习嵌入式系统基础知识。

(2)实践操作:在实验室进行嵌入式系统硬件电路设计与调试、软件开发、调试等实践操作。

(3)项目开发:以实际项目为背景,进行嵌入式系统项目开发,培养团队协作能力。

三、实训成果1. 知识成果(1)掌握了嵌入式系统基本原理、开发流程及开发工具。

(2)熟悉了嵌入式系统硬件电路设计、软件开发及调试方法。

(3)掌握了C语言编程,熟悉了嵌入式系统开发中的算法设计。

2. 技能成果(1)具备嵌入式系统硬件电路设计与调试能力。

(2)具备嵌入式系统软件开发能力。

(3)具备嵌入式系统项目开发与团队协作能力。

嵌入式系统原理实训报告

嵌入式系统原理实训报告

一、引言随着科技的飞速发展,嵌入式系统已经渗透到我们生活的方方面面。

嵌入式系统以其强大的功能、低功耗、低成本等特点,在各个领域得到了广泛应用。

为了更好地理解和掌握嵌入式系统的原理与应用,我们进行了为期两周的嵌入式系统原理实训。

本文将详细记录实训过程,并对所学知识进行总结。

二、实训目标与内容本次实训的主要目标是:1. 理解嵌入式系统的基本概念、组成和特点;2. 掌握嵌入式系统的硬件和软件设计方法;3. 熟悉嵌入式系统开发工具和环境;4. 完成一个小型嵌入式系统项目的设计与实现。

实训内容主要包括:1. 嵌入式系统概述;2. 嵌入式系统硬件设计;3. 嵌入式系统软件开发;4. 嵌入式系统项目实践。

三、实训过程1. 嵌入式系统概述实训的第一周,我们学习了嵌入式系统的基本概念、组成和特点。

通过查阅资料、课堂讲解和小组讨论,我们对嵌入式系统有了初步的认识。

嵌入式系统通常由微处理器、存储器、输入输出接口、电源和外围电路等组成,其特点是体积小、功耗低、可靠性高、实时性强等。

2. 嵌入式系统硬件设计在实训的第二周,我们学习了嵌入式系统硬件设计的基本知识。

首先,我们了解了常见的嵌入式处理器,如ARM、MIPS、AVR等。

然后,学习了嵌入式系统硬件设计的基本流程,包括系统需求分析、硬件选型、电路设计、PCB布局与布线等。

在硬件设计过程中,我们重点学习了微处理器的接口技术、存储器扩展、时钟电路、电源电路等。

3. 嵌入式系统软件开发嵌入式系统软件开发是本次实训的重点内容。

我们学习了C语言和汇编语言在嵌入式系统中的应用,了解了嵌入式操作系统(如Linux、uc/OS等)的基本原理和开发方法。

在软件开发过程中,我们重点学习了嵌入式系统的启动过程、中断处理、任务调度、文件系统等。

4. 嵌入式系统项目实践在实训的最后阶段,我们进行了一个小型嵌入式系统项目的实践。

项目要求设计一个基于ARM处理器的温度监测系统,通过温度传感器采集环境温度,并通过LCD显示实时温度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Blinky实验
一、建立Keil工程
1.选择Project→New uVision Project命令,弹出Create New Project 对
话框,指定工程路径并在文件名文本框中输入Blinky,如图1所示。

图1
2.单击“保存”按钮,弹出Select Device for Target 窗口,在左侧的
列表框中选择CPU的类型(Philips的LPC2138芯片),右边对应出现该
芯片的资源描述,如图2所示。

图2
3.单击OK按钮,出现如图3所示提示信息(是否复制启动代码到工程文件
夹并添加文件到工程中)。

这里的启动代码是依据设置的编译器而生成的。

图3
4.单击是按钮添加启动代码,此时启动代码已经添加到工程中,左侧的
Project Workspace 中显示添加的启动代码文件,双击Startup.s可查看代码,如图4所示。

图4
5.在工作空间中选中Target 1,单击右键从弹出菜单选择Add Group,分
别添加System Calls 和 Source Code两个文件夹,然后右键从弹出菜单选择Add Files to Group“System Calls/Source Code”命令分别为其添加retarget.c和blinky.c文件,如图5所示。

图5
二、进行工程配置
1.在工作空间选择Target1 右键选择Options for Target‘Target1’命
令,弹出对话框如图6所示,设置Xtal为8MHz。

图6
2.单击Output标签,再单击Create Hex File前面的单选按钮,如图7
所示。

可生成hex格式可执行文件,再单击Select Folder for Objects
按钮,指定输出文件路径。

图7
3.单击Listing标签,再单击Select Folder for Listings按钮,指定生
成的list文件的输出路径,然后单击Assembler Listing和Linker Listing前面的单选按钮,如图8所示。

图8
4.单击Linker标签,设定链接器参数,指定Linker Script文件的路径,
如图9所示,单击Edit按钮对Flash.ld文件进行编辑。

图9
5.单击OK按钮保存设置。

三、Build目标
在工作空间右键单击选择Build Target或者按F7键,编译并链接工程,输出窗口如图10所示。

四、程序仿真
1.Keil内寄存器查看结果,如图11所示。

图11
观察到IO口16~23依次输出为1,然后23~16依次输出为1,无限循环。

2.电路仿真
1)启动Proteus,连接如图所示电路。

图12
2)选择元件LP2318,在弹出的快捷菜单中选择编辑属性,在Program
Files栏设定程序文件(blinky.hex)的路径,如图13所示。

图13
3)运行仿真,仿真结果如图14所示。

(IO口输出为1时灯灭!)
图14
五、程序分析
1.
Retarget.c //此程序文件主要用来重新实现底层IO的基
本函数#include <rt_misc.h> //操作系统和处理器目标启动相关头文件
#pragma import(__use_no_semihosting_swi) //不使用编译器自带的软
中断服务函数
void _sys_exit(int return_code) {
label: goto label; /* endless loop */
} //系统退出的底层实现,直接用死循环来模拟最后程序的退出。

2.blinky.c
#include <LPC21xx.H> /* 包含LPC21xx头文件 */
void wait (void) { /* 延时函数 */
int d;
for (d = 0; d < 1000000; d++);
}
int main (void) {
unsigned int i; /* LED 标号 */
IODIR1 = 0x00FF0000; /* P1.16..23 定义为输出口*/
while (1) { /* 无限循环 */
for (i = 1<<16; i < 1<<23; i <<= 1) { /* i从16递加到23 */ IOSET1 = i; /* 使对应P.i输出为1 */ wait (); /* 延时 */
IOCLR1 = i; /* 使对应P.i输出为0 */ }
for (i = 1<<23; i > 1<<16; i >>=1 ) { /* i从23递减到16*/ IOSET1 = i; /*使对应P.i输出为1 */ wait (); /*延时*/
IOCLR1 = i; /*使对应P.i输出为0 */ }
}
}
/*P.i输出为1时,电路仿真中灯灭;P.i输出为0时,电路仿真中灯亮 */。

相关文档
最新文档