盐城工学院本科生毕业设计说明书(2011)
表2-2 CC1100引脚说明
2.3 Keil C51简介
本次设计使用C语言编程。C51的编程语言常用的有两种:一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高,但可读性却并不强,复杂一点的程序就更是难以读懂。而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性代码的编写问题。从开发周期来说,中大型的软件编写采用C语言的开发周期通常要短于汇编语言很多。综合C语言以上的优点,使用C语言是一种非常好的选择。使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KeiluVision2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS—51架构的芯片,集编辑、编译、仿真等丁一体。同时,它还支持PLM、汇编和C语言的程序设计,界面同常用的微软VC十十的界面相似,界面友好,易学易用,在调试程序、软件仿真方面也有很强大的功能。Keil C51是美国Keil Software公司出品的8051系列兼容单片机C语言软件开发系统。与汇编语言相比,C语言在功能、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,为全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率是非常之高的,多数语句生成的汇编代码很紧凑,容易理解。
C51是一种专门为8051单片机设计的高级C语言编译器,支持符合ANSI标准的C语言程序设计,同时针对8051单片机的自身特点做了一些特殊扩展。下面来简单介绍一下c51与标准C语言的区别:C51编译器除了支持ANSI C(标准C)的关键字外,还根据805I单片机自身的特占扩展了如附录A所示的关键字。C51编译器不支持16位宽的字符,而ANSI标准提供对多字节国际字符集的支持;C51默认值不支持函数递归调用,需要进行递归调用的函数必须声明为再入函数。再入函数的局部数据和参数被放人再人栈中,从而允许进行递归调用;C51编译器支持ANSI C中的大部分函数,但是一些不适用于嵌入式系统应用的库函数则没有包含到C51编译器中。同时,它也对函数库做了一些扩 展,定义了一部分非ANSI标准函数。
3 硬件电路设计
3.1 主机模块
主板硬件由CPU、数码管、无线模块和蜂鸣器组成。主板工作的时候,可以接受 9
单片机无线数据传输应用设计
遥控器的控制信号,也可以显示当前的状态。CPU也可以利用PWM输出,演奏出不同的音乐。电路图如附录3所示。
3.1.1 CPU控制无线模块收发数据
CC1100是一种单片的无线收发器,在一个无线通信系统里,CC1100需要与一个作为控制器件的单片机及若干被动组件一起使用,才能成为一个最简单的无线通信系统,C8051F310单片机可通过SPI接口控制CC1100的主要操作参数,并同CC1100进行通信,SPI标准接口包括MOSI、MISO、CLK。主机用CLK与从机时钟同步。CC1100可以通过SPI总线设置芯片的工作模式,并实现读写缓存数据、读写状态寄存器等功能。通过控制FIFO和FIFOP引脚接口的状态可设置发射或者接收缓存器,这样通过SPI接口,就将单片机和射频芯片连接了一起,成为了一个可以自由控制收发的无线通信系统。
CC1100内部有大量寄存器需要用CPU进行操作和配置,这样CC1100模块才能进行正常的收发。而CC1100模块与CPU是采用SPI口进行通信的,所以只需要把CC1100的SPI口和另外一条状态引脚与CPU相连即可对CC1100进行控制。只需将CC1100的SPI口接到CPU的任意4个引脚上即可,但最好能接在CPU的硬件SPI口上。另外,再将CC1100的GDO0或GD02也接在CPU的任意引脚上。如果想要用中断处理收发数据或是想做无线唤醒的话,这个引脚也必须接在CPU的外部中断引脚上。如图3-1所示。
图3-1 硬件连接
在画电路图时,将C8051F310的P3.2、P3.3、P3.4分别设为SCK、MISO、MOSI与CC1100的相应引脚相连。定义P0.6为INT0,与CC1100的GDO口连接。因当CSn为高时为可选的一般输出脚,则可在软件程序中设CSn为高电平,将这个引脚连到C8051F310的任意引脚上。
在主机模块中,CPU控制无线模块接受数据。而使用CC1100需要少量的外部元件。如图3-2 所示。
10
盐城工学院本科生毕业设计说明书(2011)
R1是偏阻器,用来设置一个精确的偏电流。C5, C4, L3 和 L4形成一个平衡转换器,用以将CC1100上的微分RF端口转换成单端RF信号(C6也用在直流模块上)。同一个合适LC网络一起,平衡转换器元件也将阻抗转换以匹配50欧的天线(或电缆)。晶体振荡器使用一个带2个负载电容(C8和C7)的外部晶体。附加外部元件能用来改进特殊应用中的性能能量供给必须在靠近供给引脚处恰当地退耦。退耦电容器的放置及大小对于达到最优性能是非常重要的。
单片机无线数据传输应用设计
图3-3 蜂鸣器电路
演奏音符的同时,同时数码管也要显示相应数字。本设计采用LED数码管。
LED数码管是利用多个LED组合而成的显示设备,可以显示0~9等10个数字和某些字母,在许多的数字系统中作为显示输出设备,使用非常广泛。它的结构是由发光二极管构成的a、b、c、d、e、f和g七段组成,并由此得名,实际上每个LED还有一个发光段dp,一般用于表示小数点,所以也有少数的资料将LED称为八段数码管。
LED内部的所有发光二极管有共阴极接法和共阳极接法两种:一种是将LED内部所有二极管阳极接在一起并通过com引脚引出,将每一个发光二极管的另一端分别引出到对应的引脚,称之为共阳极LED显示器。如图3-4所示。
图3-4共阳极数码管内部结构
LED共阳极接法,corn端接+5V电压,其他引脚端各通过一个限流电阻接到单片机驱动电路端,当各段输入端为逻辑“1”,对应的LED不亮;各段输入端为逻辑“0”时,对应LED才发亮。使用时要根据LED正常发光需要的电流参数估算限流电阻取值。电阻取值越小,电流大,LED会更亮,但要注意长时间过热使用会烧坏LED。 LED用于显示数字、字母或符号时,必须将要显示的内容转换为LED对应七段码的信息,共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。当发光二极管导通时,相应的笔划段发亮,即通过点亮不同的LED字段,可显示数字0,1,?,9和A,b,C,d,E,F等不同的字符及自定义的一些简单符号。8个笔划段dp g f e d c b a对应于一个字节(8位)的D7 D6 D5 D4 D3 D2 D1 DO,于是用8位二进制码就可以表示要显示字符的字形代码。
12