自适应摇摇棒

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石家庄职业技术学院
自适应摇摇棒
学生姓名:田长乐
指导教师:侯娟
系别:信息工程系
专业: 电子信息工程技术年级: 08级
论文提交时间:2010年6月1日评阅人:
年月日:
《自适应摇摇棒》
摘要
随着人们物质生活水平的提高,人们对精神生活的追求也愈加强烈,对信息的渴求已成为了人们必不可少的需要,更加新颖的信息传递方式无疑会给人们带来耳目一新的感受。

而现代工具务求简洁化、便携化,因此,摇动显示装置的到来,必将会给人们带来一种新的方便的文化传递方式。

让你的心声闪烁在夜空——LED摇摇棒横空出世!LED摇摇棒又叫摇摇棒、魔棒、闪光棒、闪字棒、闪字棒、星光棒。

LED摇摇棒的诞生是闪光系列产品中的一大革命,他最大的神奇之处,是在手中左右摇晃LED摇摇棒,就会在棒子划过的轨迹上留下清晰地文字或图案。

目前在市场上,这是最新,价格最低,客源距离观看的一款电子产品。

设计具有市场前景,可满足各种大型演出、集会、游行等宣传需要,为人们的生活提供便利。

本设计主要是进行软件代码的设计。

即在原有SPCE061A开发板的基础上自己焊接十六个共阴发光二极管,将其阳极分别按顺序与SPCE061A开发板的IOA 口的十六个I/O端口连接。

运用unSP IDE 2.0.0环境进行软件的设计调试。

此次设计主要实现的功能有:通过一个按键控制切换将要显示的字符图案(只有三幅图案供选择1、田长乐 2、摇摇棒 3、祝老师天天开心),利用水银开关控制显示时间。

在通常的摇摇棒设计中多是通过固定的时间的显示字符,不能随着摇晃速度的的节奏进行调节,这样显示不够明显,切多是通过摇晃的次数进行字符的切换,在此次设计中主要对这两点进行改进:1、利用EXT1中断来计算摇晃的速度,从而调整字符显示的时间;2、增加一个按键,当有按键按下时就会切换到下一字符进行显示,能够循环显示。

1
目录
第一章绪论 (3)
1-1设计背景及意义 (3)
1-2 设计研究内容 (3)
1-3 摇摇棒的介绍 (3)
第二章摇摇棒的硬件设计 (4)
2-1 系统硬件概述 (4)
2-2 电路中用到的主要器件 (4)
2-2-1 SPCE061A 开发板 (4)
2-2-2 LED(发光二极管) (6)
2-2-3 水银开关 (6)
2-2-4 按键 (7)
2-2-5 其它 (7)
2-3 电路设计 (8)
2-3-1 显示模块的设计电路 (8)
2-3-2 时间控制模块 (8)
2-2-3 字符选择模块 (9)
2-4 硬件电路的焊接及调试 (9)
2-4-1 电路焊接完毕后各功能外观图 (9)
2-4-2 硬件电路的调试 (10)
第三章摇摇棒程序的设计 (12)
3-1 设计中用到的软件 (12)
3-1-1 编写及调试用到的软件(unSP IDE 2.0.0) (12)
3-1-2 字模提取软件(畔畔字模提取软件) (12)
3-1-3 程序下载软件(ISP Tool_CHS) (14)
3-2 程序流程图设计 (14)
3-3程序设计 (17)
第四章结论 (23)
参考文献 (24)
2
第一章绪论
1-1设计背景及意义
随着人们物质生活水平的提高,人们对精神生活的追求也愈加强烈,对信息的渴求已成为了人们必不可少的需要,更加新颖的信息传递方式无疑会给人们带来耳目一新的感受。

而现代工具务求简洁化、便携化,因此,摇动显示装置的到来,必将会给人们带来一种新的方便的文化传递方式。

