嵌入式系统实验报告_第1页
嵌入式系统实验报告_第2页
嵌入式系统实验报告_第3页
嵌入式系统实验报告_第4页
嵌入式系统实验报告_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统实验报告姓名: 努尔买买提吐孙 学号: 12600123 班级:计算机科学与技术非师范121班实验一 LCD控制一、 实验目的1、 初步掌握液晶显示屏的使用及其电路设计方法。2、 掌握S3C44B0X处理器的LCD控制器的使用。3、 通过实验掌握液晶显示文本和图形的方法以及程序设计方法。二、 实验内容学习LCD显示器的基本原理,理解其驱动的控制方法。掌握S3C44B0X处理器的基本原理和方法,并编程实现:1、 画出多个矩形框2、 显示ASCII字符3、 显示汉字字符三、 实验流程图开始 初始化LCD12864画坐标函数hua_zuobiao(voic)TLC2543读数据子函数LCD

2、1602的更新显示延时子函数确定每个电压值对应的坐标点亮确定的值清屏结束四、 实验核心代码#include 44b.h#includeuhal.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;

3、k200;k+) LCDBufferk10=0x000000e0; for (k=10;k200;k+) LCDBufferk100=0x000000e0; for (j=10;j100;j+) LCDBuffer10j=0x000000e0; for (j=10;j9? 否键值读取发送十位数 是 只显示个位显示十、个位延时开启zlg7289 发送个位数关闭zlg7289四、实验核心代码:#includeuhal.h#includekeyboard.h#includezlg7289.h#include44b.h#includemyuart.h#includeLCD320.h#pragma im

4、port(_use_no_semihosting_swi) extern int Zlg7289SIOBand;extern int Zlg7289SIOCtrl;int main(void)U32 key;ARMTargetInit();/开发版初始化Uart_Printf(nArm Target Init OK.); Zlg7289_Reset();/zlg7289复位 ARMTargetInit();/开发版初始化LCD_Init();LCD_ChangeMode(DspTxtMode);/转换LCD显示模式为文本显示模式LCD_Cls();/文本模式下清屏命令while(1) key=

5、GetKey();/得到按键值Delay(7000);switch(key)case(0):LCD_printf(NUMn );Uart_Printf(nNUMn);break;case(1):LCD_printf(/n );Uart_Printf(n1n);break;case(2):LCD_printf(*n );Uart_Printf(n2n);break;case(3):LCD_printf(-n );Uart_Printf(n3n);break;case(4):LCD_printf(7n );Uart_Printf(n4n);break;case(5):LCD_printf(8n )

6、;Uart_Printf(n5n);break;case(6):LCD_printf(9n );Uart_Printf(n6n);break;case(7):LCD_printf(+n );Uart_Printf(n7n);break;case(8):LCD_printf(4n );Uart_Printf(n8n);break;case(9):LCD_printf(5n );Uart_Printf(n9n);break;case(10):LCD_printf(6n );Uart_Printf(nNUM LOCKn);break;case(11):LCD_printf(1n );Uart_Pri

7、ntf(n/n);break;case(12):LCD_printf(2n );Uart_Printf(n*n);break;case(13):LCD_printf(3n );Uart_Printf(n-n);break;case(14):LCD_printf(Entern);Uart_Printf(nEntern);break;case(15):LCD_printf(0n );Uart_Printf(n+n);break;case(16):LCD_printf(Dlen );Uart_Printf(nDlen);break;ZLG7289_ENABLE();/使zlg7289占有同步串口De

8、lay(5);/延时 WriteSDIO(ZLG7289_CMD_DATA0|0);/数码管以方式0译码,第一个数码管亮/WriteSDIO(key);/显示个位Delay(1);/延时*/if(key=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

9、;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放弃同步串口控制权return 0;五、实验体会在本次实验,熟悉了键盘以及LED的驱动原理。键盘的闭合键,通常采用两种方法,即行扫描法和行反转法获取键值。同时还了解了ZLG72

10、89芯片的特点和基本使用方法。实验三 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、获取转换结果函数启动延时通道延时转换结束? 否返

11、回转换结果是 四、实验核心代码#include 44b.h#includeuhal.h#include option.h#includedef.h#includemyuart.h#includeLCD320.hextern U32 LCDBuffer240320;#pragma import(_use_no_semihosting_swi) #define ADCCON_FLAG0x40#define ADCCON_SLEEP0x20#define ADCCON_ADIN0(0x02)#define ADCCON_ADIN1(0x12)#define ADCCON_ADIN2(0x22)#de

12、fine ADCCON_ADIN3(0x32)#define ADCCON_ADIN4(0x42)#define ADCCON_ADIN5(0x52)#define ADCCON_ADIN6(0x62)#define ADCCON_ADIN7(0x72)#define ADCCON_READ_START0x2#define ADCCON_ENABLE_START0x1void init_ADdevice()/初始化rADCPSR=20;rADCCON=ADCCON_SLEEP;int GetADresult(int channel)rADCCON=(channel2)|ADCCON_ENABL

13、E_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 = 0x000000e0; jcolor2 = 0

14、x00e0e0e0; 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;k+) LCDBufferkt-1=jcol

15、or; 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+) LCDBufferkt-1=jcolor1; f

