当前位置:文档之家› 北京科技大学 嵌入式课程设计报告

北京科技大学 嵌入式课程设计报告

《嵌入式控制系统》课程设计报告学院专业班级姓名学号指导教师 _目录摘要 (4)Abstract (4)引言 (5)带中断LED数码管驱动程序设计 (6)1.设计内容 (6)1.1 基本功能 (6)1.2 扩展功能 (6)1.3创新功能 (6)2.实验设备 (6)3.设计功能块说明 (6)4.设计原理 (7)4.1 LED发光原理 (7)4.2 八位LED显示器 (8)5. 实验步骤 (8)5.1 驱动程序加载 (8)5.2 添加控件 (8)5.3基本功能的实现 (9)5.4 使用指南 (10)6. 实验结果 (10)6.1 基本功能实现结果 (10)6.2 LED数码管清零功能实现结果 (11)6.3 中断计数功能实现结果 (12)6.4 频率设置功能实现结果 (13)7. 心得体会 (14)附录 (16)摘要通过嵌入式控制系统课程的学习并结合本次课程设计,了解嵌入式系统的开发方法和流程,熟悉Intel XScale硬件平台及其应用处理机的使用方法,熟悉Windows CE嵌入式系统的基本原理、概念。

能针对Intel XScale硬件平台、应用需求自行定制、优化WinCE操作系统,并独立编写可在Intel XScale嵌入式设备上运行的应用程序。

本课程设计主要实现了LED数码管的驱动程序,中断计数功能、LED显示清零功能、LED 数字显示频率设置的功能。

关键字:WINCE 中断数码管驱动AbstractLearning Embedded Control Systems and combining the curriculum design can help us understand the Embedded Control Sy stems’ development methods and processes, and be familiar with Intel XScale Hardware platform and its usage. Know well the basic principles and concepts about WINCE. Design and optimize Windows Embedded Compact and compose Application software program that can operate on the Intel XScale Hardware platform.The main achievement of the curriculum design are drivers for LED, Interrupt Count, clean the results of the LED and set up the display frequency of the LED.Key words: WINCE Interrupt Digital Driving引言随着芯片技术和电子产品智能化的飞速发展,嵌入式技术越来越受到人们的关注,应用领域几乎遍及所有的电子产品:智能机器人、网络通信、军用设备、汽车导航、环境保护、智能仪器等等。

嵌入式系统不仅融合了计算机软、硬件技术、通讯技术和半导体微电子技术,而且针对实际应用系统要求,将相应的计算机直接嵌入到应用系统中,并可针对应用需求对软、硬件进行优化、裁减。

嵌入式控制系统是一门新兴的课程,通过本次课程设计可以更好地掌握这门新技术,对今后的发展有很大帮助。

带中断LED数码管驱动程序设计1.设计内容1.1 基本功能1.实现PXA270-EP 目标板上的LED 数码管循环显示数字2,4,6,8;2.实现LED数码管数字的静态显示;3.通过GPIO控制发光二极管的不同工作状态。

1.2 扩展功能使用实验箱上的按键实现LED数码管的清零工作,进一步扩展了基本功能。

1.3创新功能1.通过编写程序实现对中断次数的计数功能;4.通过中断功能实现对2,4,6,8数字循环显示频率的更改。

2.实验设备1、GX-PXA270EP 实验箱2、装有windows XP的PC3.设计功能块说明该课程设计主要是有4个功能模块组成:LED 数码管循环显示数字2,4,6,8和数码管的静态显示、LED数码管显示数字清零、中断次数计数、更改2,4,6,8数字循环显示频率,通过这四个功能模块的实现加深对嵌入式控制系统的认识和理解。

了解嵌入式系统的开发方法和流程,熟悉Intel XScale硬件平台及其应用处理机的使用方法,熟悉WINCE嵌入式系统的基本原理、概念。

4.设计原理4.1 LED发光原理LED(Light Emitting Diode),即发光二极管。

是一种半导体固体发光器件。

它是利用固体半导体置于一个有引线的架子上,然后四周用环氧树脂密封,起到保护内部芯线的作用,所以LED的抗震性能好。

发光二极管的核心部分是由P型半导体和N型半导体组成的晶片,如图1,在P型半导体和N型半导体间有一个过渡层,称为P-N结。

在某些半导体材料的P-N结中,注入的少数载流子与多数载流子复合时,会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。

P-N结加反向电压,少数载流子难以注入,故不发光。

利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。

当它处于正向工作状态时(即两端加上正向电压),电流从LED阳极流向阴极时,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。

