S3C440Box嵌入式系统实验报告.docx

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

S3C440Box嵌入式系统实验报告.docx

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

S3C440Box嵌入式系统实验报告.docx

S3C440Box嵌入式系统实验报告

嵌入式系统

       

     姓名:

努尔买买提·吐孙

     学号:

12600123

     班级:

计算机科学与技术非师范121班

实验一LCD控制

一、实验目的

1、初步掌握液晶显示屏的使用及其电路设计方法。

2、掌握S3C44B0X处理器的LCD控制器的使用。

3、通过实验掌握液晶显示文本和图形的方法以及程序设计方法。

二、实验内容

学习LCD显示器的基本原理,理解其驱动的控制方法。

掌握S3C44B0X处理器的基本原理和方法,并编程实现:

1、画出多个矩形框

2、显示ASCII字符

3、显示汉字字符

三、实验流程图

四、实验核心代码

  #include"44b.h"

  #include"uhal.h"

  #include"option.h"

  #include"def.h"

#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting

  externU32LCDBuffer[240][320];

  intmain(void)

  {

  inti,j,k;

  U32jcolor;

  ARMTargetInit();//开发版初始化

  LCD_Init();//LCD初始化

  for(k=10;k<200;k++)

  LCDBuffer[k][10]=0x000000e0;

  for(k=10;k<200;k++)

  LCDBuffer[k][100]=0x000000e0;

  for(j=10;j<100;j++)

  LCDBuffer[10][j]=0x000000e0;

  for(j=10;j<100;j++)

  LCDBuffer[200][j]=0x000000e0;

  LCD_Refresh();

  while

(1);

  return0;

}

实验二键盘控制实验

一、实验目的

1、学习键盘及LED驱动原理。

2、掌握ZLG7289芯片的使用方法。

二、实验内容

通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上面显示出来。

三、实验流程图

1、定义ZLG7289寄存器(zlg7289.h)

  2、定义键值读取函数

3、编写主函数,将键值在数码管上显示

四、实验核心代码:

#include"uhal.h"

#include"keyboard.h"

#include"zlg7289.h"

#include"44b.h"

#include"myuart.h"

#include"LCD320.h"

#pragmaimport(__use_no_semihosting_swi)

externintZlg7289SIOBand;

externintZlg7289SIOCtrl;

intmain(void)

{

U32key;

ARMTargetInit();//开发版初始化

Uart_Printf("\nArmTargetInitOK.");

Zlg7289_Reset();//zlg7289复位

ARMTargetInit();//开发版初始化

LCD_Init();

LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式

LCD_Cls();//文本模式下清屏命令

while

(1)

{key=GetKey();//得到按键值

Delay(7000);

switch(key)

{

case(0):

LCD_printf("NUM\n");

Uart_Printf("\nNUM\n");

break;

case

(1):

LCD_printf("/\n");

Uart_Printf("\n1\n");

break;

case

(2):

LCD_printf("*\n");

Uart_Printf("\n2\n");

break;

case(3):

LCD_printf("-\n");

Uart_Printf("\n3\n");break;

case(4):

LCD_printf("7\n");

Uart_Printf("\n4\n");break;

case(5):

LCD_printf("8\n");

Uart_Printf("\n5\n");break;

case(6):

LCD_printf("9\n");

Uart_Printf("\n6\n");break;

case(7):

LCD_printf("+\n");

Uart_Printf("\n7\n");break;

case(8):

LCD_printf("4\n");

Uart_Printf("\n8\n");break;

case(9):

LCD_printf("5\n");

Uart_Printf("\n9\n");break;

case(10):

LCD_printf("6\n");

Uart_Printf("\nNUMLOCK\n");break;

case(11):

LCD_printf("1\n");

Uart_Printf("\n/\n");break;

case(12):

LCD_printf("2\n");

Uart_Printf("\n*\n");break;

case(13):

LCD_printf("3\n");

Uart_Printf("\n-\n");break;

case(14):

LCD_printf("Enter\n");

Uart_Printf("\nEnter\n");break;

case(15):

LCD_printf("0\n");

Uart_Printf("\n+\n");break;

case(16):

LCD_printf("Dle\n");

Uart_Printf("\nDle\n");break;

}

ZLG7289_ENABLE();//使zlg7289占有同步串口

Delay(5);//延时

WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个

数码管亮

//WriteSDIO(key);//显示个位

Delay

(1);//延时*/

if(key>=4&&key<16)

{

switch(key)

{

case(4):

WriteSDIO(7);

Delay

(1);

break;

case(5):

WriteSDIO(8);

Delay

(1);

break;

case(6):

WriteSDIO(9);

Delay

(1);

break;

case(8):

WriteSDIO(4);

Delay

(1);

break;

case(9):

WriteSDIO(5);

Delay

(1);

break;

case(10):

WriteSDIO(6);

Delay

(1);

break;

case(11):

WriteSDIO

(1);

Delay

(1);

break;

case(12):

WriteSDIO

(2);

Delay

(1);

break;

case(13):

WriteSDIO(3);

Delay

(1);

break;

case(15):

WriteSDIO(0);

Delay

(1);

break;

}

}

ZLG7289_DISABLE();//zlg7289放弃同步串口控制权

}

return0;

}

