基于linux下fpga的设计与实现内容摘要:

点,因此有人也称之为八段式发光二极管。 图 . 数码管外形图及阴阳两极连接示意图 如图 所示,数码管由 8 个发光段(第八段表示小数 点)的不同组合,从而实现十进制数的显示。 通过段选端可以控制数码管显示内容,位选端用于控制整个数码管是否工作:对于共阴极数码管,位选端要接低电平,对于共阳极数码管,位选端接高电平。 数码管有两种显示方式:动态显示和静态显示。 静态显示让数码管要点亮的数码管同时持续点亮;动态显示则利用了人眼的视觉暂留原理,在一个时间内只点亮一个数码管。 本次设计采用一位的数码管控制绿灯通行的计时,这次的设计中,主要是控制南北和东西方向的通行,在同一方向通行时,另两个方向就不允许通行。 通行的时间控制为 8 秒,在 8 秒倒计时结束时,通行方向 发生变化。 点阵显示硬件设计 点阵内部结构及外形如下, 8*8 点阵共由 64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置 1电平,某一列置0电平,则相应的二极管就亮。 8*8 点阵的工作原理:若要用点阵发光二极管显示汉字或者图形,首先要将图形、汉字、字母放在一个方块内,方格块分成 8*8 共 64 个小方格,在方块内安徽新华学院《嵌入式系统开发》课程设计 10 写上所需要的内容,在字笔划下落处的小方格里填上“ 1”,无笔划处填上“ 0”,这样就形成了一个图形二进制数据。 图 8*8 点阵图 上图是一只 8*8 阵列的点 阵发光显示器,该点阵发光显示器是由 8*8阵列组成,共 8 行,每行 8只发光二极管,共 64 只发光像素,每列的 8 只发光二极管的所有负极(阴极)相连。 每行发光管的正极相连,点阵发光显示器在同一时间只能点亮一列,每列点亮的情况是根据从显示器 P1~P8 送入的数据点亮,要使一个字符在显示器整屏显示,点阵发光显示器就必须通过快速逐列点亮,而且是周而复始的循环点亮,使人眼的暂留视觉效应形成一个全屏字符。 蜂鸣器设计 在 ZigBee 模块中通过程序控制设计蜂鸣器在方向变化时会发出提示音。 具体实现是在绿灯开始时蜂鸣 器会响起,以此作为通行的提示。 发光二极管达到电流放大作用。 如图 所示。 图 蜂鸣器电路图 安徽新华学院《嵌入式系统开发》课程设计 11 4 功能实现 在本次的课程设计中,主要是基于嵌入式系统和 FPGA 的 ZigBee 模块 LED 矩阵 的功能 SBuff[12]至 SBuff[19]为 LED 矩阵点亮数据,如 SBuff[14] = 0x42 表示为LED 矩阵第三列从高往低 第二个灯和第七个灯点亮。 实现代码如下: if(LED) { if(i==0) { printf( 南北方向通行,东西方向禁止通行 \n)。 printf(\n)。 //控制 LED 矩阵 unsigned char SBuff[21]。 SBuff[0] = 0x02。 SBuff[1] = 0x12。 SBuff[2] = 0xB9。 SBuff[3] = 0x46。 SBuff[4] = 0xF1。 SBuff[5] = save_byte4。 SBuff[6] = save_byte5。 SBuff[7] = 0x01。 SBuff[8] = 0x07。 SBuff[9] = 0x04。 SBuff[10] = 0x0。 SBuff[11] = 0x0。 //LED 控制南北 方向 SBuff[12] = 0x00。 SBuff[13] = 0x00。 SBuff[14] = 0x42。 SBuff[15] = 0xff。 SBuff[16] = 0xff。 SBuff[17] = 0x42。 SBuff[18] = 0x00。 SBuff[19] = 0x00。 SendNum++。 if(SendNum == 8) 安徽新华学院《嵌入式系统开发》课程设计 12 SendNum = 0。 SBuff[20] = 0x0。 SBuff[20] = XorVerifySend(SBuff)。 //异或校验 nwrite = write(serial_fd,SBuff,sizeof(SBuff))。 //printf(nwrite1=%d\n,nwrite)。 buffer_has_send = 0。 } else { printf( 东西方向通行,南北方向禁止通行 \n)。 printf(\n)。 //控制 LED 矩阵 unsigned char SBuff[21]。 SBuff[0] = 0x02。 SBuff[1] = 0x12。 SBuff[2] = 0xB9。 SBuff[3] = 0x46。 SBuff[4] = 0xF1。 SBuff[5] = save_byte4。 SBuff[6] = save_byte5。 SBuff[7] = 0x01。 SBuff[8] = 0x07。 SBuff[9] = 0x04。 SBuff[10] = 0x0。 SBuff[11] = 0x0。 //LED 显示东西 方向 SBuff[12] = 0x18。 SBuff[13] = 0x3c。 SBuff[14] = 0x18。 SBuff[15] = 0x18。 SBuff[16] = 0x18。 SBuff[17] = 0x18。 SBuff[18] = 0x3c。 SBuff[19] = 0x18。 SBuff[20] = 0x00。 SBuff[20] = XorVerifySend(SBuff)。 //异或校验 nwrite = write(serial_fd,SBuff,sizeof(SBuff))。 //printf(nwrite1=%d\n,nwrite)。 buffer_has_send = 0。 } sleep(2)。 } 安徽新华学院《嵌入式系统开发》课程设计 13 实验截图如下: 图 南北方向 图 东西方向 ZigBee 模块上数码管功能实现 SBuff[10]为 数码管显示的数据值 ,如 SBuff[10] = 0x08 表示为 数码管显示数值为 8。 实现代码如下: if(SEG) { //控制数码管 printf( 还剩 %d 秒 \n,temp[j])。 printf(\n)。 安徽新华学院《嵌入式系统开发》课程设计 14 unsigned char SBuff[21]。 SBuff[0] = 0x02。 SBuff[1] = 0x12。 SBuff[2] = 0xB9。 SBuff[3] = 0x46。 SBuff[4] = 0xF1。 SBuff[5] = save_byte4。 SBuff[6] = save_byte5。 SBuff[7] = 0x01。 SBuff[8] = 0x07。 SBuff[9] = 0x01。 //b01:数码管显示数据有效; 0:无效 SBuff[10] = temp[j]。 //显示计数时间 j++。 if(j==10) { j=0。 i++。 i=i%2。 } SBuff[11] = 0x0。 SBuff[12] = 0x0。 SBuff[13] = 0x0。 SBuff[14] = 0x0。 SBuff[15] = 0x0。 SBuff[16] = 0x0。 SBuff[17] = 0x0。 SBuff[18] = 0x0。 SBuff[19] = 0x0。 SBuff[20] = 0x0。 SBuff[20] = XorVerifySend(SBuff)。 nwrite = write(serial_fd,SBuff,sizeof(SBuff))。 // //printf(nwrite1=%d\n,nwrite)。 buffer_has_send = 0。 sleep(5)。 } 实验截图如下: 安徽新华学院《嵌入式系统开发》课程设计 15 图 ZigBee 数码管显示图 ZigBee 模块上蜂鸣器功能实现 蜂鸣器控制 ,1 个字节。 0:停止发声( SBuff[11]),其它值 :发声长度 实现代码如下: if(PWM) { //控制蜂鸣器 printf( 控制蜂鸣器 \n)。 printf(\n)。 unsigned char SBuff[21]。 SBuff[0] = 0x02。 SBuff[1] = 0x12。 SBuff[2] = 0xB9。 SBuff[3] = 0x46。 SBuff[4] = 0xF1。 SBuff[5] = save_byte4。 SBuff[6] = save_byte5。 SBuff[7] = 0x01。 SBuff[8] = 0x07。 SBuff[9] = 0x02。 //b11:蜂鸣器数据有效; 0:无效 SBuff[10] = 0x0。 SBuff[11] = 0x1f+SendNum。 SendNum++。 SBuff[12] = 0x0。 SBuff[13] = 0x0。 SBuff[14] = 0x0。 SBuff[15] = 0x0。 SBuff[16] = 0x0。 SBuff[17] = 0x0。 SBuff[18] = 0x0。 SBuff[19] = 0x0。 安徽新华学院《嵌入式系统开发》课程设计 16 SBuff[20] = 0x0。 SBuff[20] = XorVerifySend(SBuff)。 nwrite = write(serial_fd,SBuff,sizeof(SBuff))。 //printf(nwrite1=%d\n,nwrite)。 buffer_has_send = 0。 sleep(1)。 } 5 测试结果与分析 安徽新华学院《嵌入式系统开发》课程设计 17 此次课程设计由于使用 ZigBee 扩张模块显示效果。 每次发送的指令及数据只控制一个模块导致实验效果多次与预期结果不一致, 代码的测试与分析 分析实验结果:由于每次发送的数据都是控制一个模块且通过网络端口将数据传送至 ZigBee 某块。 指令及数据传送频率过高导致数据总线繁忙导致有些发送的数据发送错误导致有些数据没有正确的显示。 优化代码的功能 主要功能完成 LED 矩阵 显示 东西方向及南北方向箭头 ,通过该模块,实现交通的直线通行和转弯,让行人明确行走的方向是否可行;蜂鸣器的主要功能是 方向变换的发声,通过该模块,实现交通的方向变换的提醒,让行人注意安全;数码管的主要功能是倒计时,通过该模块,实现交通的方向变换的时间,让行人注意时间是否足够通行。 虚拟机上程序的挂载 图 优化代码虚拟机程序挂载图 安徽新华学院《嵌入式系统开发》课程设计 18 超级终端上程序挂载 图 优化代码超级终端程序挂载图 安徽新华学院《嵌入式系统开发》课程设计 19 测试结果与分析 图 优化代码运行结果图 测试结果分析: 实验结果为:数码管显示的数据可能出现某个数据没有显示直接跳到另一个不连的数据。 分析实验结果:由于每次发送的数据都 是控制一个模块且通过网络端口将数据传送至 ZigBee 某块。 指令及数据传送频。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。