S3C440Box嵌入式系统实验报告Word格式.docx
- 文档编号:22599688
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:44
- 大小:55.09KB
S3C440Box嵌入式系统实验报告Word格式.docx
《S3C440Box嵌入式系统实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《S3C440Box嵌入式系统实验报告Word格式.docx(44页珍藏版)》请在冰豆网上搜索。
option.h"
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;
LCDBuffer[k][100]=0x000000e0;
for(j=10;
j<
100;
j++)
LCDBuffer[10][j]=0x000000e0;
LCDBuffer[200][j]=0x000000e0;
LCD_Refresh();
while
(1);
return0;
}
实验二键盘控制实验
1、学习键盘及LED驱动原理。
2、掌握ZLG7289芯片的使用方法。
二、实验内容
通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上面显示出来。
开启zlg7289
1、定义ZLG7289寄存器(zlg7289.h)
发送复位命令
WriteSDIO(ZLG7289_CD_RST)
关闭zlg7289
延时
2、定义键值读取函数
是否有键按下
否
从zlg7289读取键值
是
键值是否有效
否
通过键盘映射表得到按键值
是
3、编写主函数,将键值在数码管上显示
初始化
Zlg7289复位
键值>
9?
否
键值读取
发送十位数
是
只显示个位
显示十、个位
发送个位数
四、实验核心代码:
keyboard.h"
zlg7289.h"
myuart.h"
LCD320.h"
#pragmaimport(__use_no_semihosting_swi)
externintZlg7289SIOBand;
externintZlg7289SIOCtrl;
U32key;
Uart_Printf("
\nArmTargetInitOK."
);
Zlg7289_Reset();
//zlg7289复位
ARMTargetInit();
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):
/\n"
\n1\n"
case
(2):
*\n"
\n2\n"
case(3):
-\n"
\n3\n"
break;
case(4):
7\n"
\n4\n"
case(5):
8\n"
\n5\n"
case(6):
9\n"
\n6\n"
case(7):
+\n"
\n7\n"
case(8):
4\n"
\n8\n"
case(9):
5\n"
\n9\n"
case(10):
6\n"
\nNUMLOCK\n"
case(11):
1\n"
\n/\n"
case(12):
2\n"
\n*\n"
case(13):
3\n"
\n-\n"
case(14):
Enter\n"
\nEnter\n"
case(15):
0\n"
\n+\n"
case(16):
Dle\n"
\nDle\n"
}
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);
case(6):
WriteSDIO(9);
case(8):
WriteSDIO(4);
case(9):
WriteSDIO(5);
case(10):
WriteSDIO(6);
case(11):
WriteSDIO
(1);
case(12):
WriteSDIO
(2);
case(13):
WriteSDIO(3);
case(15):
WriteSDIO(0);
}
ZLG7289_DISABLE();
//zlg7289放弃同步串口控制权
}
五、实验体会
在本次实验,熟悉了键盘以及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、获取转换结果函数
启动延时通道
转换结束?
返回转换结果
是
四、实验核心代码
#defineADCCON_FLAG0x40
#defineADCCON_SLEEP0x20
#defineADCCON_ADIN0(0x0<
<
2)
#defineADCCON_ADIN1(0x1<
#defineADCCON_ADIN2(0x2<
#defineADCCON_ADIN3(0x3<
#defineADCCON_ADIN4(0x4<
#defineADCCON_ADIN5(0x5<
#defineADCCON_ADIN6(0x6<
#defineADCCON_ADIN7(0x7<
#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;
//返回采样值
U32jcolor1;
U32jcolor2;
U32jcolor3;
intmid;
intfs;
inti,j,k,s,t;
intpre[4];
floatd;
init_ADdevice();
\n"
jcolor=0x0000e0e0;
jcolor1=0x000000e0;
jcolor2=0x00e0e0e0;
jcolor3=0x0000e000;
t=320;
{
if(t==320)
{//采样0~3路A/D值
t=0;
for(k=0;
240;
for(j=0;
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];
mid;
LCDBuffer[k][t-1]=jcolor;
for(k=mid;
fs;
LCDBuffer[k][t]=jcolor;
pre[i];
for(k=fs;
pre[i]=fs;
}
for(i=1;
2;
d=GetADresult(i)*2.5/1023;
s=(int)(d*15);
fs=55*(i+1)-s;
LCDBuffer[fs][t]=jcolor1;
if(t!
mid=(pre[i]+fs)/2;
for(k=pre[i];
LCDBuffer[k][t-1]=jcolor1;
for(k=mid;
LCDBuffer[k][t]=jcolor1;
for(k=fs;
for(i=2;
3;
LCDBuffer[fs][t]=jcolor2;
LCDBuffer[k][t-1]=jcolor2;
LCDBuffer[k][t]=jcolor2;
for(i=3;
4;
LCDBuffer[fs][t]=jcolor3;
if(t!
LCDBuffer[k][t-1]=jcolor3;
LCDBuffer[k][t]=jcolor3;
LCD_Refresh();
t++;
Uart_Printf("
\r"
实验四触摸屏驱动实验
1、了解触摸屏基本概念及原理。
2、理解触摸屏与LCD的密切配合。
3、编程实现对触摸屏的控制。
结合液晶显示控制实验,编写程序获取用户输入的4个坐标位置,并在液晶上画出由用户输入的坐标组成的矩形。
1、读取触摸点x轴电压值
2、读取触摸点坐标3、判断触摸动作
tchScr.h"
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位
temp<
=8;
temp|=ReadSIOData();
//读取低8位并与以前高8位组成16位数据
*x=(temp>
>
4);
//去掉低4位,保留12位有效数据
*x+=(temp>
SendSIOData(ADS7843_CMD_Y);
*x>
=2;
//采样4次取平均值
//读取y电压值
*y=(temp>
*y+=(temp>
*y>
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;
40;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S3C440Box 嵌入式 系统 实验 报告