五、实验体会

  在本次实验,熟悉了键盘以及LED的驱动原理。

键盘的闭合键,通常采用两种方法,即行扫描法和行反转法获取键值。

同时还了解了ZLG7289芯片的特点和基本使用方法。

实验三A/D接口实验

一、实验目的

1、熟悉ARM本身自带的八路十位A/D控制器及相应寄存器。

2、编程实现ARM系统的A/D功能,掌握带有A/D的CPU编程实现A/D功能的主要方法。

二、实验内容

学习A/D和LCD接口原理,了解实现A/D和LCD系统对于系统的软件和硬件要求。

阅读ARM芯片文档,掌握ARM的A/D和LCD相关寄存器的功能,熟悉ARM系统硬件的A/D和LCD相关接口。

利用外部模拟信号编程实现ARM循环采集全部前4路通道,并且在LCD上动态显示曲线。

每个通道以不同颜色的画笔绘制曲线。

三、实验流程图

  1、获取转换结果函数

四、实验核心代码

#include"44b.h"

#include"uhal.h"

#include"option.h"

#include"def.h"

#include"myuart.h"

#include"LCD320.h"

externU32LCDBuffer[240][320];

#pragmaimport(__use_no_semihosting_swi)

#defineADCCON_FLAG0x40

#defineADCCON_SLEEP0x20

#defineADCCON_ADIN0(0x0<<2)

#defineADCCON_ADIN1(0x1<<2)

#defineADCCON_ADIN2(0x2<<2)

#defineADCCON_ADIN3(0x3<<2)

#defineADCCON_ADIN4(0x4<<2)

#defineADCCON_ADIN5(0x5<<2)

#defineADCCON_ADIN6(0x6<<2)

#defineADCCON_ADIN7(0x7<<2)

#defineADCCON_READ_START0x2

#defineADCCON_ENABLE_START0x1

voidinit_ADdevice()

{//初始化

rADCPSR=20;

rADCCON=ADCCON_SLEEP;

}

intGetADresult(intchannel)

{

rADCCON=(channel<<2)|ADCCON_ENABLE_START;

Delay(10);

while(!

(rADCCON&ADCCON_FLAG));//转换结束

returnrADCDAT;//返回采样值

}

intmain(void)