16、or(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+) LCDBufferkt-1=jcolor2; for

17、(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+) LCDBufferkt-1=jcolor3; for(k

18、=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个坐标位置,并在液晶上画出由用户输入的坐标组成的矩形。三、 实验流程图

19、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(ADS7843_CTRL_START|ADS7843_GET

20、_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD) extern U32 LCDBuffer240320; IntT chScr_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;/打开ADS7843SendSIOData(ADS7843_CMD_X);

21、/发送读取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);SendSIOData(0);temp=ReadSIOData();S

22、endSIOData(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_CMD_Y);temp4);SendSIOData(0);temp=ReadSIOData();SendSIOD

23、ata(0);temp4);*y=2;rPDATF|=ADS7843_PIN_CS;/关闭ADS7843if(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)/获得触摸点坐标并返回触摸动作static U32 mode=0;static int oldx,oldy;int i,j;for(;)if(mode!=TCHSCR_A

24、CTION_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;f

25、or(j=0;j4 |ABS( oldy-*y)4)/有移动动作mode=TCHSCR_ACTION_MOVE;break;Delay(50);oldx=*x;oldy=*y;return mode;void print_line(int x1,int y1,int x2,int y2)int i,j,k;double k1;k1=(y2-y1)*1.0/(x2-x1);Uart_Printf(x1=%d,y1=%d,x2=%d,y2=%d %lfn,x1,y1,x2,y2,k1);for(i=x1;i=x2;i-)j=k1*(i-x1)+y1+0.5;Uart_Printf(i=%d,j=%

26、dn,i,j);LCDBufferij=0x0000e000;for(i=y1;i=y2;i-)j=1.0/k1*(i-y1)+x1+0.5;Uart_Printf(i=%d,j=%dn,i,j);LCDBufferji=0x0000e000;void TchScr_Test()U32 mode;int x,y;int i,j;int a4,b4;LCD_Init();Uart_Printf(nplease touch the screenn);for(i=0;i4;i+)mode=TchScr_GetOSXY(&x, &y);switch(mode)case TCHSCR_ACTION_CL

27、ICK:Uart_Printf(Action=click:x=%d,ty=%dn,x,y);ai=x;bi=y;Uart_Printf(x=%d,y=%dn,ai,bi);break;case TCHSCR_ACTION_DBCLICK:Uart_Printf(Action=double click:x=%d,ty=%dn,x,y);ai=x;bi=y;Uart_Printf(x=%d,y=%dn,ai,bi);break;case TCHSCR_ACTION_DOWN:Uart_Printf(Action=down:x=%d,ty=%dn,x,y);ai=x; bi=y;Uart_Print

28、f(x=%d,y=%dn,ai,bi);break;case TCHSCR_ACTION_UP:Uart_Printf(Action=up:x=%d,ty=%dn,x,y);ai=x; bi=y;Uart_Printf(x=%d,y=%dn,ai,bi);break;case TCHSCR_ACTION_MOVE:Uart_Printf(Action=move:x=%d,ty=%dn,x,y);ai=x; bi=y;Uart_Printf(x=%d,y=%dn,ai,bi);break;Delay(1000);for(i=0;i4;i+)print_line(ai,bi,a(i+1)%4,b(

29、i+1)%4);LCD_Refresh() ;Uart_Printf(x=%d,y=%dn,ai,bi);五、实验体会本次实验,解释了触摸屏基本概念及原理,触摸屏与LCD的配合。同时也使我们学会了对触摸屏的控制。实验五 uCOS-II在ARM微处理器上的移植及编译一、 实验目的1、 了解uCOS-II内核的主要结构。2、 掌握将uCOS-II内核移植到ARM7处理器上的基本方法。二、 实验内容1、 将uCOS-II内核移植到ARM7处理器上。2、 编写两个简单任务,在超级终端上观察两个任务的切换。三、实验流程图上电复位主板硬件系统初始化配置IO口初始化Timer操作系统初始化初始化外设初始化S

30、PI键盘扫描初始化RS232创建任务LCD显示操作系统启动nRF24L01收发四、实验核心代码#include.ucos-iiincludes.h /* uC/OS interface */#include #includeuhal.h#includeLCD320.h#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting /*任务定义*/OS_STK SYS_Task_StackSTACKSIZE= 0, ; /system task刷新任务堆栈#define SYS_Task_Pri

31、o1void SYS_Task(void *Id);OS_STK Task1_StackSTACKSIZE=0, ; void Task1(void *Id);#define Task1_Prio 14OS_STK Task2_StackSTACKSIZE= 0, ; void Task2(void *Id); #define Task2_Prio 13OS_STK Task3_StackSTACKSIZE= 0, ; void Task3(void *Id); #define Task3_Prio 12int main(void)ARMTargetInit();LCD_Init() ;LCD

32、_ChangeMode(DspTxtMode);LCD_Cls(); / do target (uHAL based ARM system) initialisation /OSInit(); OSTaskCreate(SYS_Task, (void *)0, (OS_STK *)&SYS_Task_StackSTACKSIZE-1, SYS_Task_Prio);OSTaskCreate(Task3, (void *)0, (OS_STK *)&Task3_StackSTACKSIZE-1, Task3_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK

33、 *)&Task2_StackSTACKSIZE-1, Task2_Prio);OSTaskCreate(Task1, (void *)0, (OS_STK *)&Task1_StackSTACKSIZE-1, Task1_Prio);OSStart(); / start the game / never reached /return 0;/mainvoid Task1(void *Id) for(;) OSTimeDly(1000); LCD_printf(run task1n); Uart_Printf(run task1n); OSTimeDly(1000);void Task2(vo

34、id *Id)for (;) LCD_printf(run task2n);Uart_Printf(run task2n);OSTimeDly(1000);void Task3(void *Id) for(;)LCD_printf(run task3n);Uart_Printf(run task3n);OSTimeDly(1000);void SYS_Task(void *Id) OSRunning=TRUE; /使能多任务切换uHALr_InstallSystemTimer();LCD_printf(start system task.n);Uart_Printf(start system

35、task.n);for (;)OSTimeDly(10000);五、实验体会通过本次实验,了解uCOS-II内核的主要结构,掌握了将uCOS-II内核移植到ARM7处理器上的基本方法。掌握了在ARM SDT2.5或ADS1.2集成开发环境中编写和调试程序的基本过程。通过此次实验,让我复习了嵌入式ARM系统软、硬件的基本知识,分析了uC/OS-II的源代码,对移植相关部分的代码作了分析解读,熟悉了ARM体系架构,最后基于ARM微处理器作了uC/OS-II的具体移植工作。不管是移植还是自己设计的,我想最终的目的是解决这个问题,这首先要有个好的学习态度,通过它让我自己认识到自己的不足和弱项,多分析做