1-2 设计研究内容
通过本次设计主要实现的内容有:
●熟悉凌阳单片机结构及使用
●熟练掌握C语言的使用方法及调试方法
●了解当前灯具闪光市场的前景及发展方向
1-3 摇摇棒的介绍
LED摇摇棒又叫摇摇棒、魔棒、闪光棒、闪字棒、闪字棒、星光棒。

LED摇摇棒的诞生是闪光系列产品中的一大革命,他最大的神奇之处,是在手中左右摇晃LED摇摇棒,就会在棒子划过的轨迹上留下清晰地文字或图案。

目前在市场上,这是最新,价格最低,客源距离观看的一款电子产品。

设计具有市场前景,可满足各种大型演出、集会、游行等宣传需要,为人们的生活提供便利。

人的眼睛存在视觉暂留现象,正因为眼睛反应迟钝,才丰富了人的视觉感受,LED摇摇棒很好的利用了人眼的视觉暂留特性。

运用最新专利电子技术研制而成的线阵LED运动成像的高科技产品。

LED摇摇棒是在手摆动道不同位置的时候让位于一条直线上的LED显示二维图像的不同的列,利用人眼的视觉暂留效应,实现图形扫描显示。

输出信号频率的控制通过单片机来实现,用16个发光二极管进行不同频率的亮灭刷新。

当进行摇动时,由于人的视觉暂留原理,会在发光二极管摇动区域产生一个视觉平面,在视觉平面内的二极管通过不同频率的刷新,会在摇动区域内产生图像,从而达到在视觉平面上传达信息的作用。

具体地说,一行字摇摇棒从一侧摆动到另一侧所需的时间,然后把这段时间平均分成N 等分。

每一列对应一个十六位的字节,分别对应16个LED发光二极管,然后在每一份的时间里显示图形的相应一列,则可以得到完整的图形字段显示。

3
第二章摇摇棒的硬件设计
2-1 系统硬件概述
本设计主要包括凌阳SPCE061A开发板、16个LED灯、1个水银开关、一个按键组成。

将前写好的程序通过PL2303转换芯片写入到单片机中,然后由按键选择将要显示的字符,水银开关控制每个字符元素显示的时间。

图 2.1 硬件系统图
2-2 电路中用到的主要器件
2-2-1 SPCE061A 开发板
凌阳开发板分为七个部分即电源区、下载区、音频区、单片机及其外围器件区、键控区、复位区、端口区,本次设计中主要用到了它的电源区、单片机机器外围器件区(组成单片机机的最小系统)、复位区、端口区。

SPCE061A单片机简介:
它的CPU内核采用凌阳最新推出的Microcontroller and Signal Processor 16位微机处理器芯片,以下简称U’nSP 。

围绕u’nSP 所形成的16位u’nSP 系列单片机,以下简称u’nSP 家族。

采用的是模块式集成结构,它以u’nSP 内核为中心集成不同规模的ROM PAM和功能丰富的各种外设部件。

u’nSP 内核是一个通用的和结构。

除此之外的其它功能模块均为可选结构。

以及这种结构可大可小可有可无,借助这种通用结构附加可选结构的积木式的构成,便可成为各种系列的派生产品,以适合不同场合,这样做无疑会使每种派生产品具有更强的功能和更低的成本。

u’nSP 家族有有以下特点:体积小,集成度高,可靠性好易于扩展。

u’nSP 家族把各功能把
4
各功能部件模块化地集成在一个芯片里。

内部采用总线结构,因为减少了各功能部件之间的连接,提高了其可靠性和抗干扰能力,另外,模块化的结构易于系列的扩展,以适应不同用户的需求。

具有较强的中断处理能力。

μ’nSPTM家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。

高性能价格比:μ’nSPTM家族片内带有高寻址能力的ROM,静态RAM和多功能的I/O口,另外μ’nSPTM的指令系统提供出具有较高运算速度的16位,16位的乘法运算指令和内积运算指令,为其应用添加了DSP功能,使得μ’nSPTM家族运用在复杂的数字信号处理方面既很便利又比专用的DSP芯片廉价。

