1、S3C440Box嵌入式系统实验报告嵌入式系统实验报告姓名: 努尔买买提吐孙学号: 12600123班级:计算机科学与技术非师范121班实验一 LCD控制一、 实验目的1、 初步掌握液晶显示屏的使用及其电路设计方法。2、 掌握S3C44B0X处理器的LCD控制器的使用。3、 通过实验掌握液晶显示文本和图形的方法以及程序设计方法。二、 实验内容学习LCD显示器的基本原理,理解其驱动的控制方法。掌握S3C44B0X处理器的基本原理和方法,并编程实现:1、 画出多个矩形框2、 显示ASCII字符3、 显示汉字字符三、 实验流程图四、 实验核心代码#include 44b.h#includeuhal.
2、h#include option.h#includedef.h#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting extern U32 LCDBuffer240320;int main(void)int i,j,k;U32 jcolor; ARMTargetInit(); /开发版初始化 LCD_Init(); /LCD初始化 for (k=10;k200;k+) LCDBufferk10=0x000000e0; for (k=10;k200;k+) LCDBufferk100=0
3、x000000e0; for (j=10;j100;j+) LCDBuffer10j=0x000000e0; for (j=10;j=4&key16) 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): Wr
4、iteSDIO(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放弃同步串口控制权 return 0;五、实验体会在本次实验,熟悉了键盘以及LED的驱动原理。键盘的闭合键,通常采用两种方法,即行扫描法和行反转法获取键值。同时还
5、了解了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、获取转换结果函数 否 是四、实验
6、核心代码#include 44b.h#includeuhal.h#include option.h#includedef.h#includemyuart.h#includeLCD320.hextern U32 LCDBuffer240320;#pragma import(_use_no_semihosting_swi) #define ADCCON_FLAG 0x40#define ADCCON_SLEEP 0x20#define ADCCON_ADIN0 (0x02)#define ADCCON_ADIN1 (0x12)#define ADCCON_ADIN2 (0x22)#define A
7、DCCON_ADIN3 (0x32)#define ADCCON_ADIN4 (0x42)#define ADCCON_ADIN5 (0x52)#define ADCCON_ADIN6 (0x62)#define ADCCON_ADIN7 (0x72)#define ADCCON_READ_START 0x2#define ADCCON_ENABLE_START 0x1void init_ADdevice()/初始化 rADCPSR=20; rADCCON=ADCCON_SLEEP;int GetADresult(int channel) rADCCON=(channel2)|ADCCON_E
8、NABLE_START; Delay(10); while(!(rADCCON&ADCCON_FLAG);/转换结束 return rADCDAT;/返回采样值int main(void)U32 jcolor;U32 jcolor1;U32 jcolor2;U32 jcolor3; int mid; int fs; int i,j,k,s,t; int pre4; float d; ARMTargetInit(); /开发版初始化 init_ADdevice(); Uart_Printf(n); LCD_Init(); jcolor = 0x0000e0e0; jcolor1 = 0x0000
9、00e0; jcolor2 = 0x00e0e0e0; jcolor3 = 0x0000e000; t = 320; while(1) if(t = 320) /采样03路A/D值 t = 0; for(k=0;k240;k+) for(j=0;j320;j+) LCDBufferkj=0x00000000;/背景黑色 for(i=0;i1;i+) d=GetADresult(i)*2.5/1023; s=(int)(d*15); fs=55*(i+1)-s; LCDBufferfst=jcolor;/线条颜色 if(t!=0) mid=(prei+fs)/2; for(k=prei;kmid
10、;k+) LCDBufferkt-1=jcolor; for(k=mid;kfs;k+) LCDBufferkt=jcolor; for(k=mid;kprei;k+) LCDBufferkt-1=jcolor; for(k=fs;kmid;k+) LCDBufferkt=jcolor; prei=fs; for(i=1;i2;i+) d=GetADresult(i)*2.5/1023; s=(int)(d*15); fs=55*(i+1)-s; LCDBufferfst=jcolor1;/线条颜色 if(t!=0) mid=(prei+fs)/2; for(k=prei;kmid;k+) L
11、CDBufferkt-1=jcolor1; for(k=mid;kfs;k+) LCDBufferkt=jcolor1; for(k=mid;kprei;k+) LCDBufferkt-1=jcolor1; for(k=fs;kmid;k+) LCDBufferkt=jcolor1; prei=fs; for(i=2;i3;i+) d=GetADresult(i)*2.5/1023; s=(int)(d*15); fs=55*(i+1)-s; LCDBufferfst=jcolor2;/线条颜色 if(t!=0) mid=(prei+fs)/2; for(k=prei;kmid;k+) LCD
12、Bufferkt-1=jcolor2; for(k=mid;kfs;k+) LCDBufferkt=jcolor2; for(k=mid;kprei;k+) LCDBufferkt-1=jcolor2; for(k=fs;kmid;k+) LCDBufferkt=jcolor2; prei=fs; for(i=3;i4;i+) d=GetADresult(i)*2.5/1023; s=(int)(d*15); fs=55*(i+1)-s; LCDBufferfst=jcolor3;/线条颜色 if(t!=0) mid=(prei+fs)/2; for(k=prei;kmid;k+) LCDBu
13、fferkt-1=jcolor3; for(k=mid;kfs;k+) LCDBufferkt=jcolor3; for(k=mid;kprei;k+) LCDBufferkt-1=jcolor3; for(k=fs;kmid;k+) LCDBufferkt=jcolor3; prei=fs; LCD_Refresh(); t+; Uart_Printf(r); return 0;实验四 触摸屏驱动实验一、 实验目的1、 了解触摸屏基本概念及原理。2、 理解触摸屏与LCD的密切配合。3、 编程实现对触摸屏的控制。二、 实验内容结合液晶显示控制实验,编写程序获取用户输入的4个坐标位置,并在液晶上
14、画出由用户输入的坐标组成的矩形。三、 实验流程图1、读取触摸点x轴电压值2、读取触摸点坐标3、判断触摸动作四、实验核心代码#include 44b.h#include LCD320.h#include tchScr.h#include maro.h#define ADS7843_CMD_X (ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)/采样x轴电压值,数据为12位,参考电压输入模式为差分模式,允许省电模式#define ADS7843_CMD_Y (ADS78
15、43_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)extern U32 LCDBuffer240320;IntTchScr_Xmax=1876,TchScr_Xmin=269,TchScr_Ymax=229,TchScr_Ymin=1725;/触摸屏返回电压值范围void TchScr_GetScrXY(int *x, int *y, U8 bCal)/获得触摸点坐标 unsigned int temp; rPDATF&=ADS7843_PIN_CS;/打开ADS7843 Se
16、ndSIOData(ADS7843_CMD_X);/发送读取x电压值控制字 SendSIOData(0);/等待8个时钟节拍,因为完成一转换需要16个时钟 temp=ReadSIOData();/读取采样值高8位 SendSIOData(ADS7843_CMD_X); temp4);/去掉低4位,保留12位有效数据 SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_X); temp4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_X); temp4
17、); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp4); *x=2; /采样4次取平均值 /读取y电压值 SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_CMD_Y); temp4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(ADS7843_C
18、MD_Y); temp4); SendSIOData(0); temp=ReadSIOData(); SendSIOData(0); temp4); *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); U32 TchScr_GetOSXY(int *x, int *y)/获得触摸点坐标并返回触摸动作 sta
19、tic U32 mode=0; static int oldx,oldy; int i,j; for(;) if(mode!=TCHSCR_ACTION_DOWN) & (mode!=TCHSCR_ACTION_MOVE) if(!TCHSCR_IsPenNotDown)/有触摸动作 TchScr_GetScrXY(x, y,TRUE);/得到触摸点坐标 for(i=0;i40;i+) if(TCHSCR_IsPenNotDown)/抬起 break; Delay(100); if(i40)/在规定的双击时间之内抬起,检测是不是及时按下 for(i=0;i60;i+) if(!TCHSCR_IsPenNotDown)if (i10) i=60;break;/如果单击后很短时间内按下,不视为双击 mode=TCHSCR_ACTION_DBCLICK; for(j=0;j40;j+) Delay(100);/检测到双击后延时,防止拖尾 break; Delay(100); if(i=60)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1