图1 发光二极管的核心组成部分4.2 八位LED显示器八段LED显示器(见图2)由8个发光二极管组成。

基中7个长条形的发光管排列成“日”字形,另一个点形的发光管在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。

LED显示器有两种不同的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED 显示器。

图2 八位LED显示器内部原理图5. 实验步骤5.1 驱动程序加载任何简单的硬件在操作系统上调用时都需要驱动程序,数码管也不例外。

由于时间的限制,本次课程设计的开发板上的flsh里面已经烧录了加载驱动的WinCE操作系统,所以只需要打开相应的EVC开发软件开发即可。

5.2 添加控件因为本次课程设计有四个功能模块,需要三个显示控件,一个用于循环显示静态数码管需要显示的数字,一个用于显示中断次数,最后一个则用于显示更改数码管循环显示的频率。

见图3控件设计图。

图3 控件设计图其中,显示按钮是作为数码管静态显示的按钮,如显示1235;亮、灭、闪烁这三个按键是通过GPIO控制发光二极管的状态;测试按键是实现2,4、6、8数码管循环动态显示的按钮;复位按键是实现中断次数清零功能的按钮;Apply按键是启动更改的循环显示周期的按键。

以上就是整个课程设计的全部控制界面,通过不同的按钮操作,实现不同的功能。

5.3基本功能的实现windowsCE是一个界面友好的嵌入式操作系统,系统提供了丰富了控件,极大的方便了用户的开发。

C++是优秀的编程语言,在EVC环境下,编写的难度大大降低,尤其是界面的处理。

由于实验平台提供了相应的驱动程序,所以本次实验并不需要了解其硬件操作,大大缩短了一个嵌入式应用的开发速度。

通过本次嵌入式实验的操作,初步掌握了嵌入式软件开发的流程,对操作系统的裁剪、移植、应用软件的开发有了更加深入的理解。

5.4 使用指南1.启动PC机,打开编写好的软件;2.在显示框中输入想要LED显示的数字,然后按显示按钮即可;3.通过点击亮、灭、闪烁这三个按键实现发光二极管的不同工作状态的切换;4.通过点击测试按键实现2,4、6、8数码管循环动态显示;5.通过复位按键实现中断次数清零的功能;6.通过设置闪烁周期(0~9),点击Apply按键启动更改的循环显示周期。

6. 实验结果6.1 基本功能实现结果基本功能主要包括数码管的静态显示和2、4、6、8数字的循环显示,见图4和图5图4数码管静态显示画面图5 LED数码管循环显示2,4,6,76.2 LED数码管清零功能实现结果通过控制面板上的操作按键,实现清零功能,当按键按下去之后,四个LED数码管的显示数字全部都会变为零。

见图6图6数码管清零结果6.3 中断计数功能实现结果中断计数功能的实现是通过实验箱上的按键实现的,每按一次按键,中断次数就会加一,通过控件上的复位按钮可以实现中断次数清零功能。

见图7.图7中断计数功能实现结果6.4 频率设置功能实现结果闪烁周期可以通过键盘输入来进行设置,本课程设计设置的为0~9之间,基值为100ms,通过改变闪烁周期来控制2、4、6、8循环显示的频率。

见图8.和图9.图8 闪烁周期为5时的结果图9 闪烁周期为9时的结果7. 心得体会WINCE是一个界面友好的嵌入式操作系统,系统提供了丰富了控件,极大的方便了用户的开发。

C语言是优秀的编程语言,在EVC环境下,编写的难度大大降低,尤其是界面的处理。

由于实验平台提供了相应的驱动程序,所以本次实验并不需要了解其硬件操作,大大缩短了一个嵌入式应用的开发速度。

通过本次嵌入式实验的操作,初步掌握了嵌入式软件开发的流程,对操作系统的裁剪、移植、应用软件的开发有了更加深入的理解。

这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于解决。

在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后进行解决,。

课设中我们不仅培养了独立思考、动手操作的能力,也增强了我们的团队协作能力。

有什么不懂不明白的地方要及时请教老师或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识。

