人人范文网 范文大全

嵌入式系统课程设计

发布时间:2020-03-02 07:53:07 来源:范文大全 收藏本文 下载本文 手机版

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

设计题目:用键盘控制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 \\n\\n\");

fd = open(DEVICE_NAME1, O_RDWR);

printf(\"fd = %d\\n\",fd);

if (fd == -1) {

printf(\"open device %s error\\n\",DEVICE_NAME1); }

else {

buf[0]=0x22;

while (1)

{

read (fd,buf,1);

if(buf[0]!= pre_scancode)

{

if(buf[0]!=0xff)

{

printf(\"key =%x\\n\",buf[0]);

Key(buf);

}

}

pre_scancode = buf[0];

usleep(50000);

}

// close

ret = close(fd);

printf (\"ret=%d\\n\",ret);

printf (\"close keypad_driver test\\n\"); }

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 = %d\\n\",fd);

if (fd == -1)

printf(\"open device %s error\\n\",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=%d\\n\",ret);

printf (\"close led_driver test\\n\"); } } //-

五、设计结果

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

六、心得体会

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

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

《嵌入式系统》课程设计题目

《嵌入式系统》课程设计题目

嵌入式系统课程设计教学大纲

嵌入式课程设计 学生信息管理系统

嵌入式系统基础课程设计报告

嵌入式系统基础课程设计报告

嵌入式课程设计心得体会

嵌入式课程设计报告

嵌入式程序设计课程设计

嵌入式系统

嵌入式系统课程设计
《嵌入式系统课程设计.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档