36、些实验验证,对于问题解决是帮助的。实验六 捉小鸡一、 实验目的学习设计一个复杂应用程序的结构并编译完成它,结合应用之前实验学到的知识,编写一个功能比较复杂的综合应用程序。二、实验内容小游戏:捉小鸡。一只小鸡不停地随机出现在9个格子的任意一个,在小鸡停留在某一格子的时间段内,游戏者如果能正确按相应的键,就算游戏者抓住一只小鸡。游戏总共20只小鸡,每抓住一只得5分,20只小鸡全部出现后游戏结束。界面中左边是9个格子,一只小鸡不停地随机出现在9个格子的任意一个,假如目前小鸡正出现在第5个格子。如果游戏者能赶在小鸡出现在另一个格子前按下“5”键,就算游戏者抓住一只小鸡,如果游戏者没有按下正确的键,则没

37、有抓住小鸡。界面的右边显示游戏的一些相关信息。“共有”栏显示游戏中到目前为止已经出现的小鸡总数。“抓住”栏显示本级游戏中到目前为止游戏者已经抓住小鸡的数目。“得分”栏显示游戏进行到现在,游戏者所有得分的累积。三、实验流程图状态变量初始化,位置变量初始化显示登陆图片清屏,显示主框图等待触摸屏扫描消息判断触摸范围判断触摸范围是否和当前位置一致 “确定”键 “取消”键 “1-9”数字键暂停游戏游戏重新开始游戏得分增加删除延时语句 四、 实验核心代码#include.ucos-iiincludes.h /* uC/OS interface */#include .ucos-iiaddosadditio