附录程序清单// ledDlg.cpp : implementation file#include "stdafx.h"#include "led.h"#include "ledDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CLedDlg dialogCLedDlg::CLedDlg(CWnd* pParent /*=NULL*/): CDialog(CLedDlg::IDD, pParent){//{{AFX_DATA_INIT(CLedDlg)// NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CLedDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CLedDlg)// NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CLedDlg, CDialog)//{{AFX_MSG_MAP(CLedDlg)ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)ON_WM_DESTROY()ON_BN_CLICKED(IDC_BUTTON_ON, OnButtonOn)ON_BN_CLICKED(IDC_BUTTON_OFF, OnButtonOff)ON_BN_CLICKED(IDC_BUTTON_FLASH, OnButtonFlash)ON_WM_TIMER()ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)ON_BN_CLICKED(IDC_BUTTON_RESET, OnButtonReset)ON_BN_CLICKED(IDC_BUTTON_APPLY, OnButtonApply)//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CLedDlg message handlersBOOL CLedDlg::OnInitDialog(){CDialog::OnInitDialog();// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconCenterWindow(GetDesktopWindow()); // center to the hpc screen// TODO: Add extra initialization herem_hDev = CreateFile(_T("LED2:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);if(m_hDev == INVALID_HANDLE_VALUE){AfxMessageBox(_T("打开设备失败"));}m_hDev2 = CreateFile(_T("GIO1:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);if(m_hDev2 == INVALID_HANDLE_VALUE){AfxMessageBox(_T("打开设备失败"));}m_hDev3 = CreateFile(_T("KEY1:"),GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);if(m_hDev3 == INVALID_HANDLE_VALUE){AfxMessageBox(_T("打开设备失败"));}m_test=false;m_flash=false;n=0;ntime=0;flashtime=5;SetTimer(1,100,NULL);return TRUE; // return TRUE unless you set the focus to a control }void CLedDlg::OnButtonSet(){// TODO: Add your control notification handler code hereBOOL b;BYTE data[4];DWORD bytes;//KillTimer(1);m_test=FALSE;UINT val =GetDlgItemInt(IDC_EDIT_NUM,&b,FALSE);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<n;i++){data[i]=ledfont[str[i]-'0'];}}WriteFile(m_hDev,data,4,&bytes,NULL);}void CLedDlg::OnDestroy(){CDialog::OnDestroy();// TODO: Add your message handler code here CloseHandle(m_hDev);}void CLedDlg::OnButtonOn(){// TODO: Add your control notification handler code here //KillTimer(1);m_flash=FALSE;m_bValue = FALSE;WriteFile(m_hDev2,&m_bValue,4,&m_dwBytes,NULL);}void CLedDlg::OnButtonOff(){// TODO: Add your control notification handler code here//KillTimer(1);m_flash=FALSE;m_bValue = TRUE;WriteFile(m_hDev2,&m_bValue,4,&m_dwBytes,NULL);}void CLedDlg::OnButtonFlash(){// TODO: Add your control notification handler code herem_flash=!m_flash;}void CLedDlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call defaultBYTE test[4]={2,4,6,8};BYTE data[4];DWORD bytes;DWORD val=0;static DWORD oldval=1;int i;ntime++;if(ntime >= flashtime){if(m_flash==TRUE){m_bValue=!m_bValue;WriteFile(m_hDev2,&m_bValue,4,&m_dwBytes,NULL);}if(m_test==TRUE){memset(data,0,4);for(i=0;i<4;i++){data[i]=ledfont[test[(i+n)%4]];}n++;n=n%4;WriteFile(m_hDev,data,4,&bytes,NULL);}ntime = 0;}if(ReadFile(m_hDev3,&val,sizeof(val),&bytes,NULL)){if(val!=oldval){SetDlgItemInt(IDC_EDIT_INTERRUPT,val,FALSE);oldval=val;m_test=FALSE;for(i=0;i<4;i++){data[i]=ledfont[0];}WriteFile(m_hDev,data,4,&bytes,NULL);}}else{TCHAR str[64];wsprintf(str,TEXT("Error %d"),GetLastError());SetDlgItemText(IDC_EDIT_INTERRUPT,str);}CDialog::OnTimer(nIDEvent);CDialog::OnTimer(nIDEvent);}void CLedDlg::OnButtonTest(){// TODO: Add your control notification handler code herem_test=!m_test;}void CLedDlg::OnButtonReset(){// TODO: Add your control notification handler code hereDWORD bytes;DWORD val=0;WriteFile(m_hDev3,&val,sizeof(DWORD),&bytes,NULL);}void CLedDlg::OnButtonApply(){// TODO: Add your control notification handler code hereBOOL b;UINT val =GetDlgItemInt(IDC_EDIT_FLASHTIME,&b,FALSE);if(b){int n;char str[16];n = sprintf(str,"%d",val);flashtime=str[0]-'0';if(flashtime==0){flashtime=1;}}}。

相关主题