嵌入式系统实验作业模板1.docx

上传人:b****3 文档编号:24822125 上传时间:2023-06-01 格式:DOCX 页数:13 大小:71.42KB
下载 相关 举报
嵌入式系统实验作业模板1.docx_第1页
第1页 / 共13页
嵌入式系统实验作业模板1.docx_第2页
第2页 / 共13页
嵌入式系统实验作业模板1.docx_第3页
第3页 / 共13页
嵌入式系统实验作业模板1.docx_第4页
第4页 / 共13页
嵌入式系统实验作业模板1.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

嵌入式系统实验作业模板1.docx

《嵌入式系统实验作业模板1.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验作业模板1.docx(13页珍藏版)》请在冰豆网上搜索。

嵌入式系统实验作业模板1.docx

嵌入式系统实验作业模板1

 

嵌入式系统及应用开放性实验报告

 

得分:

 

题目:

基于LPC2378的温度采集

专业名称:

电气工程及其自动化

学生姓名:

吴盼盼

班级:

09021303

时间:

2016.6.18

 

1、总体设计方案

利用热敏电阻获得温度模拟量,再借助ad转换转换成十进制数字量,再在LCD屏上显示出温度的数值,并且画出了温度随时间变化的坐标系和曲线。

热敏电阻器是敏感元件的一类,按照温度系数不同分为正温度系数热敏电阻器(PTC)和负温度系数热敏电阻器(NTC)。

热敏电阻器的典型特点是对温度敏感,不同的温度下表现出不同的电阻值。

正温度系数热敏电阻器(PTC)在温度越高时电阻值越大,负温度系数热敏电阻器(NTC)在温度越高时电阻值越低,它们同属于半导体器件。

2、具体设计

2.1程序框图

 

设置IO口置位和清零函数

 

 

 

 

2.2实验程序代码

AD转换成10进制代码:

#include"Code1.h"

constunsignedintTemp_code[]=

{2843,2718,2599,2486,2379,2277,2180,2087,1999,1916,1836,1760,1688,1619,1553,1490,1430,1373,1319,1266,1217,1169,1124,1081,1039,1000,

962,925,891,857,826,795,766,738,711,686,661,638,615,593,573,553,534,515,497,480,464,449,433,419,405,

392,379,366,355,343,332,321,311,301,292,283,274,265,257,249,242,234,227,220,214,208,201,195,190,184,

};

ucharcheck_code(uintk)