38、n.h#include #include #include #includetchScr.h#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting /记录9个格子的位置structRECT Rect9;structRECT *pRect9;/记录一些相关位置,StepRect位置显示游戏等级,CountRect位置显示总共出现的小鸡的数目/CatchRect位置显示抓到的小鸡的数目,ScoreRect位置显示当前的分数u8 StepRectX,StepRectY,TotalCountR

39、ectX,TotalCountRectY;u8 CatchCountRectX,CatchCountRectY,ScoreRectX,ScoreRectY;u8 Step; /游戏等级u8 TotalCount; /总共出现的小鸡的数目u8 CatchCount; /抓到的小鸡的数目u8 Score; /游戏当前的分数u8 CurrentPos; /小鸡当前正在哪一个格子中BOOLEAN gameover,pause;BOOLEAN gamepass;BOOLEAN initfinished;/记录初始化是否完成,用于协调多个任务,确保其它任务在主任务初始化结束后再开始工作PDC pdc;/绘

40、图用的DCchar bmp_hitchick12=1,4,5,_,8,0, , ,B,M,P,0; /击中小鸡的图片char bmp_misschick12=1,4,5,_,8,1, , ,B,M,P,0; /没有击中小鸡的图片char bmp_gameend12=1,4,5,_,9,0, , ,B,M,P,0; /游戏通关的图片char bmp_logo12=1,4,5,_,5,9, , ,B,M,P,0; /登录图片char bmp_gamepass12=1,4,5,_,7,0, , ,B,M,P,0; /游戏过关图片char bmp_gameover12=1,4,5,_,7,1, , ,B,M,P,0; /游戏结束图片char bmp_frame12=1,2,7,_,3,9, , ,B,M,P,0; char bmp_chick12=1,2,7,_,3,5, , ,B,M,P,0; char bmp_gam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论