开发板资源
(1)CPU:SPCE061A (SUNPLUS unSP),外部时钟为 32768Hz,内部倍频最高可至49MHz (2)Flash ROM:64Kbyte的 16bit Flash
(3)RAM:4KByte的16bit SRAM
(4)I/O:32位IO口
(5)ADC:8路10位ADC. 最高转换速率为96KHz。

留有外接AD参考电压接口
(6)DAC:2路10位DAC,最高转换速率为100KHz
(7)麦克风:1路MIC音频输入
(8)喇叭接口:开发板配备喇叭
(9)音量调节电位器:用于调整音量的大小
(10)端口电平可选:可以选择5V和3.3V
(11)两个外部中断输入口
(12)两个外部时钟源输入口
(13)串行通讯接口(SIO)
(14)电源和睡眠指示灯:当系统进入睡眠状态,绿色睡眠指示灯会被点亮
(15)1*3小键盘,可以实现简单的按键控制
(16)电池盒供电接口:开发板配有电池盒,也可外接5V稳压源
(17)集成EZ_Probe
(18)下载线接口
(19)PROBE接口
图 2.2 凌阳开发板上的功能模块
5
主要作用:
●整个设计的主控部分,代码的下载运行都在这块板子上
●连接外围电路,LED显示模块,按键控制模块
●代码下载
2-2-2 LED(发光二极管)
图2.3 LED结构图
LED是发光二极管(Light Emitting Diode,LED)的简称,也称作发光二极管。

这种半导体组件可以作为指示灯、显示板,它不但能够高效率地直接讲点能转化为光能,而且拥有最长达数万小时的是使用寿命,同时具备不如传统灯泡易碎,节能省电等优点。

在设计中的作用:
●作为SPCE061A开发板上的指示灯
●作为此设计的显示模块,进行字符的显示
2-2-3 水银开关
图 2.4 水银开关结构图
因为重力的关系,水银水珠会随容器中较低的地方流去,如果同时接触到两个电极的话,开关便会将电路闭合,开启开关。

主要作用:
6
●触发EXT1中断,通过两次EXT1中断计算LED字符的显示时间
●控制字符显示开始与结束
2-2-4 按键
图 2.5 按键外观
主要作用:
●SPCE061A开发板的复位键
●本次设计中字符的选择键
2-2-5 其它
此次设计中还用到了一定数量的杜邦线,主要用来进行外围器件的连接;
电烙铁、焊锡、吸锡器等进行电路的焊接;
万用表用来进行硬件电路的调试
7
2-3 电路设计
2-3-1 显示模块的设计电路
图 2.6 显示模块电路原理图
设计思路:将16个LED的阴极相连接地,阳极分别接到SPCE061A开发板G区的IOA 口上,通过向IOA的16个I/O口送高低电平来分别控制LED的亮灭。

在摇动过程中,会根据TimerB的中断向P_IOA_Data寄存器送如数据,数据有软件取模得到。

2-3-2 时间控制模块
图 2.7 时间控制模块电路原理图
设计思路:由于IOB2、IOB1为开发板的外部中断控制端口,利用水银开关在摇动中由
8
9
于重力作用产生开关作用从而触发开发板产生EXT1中断,计算两次中断的间隔时间,作为下次摇动显示字符的时间。

在摇摇棒摇动的瞬间,水银开关是起到很重要的作用。

水银开关里的水银珠很活跃,导致在接通时容易产生抖动,说以水银开关倾斜45度角放置,靠水银自身的重力作用减少抖动。

为了确保其可用性,为程序设计了软件消抖的函数,以减少水银抖动带来的影响。

2-2-3 字符选择模块
图 2.8 字符选择模块电路图设计
设计思路:由于IOB0口送的是高电平,所以只要不断的扫描IOB0口是否为低电平就可以判断按键是否按下,当IOB0口为低电平时,表示按键按下,必须通过一定的延时再次扫描以确定有按键按下,确认为低电平时显示下一字符,完成字符的选择作用。

