另外比较有用的就是移位了,因为在数字电路中都是以位为单位的,每一个CLK只能发送一个位的标识,所以一个字节的数据需要分8次传输才能完成一个字节数据的发送,所以在操作的时候就需要用到移位了。我们首先循环8次,然后每次都&0x80,然后再向右移动7位就能获取最高位的数据,最后在每次循环后把数据移一位,就能把整个字节的数据取出来,这是一个非常好的方法来获取数据。文献综述
2。2 Keil
这个开发工具是51单片机经常使用的开发工具,我们在这个keil上新建工程,选择好对应型号的单片机后,我们就可以开发我们自己的应用了。这个keil是通过C语言来编写程序的,所以我们需要遵循C语言的编程方法[1]。Keil也会根据C语言来判断你的语法是对的,还是错的,所以我们可以大胆的尝试自己编写的语言。当我们把功能代码编写完成后,keil提供了编译按钮,当单击后,程序便会自动编译成hex,十六进制的文本。这个是供单片机使用的机器码文件,所以这个文件不生成,我们的工程就不算完成。
当编译成功后,keil会在下面提示warn和fail的两个提示,但没有错误后代码编译成功,有警告的话可以处理也可以不处理。警告多就代码你的C语言不够的扎实。在这个上面还会有内存使用的情况。Data后面的数字就是内存在编译成功后使用的字节数。通过单片机会表明这个单片机有多少的rom和ram。当定义的变量占用内存超过ram则会编译失败,提示你空间不足[3]。这个是keil非常好的地方,这样我们就能控制我们代码中的内存了。
Keil现在推出了很多版本,在中国可以通过破解来使用。基本的使用上面已经介绍完了,下面是本次设计的介绍。
3 系统需求及设计方案
3。1 电源提供方案的选择
单片机的运行需要稳定的电源,通过在单片机的手册中会标出单片机对电源范围的值,通过的电源会允许有些许的波动,但是不能有太大的波动,通过太大电压的电源会使得单片机烧毁,而小电压的电源会供给不了足够的电流而使得单片机不能正常工作,所以我们需要选择比较良好的电源电路。电源的通过有两个方案,一种是通过220电源接电源转换芯片来达到我们预期的电压,还有就是通过电池来实现我们需要的电压。
上述两种方案都是目前比较流行的电源供给方案。第一种比较持久,第二种比较便捷,能进行携带。因为我们LED屏幕会造成很大的能耗,所以选择第一种,我们可以选择220电源来实现电源的供给。
3。2 LED驱动芯片的选择
LED可以分为很多种类通常是点阵和数码管。因为我们要显示文字,所以使用了点阵。综合资料,然后在众多的驱动芯片中选择了MAX7219。下面会详细介绍MAX7219的一些特性。
3。3 设计方案框图
通过内存储存一个二维数组来记录LED点阵上面显示的字体数据,然后通过MAX7219把数据显示在LED点阵上面。本设计可以有三种模式进行显示,一种是闪烁,另外一种是移动,最后一种是静态显示。每次切换需要在android手机上传入模式和数据,当根据协议从蓝牙传入单片机后,单片机会把数据储存在flash中,并且及时改变现在的显示内容。在断电后,单片机会从flash中提取之前的数据进行显示,所以断电不会丢失数据。流程图如图3-1所示。来~自,优^尔-论;文*网www.youerw.com +QQ752018766-
图3-1 系统设计框图
4 硬件电路设计
4。1 STC89C52简介
在本次设计中,我们使用了比较常见的以msc-51为核心的单片机,这个单片机比传统的51单片机做出了很多的改善,更加能方便我们的使用。其内部包含了512B的ram,这为我们储存大量的临时编程提供了便利。在编程方面,这款芯片提供了8K的编程flash,使得我们的程序能完成很复杂的逻辑和更加多样化的功能。在IO口上,这个单片机有40个可以使用的引脚,但是有些引脚需要被最小电路占用,还有4Kb的EEPROM作为我们这次设计断电保存的地方。