《嵌入式实训设计报 有代码》由会员分享,可在线阅读,更多相关《嵌入式实训设计报 有代码(35页珍藏版)》请在金锄头文库上搜索。
1、日照职业技术学院日照职业技术学院嵌入式实训设计报告嵌入式实训设计报告2012-20132012-2013 学年第一学期学年第一学期题 目: 基于嵌入式 ARM 的数字温度测量仪 100学 院: 信息科学与工程学院 专 业: 移动通信技术(3G 软件开发) 班 级: 2011 级移动通信技术一班 小 组: 姓名/学号: 仇念忍(201115060104) 董传荣(201115060105) 张士伟(201115060145) 指导教师: 陈祥艳 日 期: 目目 录录目目 录录第一章第一章 绪绪 论论 1.1 引言 11.2 系统方案设计 11.3 方案设计 2第二章第二章 系统主要器件系统主要器
2、件2.1 EasyARM2131 开发板 22.2 温度传感器 DS18B20 22.3 MS12864R 液晶屏简介 4第三章第三章 硬件设计硬件设计3.1 ARM7 开发板硬件设计 73.2 LCD 液晶屏显示设计 7第第 4 4 章章 系统的软件设计系统的软件设计4.1 系统主流程图 94.2 温度传感器功能模块 104.3 液晶显示功能模块10第第 5 5 章章 总结总结 11附录附录 A A 12前期准备:董传荣:编写程序并制定实训报告张士伟:负责修改实训报告仇念忍:负责运行程序并调试程序数字温度测量仪1 1 绪论绪论1.1 引言近年来随着科技的飞速发展,嵌入式的应用正在不断深入,同
3、时带动传统控制检测 技术日益更新。在实时检测和自动控制的嵌入式应用系统中,嵌入式往往作为一个核心 部件来使用,仅嵌入式方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完 善。温度是一种最基本的环境参数,人们生活与环境温度息息相关,在工业生产过程中需要实时测量温度,在工业生产中也离不开温度的测量,因此研究温度的测量方法和控制具有重要的意义。DS18B20 是美国 DALLAS 半导体公司继 DS1820 之后最新推出的一种改进型智能温度传感器,通过此次项目设计,可以在原有的理论基础上,更加深入的了解传感器的工作原理特别是 DS18B20 温度传感器的工作原理,同时提高我们的实践动手能力以及
4、逻辑思维能力,特别是拓宽了对 ARM 控制器的使用视野。数字温度计的控制方式很多。本系统采用 LPC2000 系列 ARM 芯片和可编程串行 I/O 接口芯片 DS18B20 为中心器件来设计数字温度计,实现了设计一个数字温度采集系统, 利用 LCD 液晶屏显示当前温度并具有温度超限报警功能。1.2 系统方案设计利用控制芯片、温度传感器、LCD 液晶屏、LED 等分别实现:(1)实时显示当前室内温度(5(度)#define eq 10; i-)IO0DIR |= eq; /改回输出IO0SET |= eq;delay1u(2); IO0CLR = eq;if(date /释放总线delay1u
5、(80);else IO0CLR = eq;delay1u(80);delay1u(30);IO0SET |= eq;delay1u(3);date=1;delay1u(6);unsigned char read()unsigned char i=0;unsigned char date = 0;for (i=8;i0;i-)date=1;IO0DIR |= eq; /改回输出IO0SET |= eq;delay1u(2);IO0CLR = eq; / 给脉冲信号delay1u(2);IO0SET |= eq; delay1u(13);IO0DIR = IO0DIR / 拉高总线输入delay
6、1u(12);if(IO0PINdelay1u(3);return date; unsigned char innit()unsigned char num;IO0DIR |= eq; /稍做延时IO0CLR = eq; /将 DQ 拉低delay1u(600); /精确延时 大于 480us 480IO0SET = eq; delay1u(30);IO0DIR /拉高总线输入delay1u(30); if(IO0PIN elsenum=1;IO0SET = num;delay1u(200); /300return num; void zhun()innit();write(0xCC);wri
7、te(0x44); delay1u(900000); innit();write(0xCC); write(0xBE);void display_temp1(unsigned char x)int i;unsigned char a,b,c; /j,k,l 分别储存温度的百位、十位和个位unsigned char k9 = “温度是:“;unsigned char l16=(“数字温度计姚-连“);W_instruct(0x88);for(i=0;i 16) / 获取 年a=bak / 1000;bak = bak % 1000;b=bak / 100;bak = bak % 100;c=ba
8、k / 10;d=bak % 10;W_instruct(0x81);W_data(digita); /将千位数字的字符常量写入 LCDW_data(digitb); /将百位数字的字符常量写入 LCDW_data(digitc); /将十位数字的字符常量写入 LCDW_data(digitd); /将个位数字的字符常量写入 LCDW_instruct(0x83); W_data(t0);W_data(t1);bak = (datas 8) / 获取 月a=bak / 10;b=bak % 10;W_instruct(0x84);W_data(digita); W_data(digitb);
9、W_instruct(0x85); W_data(s0);W_data(s1);bak = datas / 获取 日c=bak / 10;d=bak % 10;W_instruct(0x86);W_data(digitc); W_data(digitd); W_instruct(0x87); W_data(r0);W_data(r1); bak = (times 24) / 获取 星期a=bak;W_instruct(0x90); W_data(m0);W_data(m1);W_instruct(0x91); W_data(digita); bak = (times 16) / 获取 小时a=
10、bak / 10;b=bak % 10;W_instruct(0x92);W_data(digita); W_data(digitb); W_instruct(0x93); W_data(n0);W_data(n1); bak = (times 8) / 获取 分钟a=bak / 10;b=bak % 10;W_instruct(0x94);W_data(digita); W_data(digitb); W_instruct(0x95); W_data(p0);W_data(p1); bak = times / 获取 秒钟a=bak / 10;b=bak % 10;W_instruct(0x9
11、6);W_data(digita); W_data(digitb); W_instruct(0x97); W_data(q0);W_data(q1); int main()unsigned char a,b,TN,TD ; PINSEL0 = 0;PINSEL1 = 0;IO0DIR = 0x0000FFFF;IO1DIR = 0xFFFFFFFF; RTCInit();/ GPIO_init();init_lcd();while(1) zhun();b=read();a=read();TN=a*16+b/16; /实际温度值=(TH*256+TL)/16,即:TH*16+TL/16/这样得出
12、的是温度的整数部分,小数部分被丢弃了TD=(b%16)*10/16; display_temp1(TN);display_temp2(TD);if(TN=33)IO1PIN = IO1PIN 0xFFFFFFFF;elseIO1SET =0XFFFFFFFF;if(key1RTCInit();else if(key2RTCInit();else if(key3RTCInit();else if(key4RTCInit();else if(key5RTCInit();else if(key6RTCInit();while (0 = (ILR / 等待 RTC 增量中断ILR = 0x01;/ 清除中断标志SendTimeRtc();