S3C440Box嵌入式系统实验报告.docx
- 文档编号:7246753
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:33
- 大小:25.55KB
S3C440Box嵌入式系统实验报告.docx
《S3C440Box嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《S3C440Box嵌入式系统实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S3C440Box 嵌入式 系统 实验 报告