数码管显示实验报告
【篇一:嵌入式实验报告数码管显示实验】
实 验 报 告
课程名称
实验仪器
实验名称
系 别 专 业 班级/学号
学生姓名 实验日期
成 绩
指导教师 嵌入式系统编程实践清华同方辰源嵌入式系统实验箱实验四:数码管显示实验 __计算机学院_ _ 2013年10月11日___________________
实验四:数码管显示实验
一、实验问题回答
(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.件中定义了一些宏定义,用于将整个工程中的宏定义放在一起,目的是为了程序的可读性更好。本例中定义了五个不同的功能模式,可以根据自己习惯进行修改。
utility.c和utility.h中包含了数码管显示处理函数。其函数声明如下:void disp(char x,int location);使用方法:第一个参数表示要显示的字符,在本例中,就是键盘中断服务程序执行完后保存在oledkey[0]里的字符,第二个参数表示显示的位置,其中1表示数码管的最右端,6表示数码管的最左端,2-4依次表示中间4个数码管。
(2)新建主函数程序,并加载到项目中
新建一个文件,保存为main.c,把main.c也加载到项目中。
本次实验需要增加以下头文件
#include stdio.h
#include lm3sxxxx.h
#include hw_ints.h
#include hw_memmap.h
#include hw_types.h
#include gpio.h
#include interrupt.h
#include sysctl.h
#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功能后,按键后在数码管上按照不同的功能显示不同格式的字符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论