收藏 分销(赏)

电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf

上传人:曲**** 文档编号:6255625 上传时间:2024-12-03 格式:PDF 页数:50 大小:2.32MB
下载 相关 举报
电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf_第1页
第1页 / 共50页
电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf_第2页
第2页 / 共50页
电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf_第3页
第3页 / 共50页
电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf_第4页
第4页 / 共50页
电子信息工程专业 嵌入式开发模块 课程设计实验报告.pdf_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、珅*琳岑/算通信与信息工程学院 课程设计实验报告模块名称 嵌入式开发专 业 电子信息工程 一、实验目的1、熟悉基于ARM体系结构的TQ2440实验开发板。通读实验教程,了解开发板包含的软 硬件资源。2、安装ADSL 2开发环境及串口工具,要求熟练掌握ARM的指令系统及相关资料,熟练 掌握并使用ADS集成开发环境。3、熟悉嵌入式开发的流程,学会嵌入式交叉开发环境的建立。4、掌握基于Linux的应用程序开发步骤,学习使用Linux操作系统的常用命令。二、实验设备及工具(包括软件调试工具)硬件:TQ2440嵌入式实验平台开发板、Windows系统PC机、串口线、网线、电源、USB 线。软件:PC机操

2、作系统、ADSL 2开发环境。Oracle VM VirtualBox虚拟机环境。三、实验任务1、基本要求:根据开发板及内容选做TQ2440测试程序中的8个实验。包括:1:TestPWM2:RTC time display3:Test ADC4:Test interrupt and key scan5:Test Touchpanel6:Test TFT LCD7:Test IIC EEPROM8:UDA 1341 play music2、提高要求:根据学生自己掌握知识,设计一个小应用程序,内容每个学生自己出题。3、发挥要求:在完成(1、2 项要求的基础上,完成具有创新内容的功能。或做其他相关内

3、容。四、实验内容(包括原理、方法、步骤以及关键代码)1、基本要求在基本要求中,需要从11个测试程序中选做8个,以下是对8个程序的实验过程的叙 述,包括实验前的硬件连接准备、软件环境配置(串口工具、dnw、ADS、交叉编译环境等)、每个实验的关键代码以及简单分析。L 1、硬件连接用USB线、串口线把开发板连到电脑相应的端口,再将电源线插好。1.2.软件环境配置设置串口工具SecureCRT解压在“windows平台开发工具包”目录下的“SecureCRT.rar”后,即可使用SeureCRT,双击图标,打开SecureCRT,如下图所示:FileEditView Options Transfer

4、 Script Tools Help疝通元|电亳与铝缗|直扬f|置|国点击图中红色方框图标,出现下图的设置窗口:在Ptotocol里面选择Serial,出现如下图所示的对话框,详细设置参考下图,超级终 端设置部分,不再重复。注意:Port选项部分根据您实际使用的端口进行配置,其他选项请一定配置如下图所示:配置完毕后,点击上图的“Connect”选项即可连通串口。DNW设置DNW在这里是我们的.bin文件下载软件,可实现我们向flash或者内存当中烧写程序 的功能。直接双击“Windows平台工具DNW”目录下的DNW软件,出现下图:1.3、实验前准备操作1、串口工具和开发板连接成功后,将选择开

5、关打到norflash,并按一下重启键,开发 板则自动按照选择从norflash启动。此时,如果SecureCRT界面显示如下,则表示串口工 具已经工作正常:在SecureCRT界面之中输入:a,然后回车。(此时即将开发板选择进入到这一种下载 模式,然后用DNW配合来实现下载即可。)选择a Download User Program(eg:uCOS-II or TQ2440_Test),就是选择了我们烧写裸奔程序所需要的下载模式。2、打开ADSL 2(ARM Developer Suite vl.2,一款针对ARM的开发套件,电脑中以自 带,不需要再安装),并使用ADS打开天嵌科技的出厂自带的

6、测试程序:测试程序在出厂附J TQ2440测试程序带光盘的文件夹当中,文件格式是TQ2440_Test.mcp。点击compile 键进行编译,点击make键生成我们此处所需要的“*.bin”文件生成自己的bin文件之后,就可以使用SecureCRT配合dnw来实现对bin文件的下载了。3、打开串口工具,使开发板从norflash启动,再串口工具中出现的信息中,选择a,进入等待下载状态;双击打开dnw,然后选择USBPortTransmit找到相应的需要烧写的 bin文件,双击即可完成烧写。4、按照以上步骤进行操作,则我们此时基本已经完成了一次完整的程序的从编译到烧 写的过程了。同时,至此天嵌

7、的出厂测试程序已经被我们烧写到了nandflash中。此时,我 们再将选择开关打到nandflash中并重启开发板,使开发板进入我们刚刚烧写的出厂程序 中,我们会看到在SecureCRT界面会出现以下信息:(x|c x|c x|c)TQ2440 Test P|c|c|c|c|c|c|c|c|c|c|c|c)Please select function:0:Please input 1-11 to select test1:Test PWM2:RTC time display3:Test ADC4:Test interrupt and key scan5:Test Touchpanel6:Tes