2-4 硬件电路的焊接及调试
2-4-1 电路焊接完毕后各功能外观图
图 2.9 设计的整体结构外观图 图2.10 时间控制部分外观图
图2.11 字符显示模块外观图 图2.12 字符选择部分外观图
2-4-2 硬件电路的调试
电路焊接完毕后主要进行以下的工作:
1、检查各焊点是否有虚焊、漏焊,各元件是否焊接正确
2、利用万用表测试整个电路的通断,检查是否有短路现象
3、向单片机内下载简单的测试程序,16个LED灯、按键、水银开关是否工作正常
测试程序:
#include “SPCE061A.h”
void Delay(void);
int main(void)
{
unsigned int uiData;
*P_IOA_Dir = 0xffff; //设置IOA口为同相高电平输出
*P_IOA_Attrib = 0xffff;
*P_IOA_Data = 0xffff;
*P_IOB_Dir = 0x0000; //设置IOB口为同相高电平输入
*P_IOB_Attrib = 0xffff;
*P_IOB_Data = 0xffff;
if((*P_IOB_Data|0xfffe)!=0xffff)
{
Delay();
if((*P_IOB_Data|0xfffe)!=0xffff)
*P_IOA_Data=0;
}
}
void Delay(void)
{
unsigned int uiCount;
for(uiCount = 0;uiCount < 32767; uiCount++)
{
*P_Watchdog_Clear = 0x0001;//清看门狗操作
}
}
调试记录:
1、程序无法下载,搜索不到SPCE061A
问题解决过程:
a、查看线路连接是否正确,没有错误;
b、重新安装下载器件的驱动程序,问题解决
2、IOA0~IOA7灯亮,IOA8~IOA15灯不亮
问题解决过程:
a、更改程序(向IOA送不同的数据),问题依然存在
b、用万用表测试两点,断路,重新焊接此点问题解决
3、按键不起作用
问题解决过程:
a、检查电路的连接,没有错误
b、更改程序if(*P_IOB_Data=0xfffe)为if((*P_IOB_Data|0xfffe)!=0xffff),问题解决
第三章摇摇棒程序的设计
3-1 设计中用到的软件
3-1-1 编写及调试用到的软件(unSP IDE 2.0.0)
图3.1 unSP IDE 2.0.0的主界面
unSP IDE 2.0.0的简要介绍:unSP IDE 2.0.0集成开发环境集程序的编辑、编译、链接、调试、及仿真等功能为一体。

具有友好的交互界面、下拉菜单、快捷键和快速访问指令列表等,使编程、调试工作方便且高效。

此外,它的软件仿真公功能可以在不连接仿真板的情况下模拟硬件的各项功能来调试程序。

unSP IDE 2.0.0在设计中的主要作用:程序的设计、调试及编译。

3-1-2 字模提取软件(畔畔字模提取软件)
软件的简要介绍:可以在字符的输入处输入想要显示的字符,该字符将会在左侧以16X16的点阵方式显示出来,选择取模顺序,再点击提取字模就可以自动生成字模。

图 3.2 畔畔字模提取软件主界面
在设计中的主要作用:将想要显示的汉字字符在左侧以16x16的点阵方式显示出来,然后再定义数组。

由于此软件生成的字模不能应用到本设计中,所以只用到了这个软件的将字符转换成16x16的点阵方式显示的功能。

用法如下:
其数组为: uint name[48]=
{0x0000,0x0000,0x7ffe,0x4104,0x4104,0x4104,0x4104,0x7ffc,
0x4104,0x4104,0x4104,0x4104,0xfffe,0x4000,0x0000,0x0000, //田
0x0100,0x0100,0x0100,0x0100,0xffff,0x0102,0x0102,0x05c4,
0x0920,0x1130,0x2108,0x6104,0x0106,0x0304,0x0100,0x0000, //长
0x0000,0x0102,0x0304,0x3d08,0x2130,0x2102,0x2101,0x2ffe,
0x4100,0x4100,0xc120,0x4110,0x010c,0x0306,0x0100,0x0000 /乐 };
图3.4 字符提取示意图 图3.5 字符提取示意图 图3.6 字符提取示意图
3-1-3 程序下载软件(ISP Tool_CHS)
由于笔记本上没有串口,所以在程序下载时只能通过USB下载程序,这就用到了开发板的ISP功能。

