嵌入式
- 格式:doc
- 大小:384.00 KB
- 文档页数:11
嵌入式系统课程设计
——LED与GPIO数码管驱动程序
北京科技大学自动化学院
自动化系
二○一一年五月
1 摘 要: 此课程设计是在Windows CE环境下利用EVC编程语言编写程序,在PXA270EP实验箱上实现LED数码管循环显示一到四位数字以及在PXA270EP核心板上通过GPIO控制LED灯以一定的频率闪烁的效果,通过课设对嵌入式程序开发在课堂教学的基础上有进一步的认识。
关 键 词:Windows CE、EVC语言、PXA270EP实验箱、LED、GPIO
Abstract: The curriculum design uses EVC programming language program in Windows CE
environment. The curriculum design can achieve LED digital tube the cyclic
display of one to four digits in PXA270EP experiment box and reach LED lamp
flickering effect at a certain frequency through GPIO control in PXA270EP core
board. It is helpful for us to have further understanding to Embedded program
development on the basis of the classroom teaching through the curriculum
design.
Keywords: Windows CE、EVC programming language、PXA270EP experiment box、LED、GPIO
2 一、课设目的:
1.对嵌入式程序开发在课堂教学的基础上有进一步的认识;
2.熟悉PXA270-EP实验设备及EVC集成开发环境以及相关配置;
3.了解Windows CE下编程,掌握EVC语言的使用;
二、设计功能
本设计在PXA270-EP实验箱上能实现LED数码管驱动功能和GPIO数码管驱动功能。
1. LED数码管驱动功能:
实现在PXA270-EP目标板上的LED数码管显示任意四位正整数(如2,4,6,8),并实现数字的左循环显示和右循环显示功能。
2. GPIO数码管驱动功能:
实现在PXA270-EP目标板的核心板上的LED灯的亮、灭、闪烁三个功能,其中闪烁功能中亮的秒数和灭的秒数,操作者可以任意给定。
三、设计特色
(1)一个界面可以同时完成LED和GPIO数码管驱动的功能;
(2)LED数码管驱动可以对输入的任意四位整数进行操作,可以对四位整数完成左移和右移的操作,进行三个操作中的其中一个时点击剩余的任意一个按钮即会按照点击的功能运行;
(3)GPIO数码管驱动可以按照使用者的要求改变闪烁中亮的秒数和灭的秒数。
四、模块介绍
1. LED数码管驱动模块
(1)显示模块
显示模块的功能是将编辑框中输入的四位正整数在LED数字显示模块上显示出来,其流程图如图1,程序源码如下:
void CLedDlg::OnButtonSet() //LED数码管驱动中的“显示”按钮程序
{ // TODO: Add your control notification handler code here
BOOL b;
KillTimer(1); //点击“显示”按钮时关闭定时器1
KillTimer(2); //点击“显示”按钮时关闭定时器2
3 UINT val=GetDlgItemInt(IDC_EDIT_NUM,&b,FALSE);//获取Edit框的内容
memset(data,0,4);
if(b)
{ int i,n;
char str[16];
n=sprintf(str,"%d",val);
n=n>4?4:n;
for(i=0;i
{
data[i]=ledfont[str[i]-'0'];
}
}
}
(2)左循环模块
左循环移位模块的功能是将LED数字显示器上即时显示的四位整数在实验箱上以一秒移动一次的速度循环左移,其流程图如图2,程序源码如下:
void CLedDlg::OnButtonSet3() //LED数码管驱动中的“左循环移位”按钮控制程序
{
// TODO: Add your control notification handler code here
KillTimer(1);//启动“左循环移位”计时器时关闭“右循环移位”定时器
SetTimer(2,1000,NULL); //启动“右循环移位”定时器
}
图3 右循环流程图 图2 左循环流程图 图1 显示模块流程图 图1 显示流程图
4 (3)右循环模块
右循环移位模块的功能是将LED数字显示器上即时显示的四位整数在实验箱上以一秒移动一次的速度循环右移,其流程图如图3,程序源码如下:
void CLedDlg::OnButtonSet2()
//LED数码管驱动中的“右循环移位”按钮控制程序
{
// TODO: Add your control notification handler code here
KillTimer(2);//启动“右循环移位”时关闭“左循环移位”定时器
SetTimer(1,1000,NULL); //设置“右循环移位”定时器
}
2.GPIO数码管驱动模块
(1)亮模块
亮模块的功能是使LED灯亮,其流程图如图4,程序源码如下:
void CLedDlg::OnButtonOn() //GPIO数码管驱动中的“亮”按钮控制程序
{
// TODO: Add your control notification handler code here
//关闭定时器,使闪烁停止
KillTimer(3); //关闭定时器3
KillTimer(4); //关闭定时器4
m_bValue=FALSE; //设置GPIO数码管为亮的状态
WriteFile(m_hDev1,&m_bValue,4,&m_dwBytes,NULL);
}
图4 亮模块流程图 图5 灭模块流程图
5 (2)灭模块
灭模块的功能是使LED灯灭,其流程图如图6,程序源码如下:
void CLedDlg::OnButtonOff() //GPIO数码管驱动中的“灭”按钮控制程序
{
// TODO: Add your control notification handler code here
//关闭定时器,使闪烁停止
KillTimer(3); //关闭定时器3
KillTimer(4); //关闭定时器4
m_bValue=TRUE; //设置GPIO数码管为灭的状态
WriteFile(m_hDev1,&m_bValue,4,&m_dwBytes,NULL);
}
(3)闪烁模块
闪烁模块的功能是使LED灯按照设定的亮灭时间闪烁,其流程图与程序源码如下:
void CLedDlg::OnButtonFlash() //GPIO数码管驱动中的“闪烁”按钮控制程序
{
// TODO: Add your control notification handler code here
BOOL c;
UINT m=GetDlgItemInt(IDC_EDIT1,&c,FALSE);
//获取Edit1框中的内容,赋值给变量m
UINT n=GetDlgItemInt(IDC_EDIT2,&c,FALSE);
//获取Edit2框中的内容,赋值给变量n
x=(m+n)*1000; //按照输入的正整数来设置闪烁的总周期
y=m*1000; //按照输入的正整数来设置闪烁的亮的时间
m_bValue=FALSE; //设置GPIO数码管闪烁的首状态为亮
WriteFile(m_hDev1,&m_bValue,4,&m_dwBytes,NULL);
SetTimer(3,x,NULL); //启动闪烁总周期定时器
SetTimer(4,y,NULL); //启动闪烁亮定时器
}
6
3.定时器选择模块
定时器选择模块的功能是提供与不同的定时器对应的程序,其流程图如图7,程序源码如下:
void CLedDlg::OnTimer(UINT nIDEvent) //定时器选择
{ // TODO: Add your message handler code here and/or call default
char jk,jh; //定义两个字符型变量
switch(nIDEvent)
{ case 1://定时器1的控制程序是LED数码管驱动的“右循环移位”控制程序
{jk=data[1]; //将数组data中的第二个数赋值给变量jk 图6 闪烁模块流程图