8、t TFT LCD7:Test IIC EEPROM8:UDA 1341 play music9:UDA 1341 record voice10:Test SD Card11:Test CMOS Camera截图如下:Serial-COm-ScurCKT.U TQ244 0 rest program embedsky netr e:K田 Seril:COaiT H i i 60 Cls VTiOO1.4,选做的8个实验分析1.4.1、Test PWM,调试pwm控制蜂鸣器。按“一”号,蜂鸣器声音频率逐渐减小,最小Freq=10;按+”号,蜂鸣器声音频 率逐渐增大,最大Freq=2000。(加号

9、需要按住“shift”不然是等号)。使用ADS打开 出厂程序如下:双击,打开Main.c文件,找到while(1)循环,在其中的CmdTip函数上面右键,Go to 一下,就转到了:struct void(*fun)(void);char*tip;CmdTip=Temp_function,nPlease input 1-11 to select test,BUZZER_PWM_Test,nTest PWMH,RTC_Display,nRTC time display1,Test_Adc,nTest ADCn,KeyScan_Test,Test interrupt and key scan,Te

10、st_Touchpanel,Test Touchpanel,Lcd_TFT_Test,nTest TFT LCD1,Testjic,nTest IIC EEPROMH,PlayMusicTest,nUDA1341 play music1,RecordTest,nUDA1341 record voice1,Test_SDI,HTest SD Card,Camera_Test,Test CMOS Camera1,090);从下面struct结构当中去寻找到BUZZER_PWM_Test,并右键go to,跳转到:void BUZZER_PWM_Test(void)这个函数。void BUZZER_

11、PWM_Test(void)(U16 freq=800;/lei 1000;Uart_Printf(nnBUZZER TEST(PWM Control)n);Uart_Printf(Press+/-to increase/reduce the frequency of BUZZER!nH);Uart_Printf(nPress ESC key to Exit this program!nnn);Buzzer_Freq_Set(freq);while(1)(U8 key=Uart_Getch();if(key=+)|if(freq 11)freq-=10;Buzzer_Freq_Set(freq

12、);)Uart_Printf(ntFreq 二%dnn,freq);if(key=ESC_KEY)Buzzer_Stop();return;我们仔细地分析过这个函数之后不难发现,在我们if key=廿)的时候没有 问题,是因为此处的减号就是我们键盘上的减号,但是,在我们很多键盘上面是 没有if key=中)中的这个加号的,我们要想解决这个漏洞有两个办法:一是,在我们调试出厂程序的时候,使用shfit加“+”号键来组合实现对于频率控制时 候的增加功能;二是,在这里直接把if key=),这样就可以是我们在调试程 序的时候更加直观了。其实仅仅是改变按键,包括频率的变化范围、变化步长都可以在这个函数

