嵌入式实验报告数码管显示实验.doc_第1页
嵌入式实验报告数码管显示实验.doc_第2页
嵌入式实验报告数码管显示实验.doc_第3页
嵌入式实验报告数码管显示实验.doc_第4页
嵌入式实验报告数码管显示实验.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

实 验 报 告课程名称 嵌入式系统编程实践 实验仪器 清华同方辰源嵌入式系统实验箱 实验名称 实验四:数码管显示实验 系 别 _计算机学院_ 专 业 _ 班级/学号 学生姓名 实验日期 2013年10月11日 成 绩 _ 指导教师 实验四:数码管显示实验1、 实验问题回答(1) 如何设置功能3,4中的循环速度? 答:利用系统SysTick Handler中断,控制循环速度 void SysTick_Handler (void) Event = 1;(2) 若是想实现类似实验(三)通过键盘动态控制循环速度,考虑一下应该如何设计? 答: SysTickPeriodSet(SysCtlClockGet() / X) /设置x的大小就可以控制循环的速度。void Reset_Counter_Speed(int x)SysTickIntDisable();SysTickDisable();SysTickPeriodSet(SysCtlClockGet() / x); / 设置x,控制计数频率,值与频率成正比SysTickEnable();SysTickIntEnable();,达到预期的效果。二、实验目的和效果(效果即是否达到实验目的,达到的程度如何) 学习、了解和掌握数码管工作原理和使用方法 实验结果及检查 (1)默认在在OLED屏幕上分行显示自己的学号、姓名、项目序号、时间,如“2010011001”、“zhangsan”、“work4”、“2012-11-” (2)首先在屏幕上显示四个功能选单,通过键盘A-F键选择不同功能,选择后屏幕显示相关功能提示,接受键盘输入的数字键0-9并在数码管上显示。如:开始显示:“please choose the function:” “A: ” “B: ” “C: ” “D: ”按下“A”键后,显示”now you choose function A” (3)按下键盘后,根据不同功能在数码管上显示按键字符。其中“A”功能表示键盘输入的字符在数码管最右端显示,“B”功能表示键盘输入的字符在数码管最左端显示,“C”功能表示键盘输入的字符在数码管上从最右端到最左端循环显示,“D”功能表示键盘输入的字符在数码管从最左端到最右端循环显示,“E”功能表示键盘输入的字符会依次从最右端往左端移动显示,如按下“1”、“2”、“1”、“3”,在数码管上显示 “空 空 空 空 空1” 到“空 空 空 空 1 2” 到“空 空 空 1 2 1”到“空 空 1 2 1 3”,超过6个以后,最左端的丢掉。 (4)扩展:根据自己的想法,扩展“F”按键,在数码管上显示与上面不同的效果。 (5)扩展:根据自己的想法,扩展“F”+“A”按键,即先按F再按A才有该功能。三、实验内容和步骤(重点阐述自己的思路及遇到的问题)(一)Keil开发环境中对项目Project配置 (1)建立项目 1、新建一个project; 2、选择CPU中的Luminary LM3S 8962; 3、加载库文件; 4、项目相关配置项修改。 加载必要程序: 本次实验提供了几个源程序rit128x96x4.h,rit128x96x4.c,startup.s,utility.c,utility.h,definition.h。其中,definition.h文件中定义了一些宏定义,用于将整个工程中的宏定义放在一起,目的是为了程序的可读性更好。本例中定义了五个不同的功能模式,可以根据自己习惯进行修改。Utility.c和utility.h中包含了数码管显示处理函数。其函数声明如下:void disp(char x,int location);使用方法:第一个参数表示要显示的字符,在本例中,就是键盘中断服务程序执行完后保存在oledkey0里的字符,第二个参数表示显示的位置,其中1表示数码管的最右端,6表示数码管的最左端,2-4依次表示中间4个数码管。(2)新建主函数程序,并加载到项目中新建一个文件,保存为main.c,把main.c也加载到项目中。本次实验需要增加以下头文件#include #include #include #include #include #include #include #include #include rit128x96x4.h#include utility.h#include definition.h(二)嵌入式C程序开发 (3)利用中断,接收键盘输入 (3)-(1)在主函数中 开启键盘中断,示例如下:/*使能外设GPIO*/SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);/*设置GPIO为输入*/GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);/*使能中断*/IntEnable(INT_GPIOD);IntMasterEnable(); GPIOPinIntEnable(GPIO_PORTD_BASE, GPIO_PIN_7);GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_RISING_EDGE);注意:其中,GPIO_PORTC用于传输按下的键值,GPIO_PORTD用于向CPU发起中断请求。(4)利用系统SysTick Handler中断,控制循环速度本步骤与实验(二)对应部分一样,不再重复。(5)修改主函数,实现本次实验要求的功能(5)-(1)在主函数中对七段数码管进行相关配置和初始化,如下所示:SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); /*配置GPIO端口为输出*/ 7segd1(PB6);7segd2(PB4);7segd3(PB5)GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);/ bitcode0(PC5);bitcode1(PC6);bitcode2(PC7)GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);/ 7segd0(PD4);7segdot(PD5);rst(PD6)GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);(5)-(2)系统启动后,首先通过键盘输入选择不同功能,并在屏幕上显示不同提示信息。 “A”功能表示键盘输入的字符在数码管最右端显示“B” 功能表示键盘输入的字符在数码管最左端显示“C” 功能表示键盘输入的字符在数码管上从最右端到最左端循环显示“D” 功能表示键盘输入的字符在数码管从最左端到最右端循环显示“E” 功能表示键盘输入的字符会依次从最右端往左端移动显示,如按下“1”、“2”、“1”、“3”,在数码管上显示 “空 空 空 空 空1” 到“空 空 空 空 1 2” 到“空 空 空 1 2 1”到“空 空 1 2 1 3”,超过6个以后,最左端的丢掉。 (5)-(3)选好A-E功能后,按键后在数码管上按照不同的功能显示不同格式的字符。注意:数码管上所有位置的数字同时显示,可以使用for循环赋值并进行显示:for(j=1;j7;j+)disp(digitsj,j);for(k=0;kdelaytime;k+) ; /设置适当的延迟,缓和显示过快的字符重合现象(5)编译、连接,生成可执行程序文件(编译)(链接)(6)反复(3)-(5)步骤,直到完成如果中间出现错误,修改代码,一直到无错,生成最后程序。(三)硬件连接(7)硬件连接 1、接上电源线,先关闭开关 2、用蓝色USB线接上仿真器,仿真器另一JTAG端接LM3S8962 CPU 板(左下较大子板),USB线接电脑 3、确认连接无误后,打开电源开关(8)联调 1、在Keil uVision4中执行下载,(Flash菜单-Download),即可通过仿真器将(一)步编译链接好的执行程序下载到LM3S8962芯片内的Flash中。2、 按下实验箱上LM3S8962子板屏幕上方的白色按钮Reset键,即可查看程序执行效果。若有问题,返回第一步继续修改程序,编译、链接、下载,一直到显示出满意的效果。实验代码: main.c#include #include #include #include #include #include #include #include #include rit128x96x4.h#include utility.h#include definition.hint Event = 0;int Event_key=0;int i=0; /i为全局变量,因为只有1根线GPIO_PIN_4与CPU相联,所以一个按键(16种,4bit表示)需要四次中断才能传给CPU。unsigned char ucValue=0x00;/ucValue为全局变量,该值存储按键值的中间结果。char oledkey2; /设置全局变量oledkey用于保存键盘输入的按键int key_press_flag=0;/有没有按键,0表示没有,1表示有int A_flag,B_flag,C_flag,D_flag,E_flag,F_flag;/按键CDEF状态,0表示未选中,1表示选中int led_postion;char digits6;int inputnext; /检测有无下一个输入数字,0表示没有,1表示有。 /系统SysTick Handler中断服务函数void SysTick_Handler (void) Event = 1; /键盘中断服务函数ISRvoid GPIO_PORT_D_ISR(void)unsigned char ucKey;unsigned long ulStatus;ulStatus = GPIOPinIntStatus(GPIO_PORTD_BASE, true);GPIOPinIntClear(GPIO_PORTD_BASE, ulStatus);if(ulStatus & GPIO_PIN_7)ucKey = GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4);ucKey = ucKey1;ucValue = ucValue + ucKey;ucValue = ucValue4)4) + 48;elseoledkey0 = (ucValue4) - 10 + A; void updateled()int i;for(i = 6; i 1; i-) digitsi = digitsi-1;void displayDigits()int i,k;for(i = 1; i 7; i+) disp(digitsi, i);for(k=0;k200;k+); int main()SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ);RIT128x96x4Init(1000000);RIT128x96x4Clear();SysTickPeriodSet(SysCtlClockGet() / 30);SysTickEnable();SysTickIntEnable();/*使能外设GPIO*/SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);/*设置GPIO为输入*/GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_7);GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);/*使能中断*/ IntEnable(INT_GPIOD);IntMasterEnable();GPIOPinIntEnable(GPIO_PORTD_BASE, GPIO_PIN_7);GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_7, GPIO_RISING_EDGE);/*其中,GPIO_PORTC用于传输按下的键值,GPIO_PORTD向CPU发起中断请求。*/SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);/*配置GPIO端口为输出*/ 7segd1(PB6);7segd2(PB4);7segd3(PB5)GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);/ bitcode0(PC5);bitcode1(PC6);bitcode2(PC7)GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);/ 7segd0(PD4);7segdot(PD5);rst(PD6)GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6); RIT128x96x4StringDraw(2010011374, 0, 10, 15); RIT128x96x4StringDraw(pengxin, 0, 20, 15);RIT128x96x4StringDraw(Work4 12-05, 0, 30, 15);RIT128x96x4StringDraw(please choose the, 0, 40, 15);RIT128x96x4StringDraw(A:

温馨提示

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

评论

0/150

提交评论