ISP功能介绍:ISP的实现相对要简单一些,一般通用做法是内部的存储器可以由上位机的软件通过串口来进行改写。

对于单片机来讲可以通过SPI或其它的串行接口接收上位机传来的数据并写入存储器中。

所以即使我们将芯片焊接在电路板上,只要留出和上位机接口的这个串口,就可以实现芯片内部存储器的改写,而无须再取下芯片。

图 3.7 ISP Tool CHS 主界面
使用方法:计算机跟外围器件连接正确后,在左下方会显示“已连接”,这时在点击打开文件选择要下载的程序,再点击下载,完成后,点击断开连接,程序就会在单片机上运行了。

3-2 程序流程图设计
说明:程序设计中运用模块化思想,便于日后程序简单易于修改。

现将主要模块的流程图及运行步骤进行简要介绍。

1、主程序流程图:
图3.8 主程序流程图
模块工作过程说明:
在程序开始后,首先调用程序的初始化模块,即初始化P_IOA口为同相输出口,赋初值为0x0000,P_IOB为同相输入口,赋初值为0xffff,开启IOA定时器,赋初值为0x0000,开中断EXT1,TimerA,然后进入while循环,不断的扫描P_IOB_Data寄存器,当发现IOB
数据的第二位发生变化条件时,说明按键按下,进而改变num值,从而完成选择字符的功能。

期间在while循环过程中,若有EXT1中断发生,则进入EXT1中断进行处理。

2、EXT1
,
图 3.9 EXT1 中断处理流程图
模块工作过程:
EXT1中断发生后,将EXT1,TimerA,TimerB中断关闭,如果是第一次中断则进行Flag++,初始化计数器为0,bl为0,开中断EXT1,TimerA,TimerB,否则判断是否大于0.125S,大于则修改定时器,bl清零,返回中断进入处,否则将继续以前的循化不作处理,直接开中断返回中断开始处。

3、TimerB中断流程图:
图 3.10 TimerB 中断处理流程图
模块工作过程:
进入TimerB中断,根据num选择将要显示的字符函数(主要有三幅字符可以选择),判断bl是否大于将要显示的字符的ysgs,若大于直接返回中断进入处,否则为IOA寄存器赋值,并为bl+1,返回中断进入处。

