基于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 某块。 指令及数据传送频。基于linux下fpga的设计与实现
相关推荐
郑州大学西亚斯国际学院毕业设计说明书 基于 Linux的局域网服务器的架设与应用 1 绪 论 全球范围内 Linux 的发展状况让人鼓舞,从全球来看 Linux 的增长是非常快的。 目前,全球 Linux 市场超过 70 亿美元。 从整个操作系统的市场来看, Linux 的增长比其他操作系统都来得更加快。 而中国比全球的增长更显得快,从大致的增长率来看,全球大概是 9%13%的增长率,在中国,
流调速系统中显示出很好的应用前景。 基于模糊逻辑或人 工神经网络的控制系统具有更好的负载扰动及非线性参数变化的鲁棒性,并且无需依赖数学模型的设计。 模糊逻辑己经广泛应用于传动系统的速度工艺控制、这些新型智能控制理论与方法已在同步电机变频调速系统的模型参数辨识和自学习、自调整技术中得到应用。 近年来,随着计算机技术的迅速发展,在电气传动技术领域引起一场变革
E和数据库功能的比较 LUCENE全文索引引擎 数据库 匹配效果 通过词元 (term)进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持 使用: like %% 会把 herlands也匹配出来, 多 个 关 键 词 的 模 糊 匹 配 : 使 用 like %%% : 就 不 能 匹 配 词 序 颠 倒 的.. 匹配度 有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。
试风机性能试验中信号的采集和转换是不可缺少的,因此我们需要传感器来把测得的物理信号转换为我们需要的电信号,然后通过信号调理电路来处理发给数据采集卡,数据采集卡再把 接收到的电信号,送到上位机中进行分析和处理。 然后虚拟仪器会把测试的数据以及经过计算后的数据再拟合绘制出风机性能曲线。 整个过程中需要的硬件设备有风机、各种传感器、数据采集卡、PC 机等。 当然,整个硬件系统就相当于人的躯体
退出聊天室。 本系统具体功能需求如下: ( 1)聊天室管理员经 登录 界面 登录 到管理界面,即系统的服务器端。 用户经 登录 界面都进入聊天大厅。 两类界面根据系统使用者的角色不同, 登录 界面也有所不同。 ( 2)不论是管理员还是用户 都需要 在 登录 界面输入正确的用户名和密码后 才 可以 登录到各自的界面中去。 ( 3)系统的两个主要界面都是为方便管理员和用户操作的。 首先
户自定义) ” 三个选项,我们选择 “ Custom” ,有更多的选项,也方便熟悉安装过程 ( 3) 在 “ Developer Components(开发者部分) ” 上左键单击,选择 “ This feature, and all subfeatures, will be installed on local hard drive.” ,即 “ 此部分,及下属子部分内容,全部安装在本地硬盘上