引言
在嵌入式系统市场中,尽管32位处理器炙手可热,却始终无法完全取代8位单片机,二者各有千秋[1]。目前,国内院校单片机课程大都以51单片机为主线进行讲授,但51系列单片机资源有限,难以实现彩色图像的显示,这造成彩屏模块相关章节教学和实验的缺失。为解决此问题,本文采用大容量单片机STC89C516RD+作为控制核心,利用笔者研制的单片机教学实验仪PHOENIX325作为实验平台,设计了一款数码相框,可实现特定格式彩色照片的显示,有助于学生理解彩屏控制、SD卡文件系统等内容。同时,为增强数码相框的功能,提高教学的趣味性,在数码相框上设计集成了一款小巧、性能优异的FM收音机。图1为系统框图。
图1 系统框图
1器件选择
1.12.4英寸彩屏模块
彩屏模块裸屏控制器为ILI9328,支持8位和16位两种数据模式,屏幕大小为2.4英寸,分辨率为320×240,数据线为44针,与PHOENIX325实验仪之间的接口为20引脚单排针,可以直接使用LCD12864接口。
1.2单片机
一张320×240分辨率的普通BMP图片大小一般为20~30 KB,编程时生成的数组大小也很可观[2-3],这就要求单片机具备足够大的程序存储器,还要有利于数据交换的足够大的RAM,因此普通51单片机是不能胜任的。
STC89C516RD+单片机是深圳宏晶公司的一款产品,拥有64 KB的FLASH和1 KB的RAM,与SD卡配合,可以轻松满足用彩屏显示照片的需要。
1.3SD卡
SD卡(Secure Digital Memory Card)是一种基于半导体FLASH的新一代记忆设备,它拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性[4-5]。SD卡支持SPI、1位SD、4位SD三种传输模式,利用SD卡配合TFT彩屏,编程使彩屏可显示BMP图片,从而实现数码相框功能。
SD卡的作用是存储分辨率为320×240的BMP格式照片,采用SPI方式与单片机接口,重点是SD卡与单片机的通信和电平匹配。
1.4旋转编码器
旋转编码器是一种用来测量转速、计数、定位的装置,常见的旋转编码器通过光电转换,可将输出轴的角位移、角速度等机械量转换成相应的电脉冲以数字量输出。本文选用的旋转编码器又称“旋转飞梭”,型号为EC11。旋转时输出两组脉冲信号A相和B相,二者相位相差90°,通过这两组脉冲不仅可以测量转速,还可以鉴相、计数[6]。除此之外,按下编码器手轮时还可输出一路D相脉冲,作为复位信号。
1.5FM器件
FM器件选用国产数字收音芯片RDA5807,负责电台信号的接收与输出,该器件具有灵敏度高、噪声小、抗干扰能力强、外接元件少、体积小等特点,兼容76~108 MHz全球FM频段(包括日本76~91 MHz和欧美87.5~108 MHz),含有I2C总线和SPI串行总线接口,支持外部基准时钟输入方式,支持高功率32 Ω负载音频输出,直接耳机驳接,无需外接音频驱动放大[7]。
2电路设计
电路设计的重点是TFT模块、SD卡、FM模块等单元的设计,由于彩屏和SD卡均为3.3 V供电,因此设计时除考虑电平匹配外,还要注意不能忽略上拉电阻的布置。
2.1TFT模块单元
PHOENIX325实验仪已配置有20针的LCD12864接口,彩屏模块采用16位接口模式1,因此可以直接利用该接口。TFT模块原理图略——编者注。
2.2SD卡单元
SD卡与单片机之间是SPI通信方式,为保证可靠性,上拉电阻必不可少。如图2所示,SD卡片选引脚为CS、数据输入引脚为DI、时钟引脚为CLK、数据输出引脚DO经10 kΩ电阻上拉至3.3 V,并分别与单片机P23、P15、P16、P17相连。
图2 SD卡单元
2.3旋转飞梭和红外接收单元
旋转飞梭EC11共5个引脚,其中C、E接地,A、B、D相信号经10 kΩ电阻上拉至5 V,分别与单片机P10、P11、P12引脚相连,单片机依据输入信号判断旋转飞梭的状态,再向TFT及FM模块发出相应指令。
红外接收头1038的输出引脚接至单片机INT0,如图3所示。单片机的INT1引脚连接一个快捷按键,用来切换对TFT和FM的控制。
图3 旋转飞梭和红外接收电路
2.4FM单元
采用RDA5807器件的I2C总线连接模式,I2C数据线与单片机P26引脚相连,I2C时钟线与单片机P27引脚相连,RDA5807的7、8引脚接耳机或小型音箱,如图4所示。
图4 FM模块原理图
3软件编程
3.1编程重点
编程重点在于TFT彩屏设置、SD卡文件系统的管理及FM模块的驱动,其余程序(如旋转飞梭及红外遥控的解码、SPI总线驱动等)略去,读者可自行查阅相关文献。
3.2TFT彩屏设置
彩屏正常显示的前提是正确初始化,完成各寄存器的配置,程序清单略——编者注。
除此之外,还要设置扫描模式、扫描原点、扫描区域、显示分辨率等参数。运行时,为提高显示速度,可将晶振更换为24 MHz。
3.3SD卡数据读取
SD卡是照片存储的载体,其编程关键是对SD的初始化、FAT系统的初始化、块扇区的读写,以及SD卡文件结构的掌握,路径搜索文件的程序清单略——编者注。
3.4RDA5807驱动程序
3.4.1寄存器读写操作
RDA5807器件I2C接口中寄存器地址不可见,但其拥有一个固定的起始寄存器地址,写操作时为02H,读操作时为0AH。注意,RDA5807器件在单片机写入操作时会返回一个ACK信号;而在读操作时,如果RDA5807接收到单片机发出的NACK信号,则终止读操作[8]。
void RDA5807_WR(void){//连续写寄存器子函数
unsigned char i;
I2C_START();//操作开始
I2C_WR(0x20);//发命令字节,写操作bit0=0
for(i=0; i<8; i++)//寄存器连续写操作
I2C_WR(RDA_REG[i]);
I2C_STOP();//结束操作
}
void RDA5807_RD(unsigned char *reg_buf){//连续读寄存器子函数
I2C_START();//操作开始
I2C_WR(0x21);//发命令字节,读操作bit0=1
reg_buf[0] = I2C_RD(I2C_ACK);//读取寄存器0AH
reg_buf[1] = I2C_RD(I2C_ACK);//读取寄存器0BH
reg_buf[2] = I2C_RD(I2C_ACK);//读取寄存器0CH
reg_buf[3] = I2C_RD(I2C_NACK);//MCU发送NACK信号
I2C_STOP();//结束操作
}
3.4.2初始化子函数
模块初始化主要完成晶振设置、收音开关、音效模式等功能的设置,涉及到的寄存器为02H。
void RDA5807_PWR(void){//模块上电初始化子函数
delay_ms(50);//延时
RDA_REG[0] = 0x00;//设置02H寄存器,晶振32.768
RDA_REG[1] = 0x02;//置位02H寄存器bit1,软件复位
RDA5807_WR();//将设置内容写入寄存器
delay_ms(10);
RDA_REG[0] = 0xd0;//设置收音开、立体声、重低音
RDA_REG[1] = 0x01;//置位02H寄存器bit0,芯片上电
RDA5807_WR();//将设置内容写入寄存器
}
3.4.3搜台子函数
搜台使能由02H寄存器的bit8控制,搜台成功后,0AH寄存器的bit14置1,当前频点可从0AH寄存器读出,当前音量则位于05H寄存器的低4位。
void RDA5807_SEEK(void){//收音模块搜台子函数
unsigned int chan;
unsigned charreg_data[4] = {0x00, 0x00, 0x00, 0x00};
RDA_REG[3] &= 0xef;//复位03H寄存器bit4,禁用调谐
RDA_REG[0] |= 0x01;//置位02H寄存器bit8,使能搜台
RDA5807_WR();//将设置内容写入寄存器
while(0==(reg_data[0]&0x40)){
//搜台成功,0AH寄存器bit14置1
delay_ms(20);
RDA5807_RD(reg_data);//读取内部状态
}
chan=reg_data[0]&0x03;//取0AH寄存器bit9、bit8
chan=reg_data[1]|(chan<<8);//取0AH寄存器bit0~bit9
chan = chan << 6;//左移6位,bit6~bit15为当前频点
RDA_REG[2]=(chan>>8)&0xff;
//工作频点高8位存03H寄存器高8位
RDA_REG[3]=(chan&0xff);//工作频点低2位存03H//寄存器bit6、bit7
}
程序编译时需要在Keil μVision中设置存储器模式为“Large”。编译成功后,将生成的HEX文件烧写到STC89C51单片机中运行。
4测试
图5是设计的数码相框在PHOENIX325上应用的实况。数码相框和FM模块均可由旋转飞梭和红外遥控进行控制,控制对象通过INT1快捷键来选择,按下INT1按键,程序对数码相框进行控制,再按下INT1按键,程序对FM收音机进行控制。
图5 TFT模块在PHOENIX325实验仪上的应用
程序默认数码相框为自动运行模式,逐一显示SD卡中的照片;当转动一下旋转飞梭手轮时,程序退出自动运行进入手动模式,随着旋转飞梭的转动切换照片;按下旋转飞梭手轮,程序重新进入自动运行模式;按下遥控器数字键,程序则进入红外遥控模式。
再按一下INT1快捷键,程序转而对FM模块实施控制,此时按下旋转飞梭按钮,进入搜台模式,程序自动搜索信号最强的频点;当转动旋转飞梭手柄时,进入音量调节模式,音量随着旋转飞梭的旋转而变化;当用红外遥控时,可自由定义遥控器按键,实现选台、音量变大、音量变小、静音等功能。
结语
经过6个班次的课堂教学和实验表明,本文设计的数码相框控制方式灵活、显示效果优异、切换速度快捷;FM模块结构简单、音质出色、搜台丰富,效果令人满意。能使彩屏显示走进51单片机的课堂,具有一定的趣味性,既锻炼了动手能力,又提高了学习效果,对51单片机的教学和实验起到了较好的补充,具有较好的教学和应用前景。