嵌入式系统课程设计_基于嵌入式课程设计

2020-02-27 其他范文 下载本文

嵌入式系统课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于嵌入式课程设计”。

《嵌入式系统概论》综合设计报告书

设计题目:用键盘控制LED显示不同图形

中央民族大学 二零零八年十月三十一日

一、设计目的了解LED点阵和矩阵键盘的工作原理。

二、设计内容

编写程序控制用矩阵键盘控制LED点亮,产生不同的图形。

三、设计方案

功能概述:

本设计要实现的功能是通过键盘控制LED点阵图形显示,如果键盘输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。

1、程序设计思路

本设计要实现键盘控制LED点阵图形显示,就必须要编写键盘和LED点阵的程序。先通过扫描矩阵键盘,得到键盘值,然后再调用点阵显示子函数,根据扫描的键盘值,在LED点阵上显示不同的图形。

2、主程序设计

主程序要实现的功能是矩阵键盘扫描,得到键盘值,然后把值传给LED显示函数。

程序流程图如下:

3、LED点阵显示函数设计

本函数要实现的功能是根据键盘的值,在LED点阵上显示不同的图形。如果键盘的输入值为0-9则显示相应的数字,如果输入的是其他值,则显示“+”。本程序采用二维数组存放要显示的图形的字模,然后再通过逐行扫描LED点阵,把要显示的图形分8次显示,一次显示一行,利用人眼的视觉暂留效应,是人看到的是一个图形一次显示出来,通过一个循环控制图形显示的时间。程序流程图如下:

4、点阵图形设计

根据8*8 LED点阵的原理,8X8 点阵共需要64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1 电平,某一行置0 电平,则相应的二极管就亮;

先绘制出要显示的图形如下:

根据图形中点亮的LED灯的位置,得到相应图形的16进制数,存放在二维数组Buf1[11][8]中。

所以要显示的图形的字模如下:

buf1[11][8]={ {0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},//0

{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},//1

{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},//2

{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},//3

{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},//4

{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},//5

{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},//6

{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},//7

{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},//8

{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},//9

{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}

//+

};

四、程序源代码

//*************************************************************** #include #include #include #include // open()close()#include // read()write()#include

#define DEVICE_NAME “/dev/led_ary_ctl” #define DEVICE_NAME1 “/dev/keypad”

void Key(unsigned char b[]);

//------main----int main(void){

int fd;

int ret;

unsigned char buf[2];

double x;

char pre_scancode = 0xff;

printf(“n start keypad_driver test nn”);

fd = open(DEVICE_NAME1, O_RDWR);

printf(“fd = %dn”,fd);

if(fd ==-1){

printf(“open device %s errorn”,DEVICE_NAME1);}

else {

buf[0]=0x22;

while(1)

{

read(fd,buf,1);

if(buf[0]!= pre_scancode)

{

if(buf[0]!=0xff)

{

printf(“key =%xn”,buf[0]);

Key(buf);

}

}

pre_scancode = buf[0];

usleep(50000);

}

// close

ret = close(fd);

printf(“ret=%dn”,ret);

printf(“close keypad_driver testn”);}

return 0;}// end main //***************************************************************************** //---------------void Key(unsigned char b[]){ int fd;

int ret;

int i,j,k;

unsigned char buf[2];

unsigned char buf2[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char buf1[11][8]={{0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},//0

{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},//1

{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},//2

{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},//3

{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},//4

{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},//5

{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},//6

{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},//7

{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},//8

{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},//9

{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}

//+

};

// begin of led ary

buf[0]= 1;

buf[1]= 0;

if(b[0]

i=10;

fd = open(DEVICE_NAME, O_RDWR);

printf(“fd = %dn”,fd);

if(fd ==-1)

printf(“open device %s errorn”,DEVICE_NAME);

else {

for(j=0;j

{

for(k=0;k

{

buf[0]=buf1[i][k];buf[1]=buf2[k];

write(fd,buf,2);

}

usleep(1);

}

// close

ret = close(fd);

printf(“ret=%dn”,ret);

printf(“close led_driver testn”);} } //-

五、设计结果

实现键盘控制LED点阵显示,输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。

六、心得体会

通过本次实验,我们对linux下的实验更加熟悉了,对LED点阵显示和矩阵键盘的原理有了深入的了解,掌握了点阵图形的设计方法和键盘的输入的读取,并把二者结合起来,实现了键盘控制点阵图形现实。

在实验过程中,我们也出现了问题,最开始时,由于不清楚点阵的C,R的高低位的对应情况,经过试验,才确定。然后就是点阵的显示是一闪即过的,然后我们通过循环控制了点阵的显示时间。总之,通过这次设计,我们都学到了很多东西。

《嵌入式系统课程设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
嵌入式系统课程设计
点击下载文档
相关专题 基于嵌入式课程设计 嵌入式系统 课程设计 基于嵌入式课程设计 嵌入式系统 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文