3-3程序设计
#include "spce061a.h"
#include "mk.h"
#define uint unsigned int
#define C_4096Hz 0x0004
#define C_B1 0x0030
#define C_ZhongDuan C_IRQ1_TMA|C_IRQ2_TMB|C_IRQ3_EXT1 uint name[48]=
{
0x0000,0x0000,0x7ffe,0x4104,0x4104,0x4104,0x4104,0x7ffc,
0x4104,0x4104,0x4104,0x4104,0xfffe,0x4000,0x0000,0x0000, //田
0x0100,0x0100,0x0100,0x0100,0xffff,0x0102,0x0102,0x05c4,
0x0920,0x1130,0x2108,0x6104,0x0106,0x0304,0x0100,0x0000, //长
0x0000,0x0102,0x0304,0x3d08,0x2130,0x2102,0x2101,0x2ffe,
0x4100,0x4100,0xc120,0x4110,0x010c,0x0306,0x0100,0x0000 //乐};
uint text1[64]=
{
0x0840,0x0842,0x0881,0xfffe,0x0920,0x2aa0,0x332f,0x2d22,
0x2122,0x3dfe,0x4122,0x4522,0xd92f,0x4160,0x0020,0x0000, //摇
0x0840,0x0842,0x0881,0xfffe,0x0920,0x2aa0,0x332f,0x2d22,
0x2122,0x3dfe,0x4122,0x4522,0xd92f,0x4160,0x0020,0x0000, //摇
0x0820,0x08c0,0x0b00,0xffff,0x0900,0x2aa0,0x2248,0x2ba8,
0x2e28,0xfaff,0x2b28,0x2aa8,0x6a48,0x2260,0x0240,0x0000 //棒};
uint text2[112]=
{
0x0840,0x0880,0x8900,0x6bff,0x0d01,0x0882,0x7f84,0x4118,
0x41e0,0x4100,0x41fc,0x4102,0xff82,0x4002,0x000e,0x0000, //祝
0x0202,0x0204,0x1208,0x1210,0x1240,0x127e,0xfe89,0x1309,
0x3211,0x1611,0x0a21,0x1261,0x3201,0x0607,0x0200,0x0000, //老
0x0000,0x3ff1,0x0002,0x000c,0xfff0,0x0000,0x4000,0x2ffc,
0x4800,0x4800,0x7fff,0x4808,0x4804,0xdff8,0x4800,0x0000, /师
0x0201,0x4201,0x4202,0x4204,0x4208,0x4230,0x42c0,0x7f00,
0x42c0,0x4230,0x4208,0x4204,0xc202,0x4603,0x0202,0x0000, //天
0x0201,0x4201,0x4202,0x4204,0x4208,0x4230,0x42c0,0x7f00,
0x42c0,0x4230,0x4208,0x4204,0xc202,0x4603,0x0202,0x0000, //天
0x0100,0x4101,0x4102,0x410c,0x7ff0,0x4100,0x4100,0x4100,
0x4100,0x4100,0x7fff,0x4100,0xc100,0x4300,0x0100,0x0000, //开
0x0020,0x0040,0x0380,0x0000,0x0ffc,0x0002,0x8002,0x4002,
0x3802,0x1002,0x0002,0x000e,0x0200,0x0100,0x00e0,0x0000 //心
};
uint Flag=0,bl=0,xt,count=0,num=1,t=0;
uint ysgs; //元素个数int main() //主函数
{
chushihua();
while(1)
{
if(count==1)
TIMA_Delay();
if((*P_IOB_Data|0xfffe)!=0xffff)
{
delay(100);
if((*P_IOB_Data|0xfffe)!=0xffff)
num++;
}
if(num>2)
num=0;
*P_Watchdog_Clear=0x1;
}
}
*****************************************************************************
外部中断EXT1的处理过程
1.记录两次中断的间隔时间
2.计算每列所需要显示的时间,为*P_TimerB赋值,定时器改变*P_IOA_Data的数据,变换所需要显示的数据
3.初始化P_TimerA的数据,从零开始计时
***************************************************************************** void IRQ3(void)
{
if(*P_INT_Ctrl==C_IRQ3_EXT1)
{
*P_TimerB_Ctrl=0x0006;
*P_TimerA_Ctrl=0x0036;
if(Flag==0)
{
Flag++;
}
else
{
panduan();
if(*P_TimerA_Data>0x0400)
{
xt=0xffff-(*P_TimerA_Data/(ysgs));
*P_TimerB_Data=xt;
Flag++;
}
else
{
delay(40);
*P_TimerB_Data=0xfffa;
Flag--;
}
}
*P_TimerA_Data=0x0000;
count=1;
bl=0;
*P_INT_Clear=C_ZhongDuan;
*P_TimerB_Ctrl=C_4096Hz | C_B1;
*P_TimerA_Ctrl=C_4096Hz | C_B1;
}
}
//***************************************************************************** P_TimerB的中断处理程序依次显示数组中的各个变量//***************************************************************************** void IRQ2()
{
if(*P_INT_Ctrl==C_IRQ2_TMB)
{
switch(ysgs)
{
case 48:
display1();
break;
case 64:
display2();
break;
case 112:
display3();
break;
default :
display1();
*P_TimerB_Data=0xfffa;
break;
}
}
*P_INT_Clear=C_IRQ2_TMB;
}
//***************************************************************************** 显示的字段函数
//*****************************************************************************
void display1()
{
if(bl<48)
{
*P_IOA_Data=name[bl];
bl++;
}
}
void display2()
{
if(bl<64)
{
*P_IOA_Data=text1[bl];
bl++;
}
}
void display3()
{
if(Flag)
{
if(bl<56)
bl++;
}
else
{
if(bl<56)
bl=56;
if(bl<112)
bl++;
}
*P_IOA_Data=text2[bl];
}
//***************************************************************************** 延时函数
//***************************************************************************** void delay(int ys)
{
uint i,m;
for(i=0;i<ys;i++)
{
for(m=0;m<ys;m++);
}
}
void delay_50ms(unsigned char t) //每执行一次此函数将会产生一个50ms的延时{
unsigned char j;
for(; t>0; t--)
for(j=6245;j>0;j--);
}
void delay_50us(unsigned char t) //每执行一次此函数将会产生一个50us的延时{
unsigned char j;
for(; t>0; t--)
for(j=19; j>0; j--);
}
//***************************************************************************** //通过判断键值来确定将要显示的字面,并为ysgs(元素个数)赋值
//***************************************************************************** void panduan()
{
switch(num)
{
case 0:
ysgs=48;
break;
case 1:
ysgs=64;
break;
case 2:
ysgs=112;
break;
default:
ysgs=48;
break;
}
}
//***************************************************************************** 初始化各IOA为输出口,IOB为输入口,开启程序中用到的中断
//*****************************************************************************
void chushihua()
{
asm("INT OFF");
*P_IOA_Dir=0xffff;
*P_IOA_Attrib=0xffff;
*P_IOA_Data=0x0000;
*P_IOB_Dir=0x0000;
*P_IOB_Attrib=0x0000;
*P_IOB_Data=0xffff;
*P_INT_Ctrl=C_ZhongDuan;
asm("INT IRQ");
}
第四章结论
此次的设计主要有以下不足:
第一:虽然程序没有错误,但字符字符显示不清晰,,虽然已经有消抖,判断等软件程序的支持,也已经换过几个不同种类的水银开关,仍然不太理想。