{

unsignedchari;

if(k<184)return(76);

for(i=0;k

return(i-1);

}

externuintTotemp(uintAD)

{

unsignedintItemp;

unsignedintTk;

Tk=1023-AD;

Itemp=(uint)(((ulong)1000*AD)/Tk);

return(Itemp);

}

ucharGet_Temp(uinti)

{

return(check_code(Totemp(i)));

}

程序代码:

uintcolor[]={0xf8,0x00,0x07,0xe0,0x00,0x1f,0xff,0xe0,0x00,0x00,0xff,0xff,0x07,0xff,0xf8,0x1f};

uintPOINT_COLOR=0XF800;

voidIo_Set(ucharpin)

{

unsignedintio_data=1;

io_data=io_data<

IOSET0=io_data;

}

voidIo_Clr(ucharpin)

{

unsignedintio_data=1;

io_data=io_data<

IOCLR0=io_data;

}

voidIo_Set2(ucharpin)

{

unsignedintio_data=1;

io_data=io_data<

FIO2SET=io_data;

}

voidIo_Clr2(ucharpin)

{

unsignedintio_data=1;

io_data=io_data<

FIO2CLR=io_data;

}

voidOUT_DATA(unsignedchardata)

{

FIO2CLR=0x000000ff;

FIO2SET=data;

}

voiddelay(unsignedinti)

{

unsignedintk=1000;

i=i+2;

while(i>0)

{

i--;

}

while(k>1)k--;

}

voidLCD_WR_DATA_BYTE(ucharDataH,ucharDataL)

{

Io_Set(RS);

Io_Set(ALE);

OUT_DATA(DataL);

Io_Clr(ALE);

delay(3);

OUT_DATA(DataH);

Io_Clr(WR);

Io_Set(WR);

}

voidLCD_WR_DATA(uintval)

{

Io_Set(RS);

Io_Set(ALE);

delay(3);

OUT_DATA(val);

Io_Clr(ALE);

delay(3);

OUT_DATA(val>>8);

Io_Clr(WR);

Io_Set(WR);

}

voidLCD_WR_COM(uintcom)

{

Io_Clr(RS);

Io_Set(ALE);

delay(3);

OUT_DATA(com);

Io_Clr(ALE);

delay(3);

OUT_DATA(com>>8);

Io_Clr(WR);

Io_Set(WR);

}

voidLCD_WR_COM_DATA(intcom1,intdat1)

{

LCD_WR_COM(com1);

LCD_WR_DATA(dat1);

}

voidLCD_SET_LOCATION(uinti,uintj)

{

LCD_WR_COM_DATA(0x0020,0);

LCD_WR_COM_DATA(0x0021,0);

LCD_WR_COM(0x0022);

}

voidLCD_CLEAR(ucharx,uinty,ucharlen,uintwid)

{

ulongn,temp;

LCD_WR_COM_DATA(0x0020,0);

LCD_WR_COM_DATA(0x0021,0);

LCD_WR_COM(0x0022);

temp=(ulong)len*wid;

for(n=0;n

}

voidLCD_ShowChar(ucharx,uinty,ucharnum)

{

#defineMAX_CHAR_POSX932//234

#defineMAX_CHAR_POSY1232//308

uchartemp;

ucharpos,t;

if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;

LCD_WR_COM_DATA(0x0020,x);

LCD_WR_COM_DATA(0x0021,y);

LCD_WR_COM_DATA(0x0050,x);//HorizontalGRAMStartAddress

LCD_WR_COM_DATA(0x0052,y);//VerticalGRAMStartAddress

LCD_WR_COM_DATA(0x0051,x+5);//HorizontalGRAMEndAddressLCD_WR_COM_DATA(0x0053,y+11);//VerticalGRAMendAddress

LCD_WR_COM(0x0022)

num=num-'';

for(pos=0;pos<12;pos++)

{

temp=asc2[num][12-pos];

for(t=0;t<6;t++)

{

if(temp&0x01)LCD_WR_DATA(POINT_COLOR);

elseLCD_WR_DATA(0xffff);

temp>>=1;

}

}

LCD_WR_COM_DATA(0x0050,0x0000);//HorizontalGRAMStartAddress

LCD_WR_COM_DATA(0x0051,0x00EF);//HorizontalGRAMEndAddress

LCD_WR_COM_DATA(0x0052,0x0000);//VerticalGRAMStartAddress

LCD_WR_COM_DATA(0x0053,0x013F);//VerticalGRAMStartAddress

}

voidLCD_ShowString(ucharx,uinty,constuchar*p)

{

while(*p!

='\0')

{

if(x>MAX_CHAR_POSX){x=0;y+=12;}

if(y>MAX_CHAR_POSY){y=x=0;LCD_CLEAR(0,0,240,320);}

LCD_ShowChar(x,y,*p);

x+=6;

p++;

}

}

voidLCD_ShowBmp(ucharx,uinty,ucharlenth,uintwide,constuchar*p)

{

ulongsize,temp;

temp=wide*2;

LCD_SET_LOCATION(0,0);

temp=(ulong)temp*lenth;

for(size=0;size

voidinit_port(void)

{PINSEL10=0;

IODIR0=0x000003c0;

IOSET0=0x000003c0;

FIO2DIR=0x000000ff;

FIO2MASK=0x00000000;

FIO2SET=0x000000ff;}

uintGetAD0(void)

{uintval;

uintt;

AD0CR=0x01000001|0x002E0400;

do{val=AD0GDR;

}while((val&0x80000000)==0);

AD0CR&=~0x01000001;

val=(val>>6)&0x03FF;

t=Get_Temp(val);

returnt;}

主程序代码:

intmain()

{

intZYJ;

intx;

charcode[30];

inti;

intj;

init_port();

PCONP|=(1<<12);

PINSEL0=0;

PINSEL1=0x00004000;

LCD_Init();

LCD_CLEAR(0,0,240,320);

while

(1)

{DDD=(int)GetAD0();

memset(code,0,sizeof(code));

sprintf(code,"TheTemperatureis%d",DDD);

POINT_COLOR=0x07E0;

LCD_ShowString(60,300,code);

LCD_ShowString(70,250,"090213032013302268");

for(i=0;i<240;++i)

{

LCD_ShowString(i,100,"-");

}

POINT_COLOR=0X001F;

LCD_ShowString(x,50+(ZYJ-25)*150/10,"#");

x++;

if(x>=240)

{

x=10;

LCD_CLEAR(0,0,240,250);

}

}

}

 

3、实验目的

(1)了解热敏电阻与温度的对应关系,熟悉温度采样硬件电路

(2)熟悉AD的结构,掌握AD寄存器的使用方法;

(3)掌握正确配置引脚的方法,实现指定功能;

(4)熟悉串口的机制,掌握串口寄存器的使用方法;

(5)实现温度采样,并将采样结果通过串口上传至PC端。

(6)实现温度数值在LCD上的显示

4、实验结果分析

实验结果就是在LCD屏上显示出学号、当前温度和温度随时间变化的坐标系和函数

5、总结

通过这次实验我加强了对ARM课本知识的了解,又助于今后ARM的学习,同时让我加强了编程能力,有助于我今后的学习。

通过这次实验我认识了自己的不足之处,同时也是要改进的地方,以便能精进自己的技能,加强自己的动手能力。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1