13、中改变。1.4.2、RTC time display调试RTC 实时时钟(即Real Time Clock。在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等;而且要求在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也 不需要太多的辅助电路,典型的就是只需要一个高精度的32.768KHz晶体和电阻电容等。实时时钟(RTC 单元可以通过备用电池供电,因此,即使系统电源关闭,它也可以继 续工作。RTC可以通过STRB/LDRB指令将8位BCD码数据送至CPU。这些BCD数据包括秒,分,时,日期,星期,月和年。RTC单元通过一个外部的32.768KHz

14、晶振提供时钟。RTC具有 定时报警的功能。RTC控制器功能说明:时钟数据采用BCD编码能够对闰年的年月日进行自 动处理具有告警功能,当系统处于关机状态时,能产生告警中断;具有独立的电源输入,提 供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟。RTC模块由以下几部分构成构成:闰年产生器这个模块可以根据BCDDATA,BCDM0N,以及BCDYEAR的数据决定每个月的最后日期是28,29,30还是31。一个8位的计数器只能显示两个BCD码,因此它不能判断00年究竟是不是闰 年。例如它不能够判断1900年和2000的差别。为了解决这个问题,S3c2410内的RTC模 块中有一个固定的逻辑

15、,用来支持2000年为闰年。请注意虽然2000年是闰年,但1900年 不是闰年。因此,S3C2410中00代表2000年,而不是1900年。读/写寄存器要求置高RTC0N寄存器的0位来表示读和写RTC模块中的寄存器。为了显示秒,分,小时,日期,月和年,CPU 会从BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDM0N,和 BCDYEAR寄存器读取数据。但是由于多个寄存器的读取,可能产生1秒钟的偏离。例如,如 果用户读取寄存器BCDYEAR至IJBCDMIN,假设结果为1959年,12月,31日,23点,59分。在用户读取BCDSEC寄存器时,但如果结果是0,那么

16、很有可能年,月,日,时,分已经变成 了I960年1月1日0时0分了。解决的方法是,当读取到的BCDSEC等于0时,用户应该在 读取一次BCDYEAR到BCDSEC的值。备用电池RTC可被备用电池驱动,备用电池通过RTCVDD引脚向RTC提供电压。当系统掉电时,RTC 与CPU之间的接口被阻塞,备用电池仅仅驱动振荡电路以及BCD计数器,这样可减少能量损耗。报警功能RTC工作在掉电模式或正常工作模式时会在一个特定的时间产生报警信号。在正常工作模 式下,报警中断(ALMINT 是激活状态的。在掉电模式下,电源管理唤醒信号 PMWKUP 与 报警中断 ALMINT 都是激活状态。RTC的报警寄存器 R

17、TCALM 决定了报警的使能与不使 能以及报警时间设定的条件。节拍中断RTC节拍时间用于中断请求。TICNT寄存器具有一个中断使能位,同时其中的计数值用 于中断。当计数值到达0时,节拍时间中断就会触发。中断的间隔时间计算如下:Period=n+l/128 秒备注n:节拍时间计数值 T127 这个RTC时间节拍中断功能可以作为RTOS(实时操作系统)内核的时间节拍。如果节拍从RTC 时间节拍产生,则RTOS内部与时间相关的功能将一直与实时时钟同步。RTC相关寄存器如下:RTC控制寄存器寄存器地址读/写描述重置值RTCCON0 x57000040(L)0 x57000043(B)读/写(用字节)R

18、TC控制寄存器0 x0 实时时钟计数器(TICNT RTCCON位描述初始状态CLKRST3RTC时钟计数重置。0=没重置,1=重置0CNTSEL2BCD计数重置。0=合并BCD计数器1=保留(单独的BCD计数器)0CLKSEL1BCD时钟选择。0=XTAL1/2的15次方)分开的时钟1=保留(XTAL时钟只用于测试)0RTCEN0RTC控制使能。0=失能,1=使能注意:只有BCD时间计数和读取操作可以被执行。0寄存器地址读/写描述重置值TICNT0 x57000044(L)0 x57000047(B)读/写(用字节)实时时钟计数器0 x0TICNT位描述初始状态TICK INT ENABLE

19、7实时时间中断使能。0=失能,1=使能0TICK TIME COUNT6:0实时时间计数值 1-127 o这个计数器的值在内部减少,用户不能在工作时读取这 个计数器的值。000000 RTC报警控制寄存器(RTCALM RTC报警控制寄存器决定了报警使能以及报警时间。注意,RTCALM寄存器在掉电模式下 会通过ALMINT以及PMWKUP产生报警信号,但在正常模式下只在ALMINT产生报警信 号。寄存器地址读/写描述重置值RTCALM0 x57000050(L)0 x57000053(B)读/写(用字节)RTC报警控制寄存器0 x0 报警时间秒数寄存器 ALMSEC RTCALM位描述初始状态

20、保留70ALMEN6警报全球使能。0=失能,1=使能0YEAREN5年报警使能。0=失能,1=使能0MONREN4月报警使能。0=失能,1=使能0DATEEN3数据报警使能。0=失能,1=使能0HOUREN2小时报警使能。0=失能,1=使能0MINEN1分钟报警使能。0=失能,1=使能0SECEN0秒钟报警使能。0=失能,1=使能0寄存器地址读/写描述重置值ALMSEC0 x57000054(L)0 x57000057(B)读/写(用字节)报警时间秒数寄存器0 x0ALMSEC位描述初始状态保留70SECDATA6:4BCD值对于报警时间秒数。0-50003:0090000 报警时间分钟数寄存

21、器(ALMMIN 寄存器地址读/写描述重置值ALMMIN0 x57000058(L)0 x5700005B(B)读/写(用字节)报警时间分钟数寄存器0 x00ALMMIN位描述初始状态保留70MINDATA6:4BCD值对于报警时间分钟数。050003:0090000 报警时间小时数寄存器(ALMHOUR)寄存器地址读/写描述重置值ALMHOUR0 x5700005C(L)0 x5700005F(B)读/写(用字节)报警时间小时数寄存器0 x0ALMHOUR位描述初始状态保留7:600HOURDATA5:4BCD值对于报警时间小时数。0 2003:0090000 报警时间天数寄存器(ALMDA

22、TE 寄存器地址读/写描述重置值ALMDATE0 x57000060(L)0 x57000063(B)读/写(用字节)报警时间天数寄存器0 x01 报警时间月数寄存器(ALMMON ALMDAY位描述初始状态保留7:600DATEDATA5:4BCD值对于报警时间天数,从0到28,29,30,31。03003:0090001寄存器地址读/写描述重置值ALMMON0 x57000064(L)0 x57000067(B)读/写(用字节)报警时间月数寄存器0 x01 报警时间年数寄存器(ALMYEAR ALMMON位描述初始状态保留7:500MON DATA4BCD值对于报警时间月数。0 103:0

23、090001寄存器地址读/写描述重置值ALMYEAR0 x57000068(L)0 x5700006B(B)读/写(用字节)报警时间年数寄存器0 x0 秒,分,时,天,月,年寄存器 BCD码格式)ALMYEAR位描述初始状态YEARDATA7:0BCD值对于报警时间年数。00-990 x0书打牌匕地址R/W(byte)说叨复:位值BCDSEC0 x57000070(R/W)秒时钟当前他不定BCDMIN0 x57000074(R/W)分时钟当前值不定BCDHOUR0 x57000078(R/W)时时钟当前值不定BCDDAY0 x5700007C(R/W)1 1时钟当前值不足BCDDATE0 x5

24、7000080(R/W)星期当市f值不定BCDMON0 x57000084(R/W)月时钟当前值不定BCDYEAR0 x57000088(R/W)年时钟当前值不定双击“main.c”,在Main.c代码的第38-49行(行数显示在Main.c编辑窗口的左下角)有以下代码:extern void Lcd_TFT_Init(void);extern void Lcd_TFT_Test(void);extern void Test_Touchpanel(void);extern void Test_Adc(void);extern void KeyScan_Test(void);extern voi

25、d RTC_Display(void);extern void Test_IrDA_Tx(void);extern void PlayMusicTest(void);extern void RecordTest(void);extern void Test_Iic(void);extern void Test_SDI(void);extern void Camera_Test(void);函数外部声明的作用是:使不同文件之间,可以调用同一工程中的其他文件里面的函数。dtextern void RTC_Display(void)上右击“goto”显示 RTC.c”代码如下:void RTC_Di

26、splay(void)U16 year;U8 month,day;/weekU8 hour,minute,second;RTC_Time_Set();Uart_Printf(nnRTC TIME Display,press ESC key to exit!n);while(Uart_GetKey()!=ESC_KEY)(rRTCCON=1;/RTC read and write enableyear=0 x2000+rBCDYEAR;年month=rBCDMON;/月day=rBCDDATE;日/week=rBCDDAY;星期hour=rBCDHOUR;小时minute=rBCDMIN;分se

27、cond=rBCDSEC;秒rRTCCON&=1;/RTC read and write disableUart_Printf(RTC time:%04x-%02x-%02x%02x:%02x:%02xnn,year,month,day,hour,minute,second);Delay(900);根据RTC实现原理,不难分析实时时间获取就是获取BCD码数据。在SecureCRT窗口选择2,调试RTC实时时钟(即Real Time Clock):RTC TIME Display,press ESC key to exit!RTC time:2008-11-07 12:00:00RTC time

28、:2008-11-07 12:00:01RTC time:2008-11-07 12:00:02RTC time:2008-11-07 12:00:03时钟会按照每一秒钟为周期,准时的+1。1.4.3、Test ADC调试ADC 实验。2440内部ADC结构图如下:pull NDXPXMYPYMGWaiting for Interrupt ModeFigure 16-1.ADC and Touch Screen Interface Functional Block DiagramTouch ScreenADC Interface&Touch ScreenROSOO.KET我们从上面的结构图和数

29、据手册可以知道,该ADC模块总共有8个通道可以进行模拟信 号的输入,分别是AINO、AINK AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟 信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值 来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器2中 ADCDAT2,然后ADCDAT0中的数据可以通过中断或查询的方式来访问。开发板通过一个10K的电位器(可变电阻)来产生电压模拟信号,然后通过第一个通道(即:AIN2 将 模拟信号输入ADC。找到ADC的相关函数如下(方法同上):/File Name:Adc.c/Fun

30、ction:TQ2440 ADC Test/Version:1.0=#include def.h#include option.hinclude 2440addr.hHinclude H24401ib.hninclude n2440slib.hn#define REQCNT 100#define ADC_FREQ 2500000#define LOOP 10000volatile U32 preScaler;=int ReadAdc(int ch)(inti;static int prevCh=-l;rADCCON=(114)I(preScaler6)I(ch3);/setup channel

31、if(prevCh!=ch)rADCCON=(114)I(preScaler6)I(ch3);/setup channelfor(i=0;i PU EnrGPBCON=rGPBCON&0 x3d57fcl0 x3d57fc;/LED8:5=OUTPUT;rGPFCON=rGPFCON&(-(34)l(30)l(38)l(32)I(24)l(20)l(28)l(22);将GPF的5个口设置为ENTO ENT1 ENT2 ENT4 EINT5(10为夕卜部中断)rEXTINTO-(71(74)1(78)1(716);rEXTINTO I=(01(04)1(0 1;return Oxff;)stat

32、ic void _irq Key_ISR(void)(U8 key;U32 r;EnterCritical(&r);if(HNTPND=BIT_EINTl)判断为何用rINTPND具体见上文分析(/Uart_PrintfC,eintlnH);ClearPending(BIT_EINTl);清除按键影响)if(rINTPND=BIT_EINT4_7)(ClearPending(BIT_EINT4_7);if(rEINTPEND&(l4)(/Uart_PrintfC,eint4nH);rEINTPEND 1=1 4;)if(rINTPND=BIT_EINTO)(/Uart_PrintfC,eint

33、OnH);ClearPending(BIT_EINTO);if(rINTPND=BIT_EINT2)/Uart_PrintfCeint2iT);ClearPending(BIT_EINT2);key=Key_Scan();if(key=Oxff)Uart_Printf(Interrupt occur.Key is released!nn);elseUart_Printf(Interrupt occur.K%d is pressed!nn,key);ExitCritical(&r);)实验结果:选择4,测试4个按键的功能Key Scan Test,press ESC key to exit!In

34、terrupt occur.KI is pressed!Interrupt occur.KI is pressed!Interrupt occur.Key is released!Interrupt occur.Key is released!Interrupt occur.K3 is pressed!Interrupt occur.Key is released!Interrupt occur.Key is released!Interrupt occur.K4 is pressed!Interrupt occur.K4 is pressed!Interrupt occur.Key is r

35、eleased!Interrupt occur.K2 is pressed!Interrupt occur.Key is released!Interrupt occur.Key is released!Interrupt occur.Key is released!函数改进:在实验时,我们发现,每次按键一次都会跳出很多按键提示,这是由于抖 动造成的,只要在Key_Scan()函数中的每一个if函数中加入延时函数即可(例如(DELAY(1000),延时一秒),就可以解决此问题,每次按键之后显示一次按键提醒。1.4.5、Test Touchpanel触摸屏测试电阻式触摸屏的检测原理是触摸后引起上

36、下两个导电层的接触,改变了电压输出,进 行A/D转换后成了该点的X,Y坐标。初始化AD和触摸口:void Test_Touchpanel(void)(rADCDLY=50000;/(l/3.68MHz)*50000=13.56ms注:在ADC转换之前用的是外部时钟X-tal clock:3.68MHz之后才用到GLK:50MHzrADCCON 二(l14)l(prescaler6);注:bit14:O-disable ADC 1-enable ADC bit13:6:prescaler=9 ADC fleq 二 50MHz/(9+l)=5MHzUart_Printf(nnTouch Scree

37、n testnn);rADCTSC=0 xd3;/waiting for interrupt Mode注:bitl:O:11waiting for interrupt Modebit2:0Normal ADC 1Auto Sequential measurement of X-position,Y-positionbit3:0-XP pull-up enable 1XP pull-up disablebit4:0XP output driver enable 1XP output driver disablebit5:0XM output driver disable 1XM output d

38、river enablebit6:0YP output driver enable 1YP output driver disablebit7:0YM output driver disable 1YM output driver enablebit8:0stylus down interrupt signal 1stylus up interrupt signalpISR_ADC=(int)AdcTs Auto;rINTMSK=-BIT_ADC;/ADC Touch Screen Mask bit clearrINTSUBMSK=-(BIT_SUB_TC);Uart_Printf(nnPre

39、ss any key to quit!nH);Uart_Printf(nnStylus Down,please.nH);Uart_Getch();rINTSUBMSKI=BIT_SUB_TC;rINTMSKI=BIT_ADC;Uart_Printf(Touch Screen Test is Finished!nH);)void _irq AdcTsAuto(void)(U32 saveAdcdly;if(rADCDAT0&0 x8000)(/Uart_Printf(HnStylus Up!nH);rADCTSC&=0 xff;/Set stylus down interrupt bit)/el

40、se/Uart_Printf(nnStylus Down!n);rADCTSC=(1 3)l(1 2);/Pull-up disable,Seq.X,Y postion measure,save Adcdly=rADCDLY;rADCDLY=40000;/Normal conversion mode delay about注:如下图,在需要对X,Y转换时切换到GCLK,之前用X-Tal(l/50M)*40000=0.8msrADCCONI=Oxl;/start ADCwhile(rADCCON&0 x1);/check if Enable_start is lowwhile(!(rADCCON

41、&0 x8000);/check if EC(End of Conversion)flag is high,Thisline is necessary-!while(!(rSRCPND&(BIT_ADC);/check if ADC is finished with interrupt bitxdata=(rADCDAT0&0 x3ff);ydata=(rADCDATl&0 x3ff);/check Stylus Up Interrupt.rSUBSRCPNDI=BIT_SUB_TC;ClearPending(BIT_ADC);rINTSUBMSK=-(BIT_SUB_TC);rINTMSK=

42、-(BIT_ADC);注:清所有跟中断有关的标志位,为下次中断做准备rADCTSC=0 xd3;/AVaiting for interruptrADCTSC=rADCTSCI(l8);/Detect stylus up interrupt signal.while(l)/to check Pen-up state(if(rSUBSRCPND&(BIT_SUB_TC)/check if ADC is finished with interrupt bit/Uart_Printf(nStylus Up Interrupt-!nn);break;/if Stylus is up(l)state)Ua

43、rt_Printf(ncount=%03d XP=%04d,YP=%04dnn,count+,xdata,ydata);/X-position Conversion datarADCDLY=saveAdcdly;rADCTSC=rADCTSC&-(l8);/Detect stylus Down interrupt signal.rSUBSRCPNDI=BIT_SUB_TC;HNTSUBMSK=(BIT_SUB_TC);Unmask sub interrupt(TC)ClearPending(BIT_ADC);注:清所有跟中断有关的标志位,为下次中断做准备)实验结果如下:Press any ke

44、y to quit!Stylus Down,please.count=024 XP=0736,YP=0940 count=025 XP=0736,YP=0900 count=026 XP=0734,YP=0848 count=027 XP=0736,YP=0798 count=028 XP=0735,YP=0749 count=029 XP=0738,YP=0699 count=030 XP=0737,YP=0654 count=031 XP=0738,YP=0598 count=032 XP=0737,YP=0541 count=033 XP=0730,YP=0486 count=034 X

45、P=0733,YP=0431 count=035 XP=0738,YP=0379 count=036 XP=0734,YP=0305 count=037 XP=0739,YP=0262 count=038 XP=0732,YP=0214 count=039 XP=0733,YP=0161 count=040 XP=0737,YP=0H8 count=041 XP=0732,YP=00811.4.6、Test TFT LCDLCD 显示实验一、在做LCD液晶显示前,先补充下液晶显示原理。液晶显示屏通俗点理解就是,TFT液晶显示器的每一个点都是有R.G.B三部分组成,当3 个点都通高电平时,液晶融

46、化成液态成透明,所以看到的就是背光颜色白色;当3个点都通 低电平时,液晶凝固成晶体状,将背光完全挡住,所以看到的是黑色。当R的点全为高,当G的点全为高,当B的点全为高,二、RGB原理:而G.B全为低时,而R.B全为低时,而R,B全为低时,显示为红光;显示为绿色;显示为蓝色。RGB颜色原理是用三种原色:Red、光。Green、Blue以不同的比例相加,生成不同颜色的色三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,分别对黄绿色、绿色和蓝紫色(或称紫罗 兰色)的光最敏感(波长分 别为564、534和420纳米),如果辨别黄绿色的细胞受到的刺激略大于辨别

47、绿色的细胞,人 的感觉是黄色;如果辨别黄绿色的细胞受到的刺激大大高于辨别绿色的细胞,人的感觉是红 色。虽然三种细胞并不是分别对红色、绿色和蓝色最敏感,但这三种光可以分别对三种锥形 细胞产生刺激。例如,红光与绿光按某种比例复合,对三种锥状细胞刺激后产生的色觉可与眼睛对单纯 的黄光的色觉等效。但决不能认为红光与绿光按某种比例复合后生成黄光,或黄光是由红 光和绿光复合而成的。三、S3c2440中某些语句的理解:bpp术语:bits per pixel每像素多少位。a、24bpp,这是最常见的1600万色标准该模式下,R.G.B各使用无符号整数16位来表示 红、绿、蓝三颜色的强度,比如:OxFFOOF

48、F为品红色,因其最多可以有1600万种组合而得名(2的24次方为 16777216)。b、16bpp,这是S3c2440所用的6.5万色标准(2的16次方为65536)16比特模式分配给 每种原色各5比特,其中Green为6比特,因为人眼对绿光的分辨的更精确(某些地方采用的是 各5比特,剩下的1比特不使用),所以我们这里使用的RGB为5:6:5模式。出厂代码中对整 个屏幕显示红色的语句为:LCD ClearScr(Oxlfll)|(0 x005)|0 x00);正是按照5:6:5 的模式分配的11111 000000 00000所以显示红色。同理显示出黑色、白色、蓝色、绿色。void Lcd_

49、TFT_Test(void)(Uart_Printf(nnTest TFT LCD!nH);Lcd_ClearScr(0 x00ll)I(0 x005)I(0 x00);/clear screenUart_Printf(OnDisplay Black!Press any key to continue!nn);Uart_Getch();/wait uart inputLcd_ClearScr(Oxlfll)I(0 x3f5)I(OxIf);/clear screenUart_Printf(nDisplay White!Press any key to continue!nH);Uart_Getch();/wait uart inputLcd_ClearScr(0 x00ll)I(0 x005)I(OxIf);/clear screenUart_Printf(Display Blue!Press any key to continue!nH);Uart_Getch();/wait uart inputLcd_ClearScr(0 x00ll)I(0 x3f5)I(0 x00);/clear screenUart_Printf(nDisplay Green!Press any key to continue!nH);Uart_Getch();

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服