分析原因:可能是由于水银开关接触太过灵敏,尚在探索中
第二:当长时间按键时,字符会不断的在已编写的3个字符中循化选择,直到按键松开为止。

第三:开发板+显示模块+电源体积过大不便于携带,且开发成本较高。

通过本次的设计,主要有以下收获:
第一:重温了以前学过的知识,对于C语言、凌阳单片机、电路设计有了更深一步的了解,对于自己以后的工作有很大的帮助。

第二:在搜索资料的过程中,了解到当前嵌入式的发展很迅速,将来肯定会得到广泛的应用,具有很好的应用前景。

而单片机应用则在控制领域不断前进着,更加趋向于贴片化,简单化、模块化。

第三:了解了当前闪光市场的前景,对其未来的发展也有一定的看法:即更加便携化,数字化,在以后的发展过程中会有语音等功能的加入——可以识别人的说话进而自动改变将要显示的字符,当然这还都需要我们的不断努力与尝试。

第四:前瞻:以后的设计过程中会加入诸如语音功能、电机控制等更多的功能。

另外感谢在设计中为我提出建议的侯娟老师、董忠磊、董志林等。

参考文献
[1] 《单片机原理与应用—凌阳SPCE061A》黄军辉、董晓倩、李建波主编
[2]《C语言程序设计基础》,李岩主编
[3]《C微机原理与接口技术》, 汪吉鹏主编陈光军副主编
[4]《计算机电路基础》, 魏则焱编著
[5]《晶体管电路设计》, 铃木雅臣著周南生译
[6]《Protel99SE 设计宝典》, 赵建领等编著。

相关文档
最新文档