{

   U32jcolor;

   U32jcolor1;

   U32jcolor2;

   U32jcolor3;

intmid;

intfs;

inti,j,k,s,t;

intpre[4];

floatd;

ARMTargetInit();//开发版初始化

init_ADdevice();

Uart_Printf("\n");

LCD_Init();

jcolor=0x0000e0e0;

jcolor1=0x000000e0;

jcolor2=0x00e0e0e0;

jcolor3=0x0000e000;

t=320;

while

(1)

{

   if(t==320)

{//采样0~3路A/D值

t=0;

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

for(j=0;j<320;j++)

LCDBuffer[k][j]=0x00000000;//背景黑色

}

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

{

d=GetADresult(i)*2.5/1023;

s=(int)(d*15);

fs=55*(i+1)-s;

LCDBuffer[fs][t]=jcolor;//线条颜色

if(t!

=0)

{

mid=(pre[i]+fs)/2;

for(k=pre[i];k

LCDBuffer[k][t-1]=jcolor;

for(k=mid;k

LCDBuffer[k][t]=jcolor;

for(k=mid;k

LCDBuffer[k][t-1]=jcolor;

for(k=fs;k

LCDBuffer[k][t]=jcolor;

}

pre[i]=fs;

}

for(i=1;i<2;i++)

{

d=GetADresult(i)*2.5/1023;

s=(int)(d*15);

fs=55*(i+1)-s;

LCDBuffer[fs][t]=jcolor1;//线条颜色

if(t!

=0)

{

mid=(pre[i]+fs)/2;

for(k=pre[i];k

LCDBuffer[k][t-1]=jcolor1;

for(k=mid;k

LCDBuffer[k][t]=jcolor1;

for(k=mid;k

LCDBuffer[k][t-1]=jcolor1;

for(k=fs;k

LCDBuffer[k][t]=jcolor1;

}

pre[i]=fs;

}

for(i=2;i<3;i++)

{

d=GetADresult(i)*2.5/1023;

s=(int)(d*15);

fs=55*(i+1)-s;

LCDBuffer[fs][t]=jcolor2;//线条颜色

if(t!

=0)

{

mid=(pre[i]+fs)/2;

for(k=pre[i];k

LCDBuffer[k][t-1]=jcolor2;

for(k=mid;k

LCDBuffer[k][t]=jcolor2;

for(k=mid;k

LCDBuffer[k][t-1]=jcolor2;

for(k=fs;k

LCDBuffer[k][t]=jcolor2;

}

pre[i]=fs;

}

for(i=3;i<4;i++)

{

d=GetADresult(i)*2.5/1023;

s=(int)(d*15);

fs=55*(i+1)-s;

LCDBuffer[fs][t]=jcolor3;//线条颜色

if(t!

=0)

{

mid=(pre[i]+fs)/2;

for(k=pre[i];k

LCDBuffer[k][t-1]=jcolor3;

for(k=mid;k

LCDBuffer[k][t]=jcolor3;

for(k=mid;k

LCDBuffer[k][t-1]=jcolor3;

for(k=fs;k

LCDBuffer[k][t]=jcolor3;

}

pre[i]=fs;

}

 LCD_Refresh();

t++;

Uart_Printf("\r");

}

return0;

}

实验四触摸屏驱动实验

一、实验目的

1、了解触摸屏基本概念及原理。

2、理解触摸屏与LCD的密切配合。

3、编程实现对触摸屏的控制。

二、实验内容

结合液晶显示控制实验,编写程序获取用户输入的4个坐标位置,并在液晶上画出由用户输入的坐标组成的矩形。

三、实验流程图

  1、读取触摸点x轴电压值

2、读取触摸点坐标3、判断触摸动作

四、实验核心代码

#include"44b.h"

#include"LCD320.h"

#include"tchScr.h"

#include"maro.h"

#defineADS7843_CMD_X(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)

//采样x轴电压值,数据为12位,参考电压输入模式为差分模式,允许省电模式

#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)

externU32LCDBuffer[240][320];

IntTchScr_Xmax=1876,TchScr_Xmin=269,TchScr_Ymax=229,

TchScr_Ymin=1725;//触摸屏返回电压值范围

voidTchScr_GetScrXY(int*x,int*y,U8bCal)

{//获得触摸点坐标

unsignedinttemp;

rPDATF&=~ADS7843_PIN_CS;//打开ADS7843

SendSIOData(ADS7843_CMD_X);//发送读取x电压值控制字

SendSIOData(0);//等待8个时钟节拍,因为完成一转换需要16个时钟

temp=ReadSIOData();//读取采样值高8位

SendSIOData(ADS7843_CMD_X);

temp<<=8;

temp|=ReadSIOData();//读取低8位并与以前高8位组成16位数据

*x=(temp>>4);//去掉低4位,保留12位有效数据

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_X);

temp<<=8;

temp|=ReadSIOData();

*x+=(temp>>4);

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_X);

temp<<=8;

temp|=ReadSIOData();

*x+=(temp>>4);

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_Y);

temp<<=8;

temp|=ReadSIOData();

*x+=(temp>>4);

*x>>=2;//采样4次取平均值

//读取y电压值

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_Y);

temp<<=8;

temp|=ReadSIOData();

*y=(temp>>4);

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_Y);

temp<<=8;

temp|=ReadSIOData();

*y+=(temp>>4);

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(ADS7843_CMD_Y);

temp<<=8;

temp|=ReadSIOData();

*y+=(temp>>4);

SendSIOData(0);

temp=ReadSIOData();

SendSIOData(0);

temp<<=8;

temp|=ReadSIOData();

*y+=(temp>>4);

*y>>=2;

rPDATF|=ADS7843_PIN_CS;//关闭ADS7843

if(bCal){//对采样结果进行转换

*x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin);

*y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);

}

}

U32TchScr_GetOSXY(int*x,int*y)

{//获得触摸点坐标并返回触摸动作

staticU32mode=0;

staticintoldx,oldy;

inti,j;

for(;;){

if((mode!

=TCHSCR_ACTION_DOWN)&&(mode!

=TCHSCR_ACTION_MOVE)){

if(!

TCHSCR_IsPenNotDown){//有触摸动作

TchScr_GetScrXY(x,y,TRUE);//得到触摸点坐标

for(i=0;i<40;i++){

if(TCHSCR_IsPenNotDown)//抬起

break;

Delay(100);

}

if(i<40){//在规定的双击时间之内抬起,检测是不是及时按下

for(i=0;i<60;i++){

if(!

TCHSCR_IsPenNotDown){

if(i<10){i=60;break;}//如果单击后很短时间内按下,不视为双击

mode=TCHSCR_ACTION_DBCLICK;

for(j=0;j<40;j++)Delay(100);//检测到双击后延时,防止拖尾

break;

}

Delay(100);

}

if(i==60)

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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