?????? case 0x77: break; } }
3.1.3 BH1415F控制方法
为了更加直观显示控制和校验错误,这里首先输入一个最简单的发射频率,例如99MHZ,因为从单片机的10脚发射出去,即位发射,要发送一个这个频率数据,要把这个频率先算为十六进制,然后转为二进制,即D0到D10这11个发射频率数据位,然后加上外面的5个控制位,然后按位,一位一位的发送出去,发送十六个位出去。接上示波器显示,可以清晰的看到十六位高低电平组合发送出去,这就是控制BH1415F的控制数据。具体方法如下:
sbit K0=P3^0;sbit K1=P3^1;sbit K2=P3^2;
void bh99(void) //频率数据调用函数,被调用在主程序里的每个按键后面 {K1=0; //脉冲为低电平,方便出现上升沿时锁存数据 K2=1; //使能端允许传送 K0=1; //发送的数据位 CUN(); //延时5us K0=0; //发送的数据位 CUN();
?? //连续这样发送16次位数据 K2=0; //禁止传送 }
程序流程图如下:
第 13 页 共 29 页
图3.3 BH1415F程序控制流程图
也可以加入步进部分进行微调频率,但这个需要把上面的BH1415的控制程序全部改写,属于改良部分。
即BH1415F的新控制程序如下:
void bh99(void) //99.0MHZ的按键调用程序 { unsigned char Data=0x4B5E;
bit bData;
if(Z=1) //有步进键 {Data=+0x1; // 加0.1MHZ while(1)
{ for(i=0;i<16;i++)
{ bData=(bit)Data>>i; //再按位发
}}
SendData(bData) ; //调用按位发送程序
else
for(i=0;i<16;i++)
{ bData=(bit)Data>>i; //无步进键直接按位发
第 14 页 共 29 页
SendData(bData); //调用按位发送子程序
}}}
void SendData( bit bData )
{ CE=1; //使能端,为1允许写
BitData=bData; //数据端,发送bData数据到DA端并接受 CLK=0;
CUN(); //延时 CLK=1; //上升延锁存 CUN(); }
3.2程序优化
通常所说的编程效率是指:占用的内存空间更少,运行的指令周期更少,编程省时省力。针对本设计中的单片机程序,可从以下几个方面对程序进行优化,以提高编程效率。
(1)合理安排操作顺序,因为AT89S52内存储空间有限,在头文件里定义了的程序,在主程序里调用是尽量放在mian()前面使用,这样可以避免再次重复定义,而不需要重新要为其分配存储空间;
(2)因AT89S52是8位机, 须尽可能使用最小的数据类型,对具有“char” 类型的对象操作比对“int”或“long”类型的操作要方便的多。
4调试
在调试过程中,总共分为四部分调试:液晶显示模块、4X4键盘、BH1415F调试、整体调试。
4.1 液晶显示模块的调试
在测试液晶1602显示模块是否正常工作时,首先编写了一个简单的固定显示程序, 但是在显示的过程中发现液晶的并没有显示,重复检查了程序,然后查阅了资料,发现在液晶的第3管脚上的10K电位器应该进行调节,这样才能显示,当用螺刀进行调节后,液晶点阵显示出来。但是点阵是全部显示了,并没有显示出我需要的字,于是重新检查了程序和电路,发现RS和RW本来应该分别接P2_7和P2_6,这两个管脚在电路图上标号写反了,程序上也跟着写反,在程序里改过后,发现它可以正常的显示我需要的了。其后,液晶背光灯不能正常显示,检查了电路,液晶15脚接电源同时要接个10欧姆电阻,但接的电阻很大,10K电阻,导致背光灯无法正常工作。判断液晶是否正常工作的程序如下:
首先定义需要在液晶上显示的字符
#define LCM_RS P2_7 //寄存器 定义LCD引脚 #define LCM_RW P2_6 //读写信号 #define LCM_E P2_5 //使能端
第 15 页 共 29 页
void Delay5Ms(void); void Delay400Ms(void);
void LCMInit(void);//LCD初始化
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);//显示字符串
unsigned char code name [] = {%unsigned char code name1[] = {\void main(void)
{Delay400Ms(); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化
DisplayListChar(0, 0, name);//显示 DisplayListChar(0, 1, name1); }
4.2 4X4键盘的调试
首先检查P1口的前四位和后四位是否分别为低电平和高电平。无误后,再检查测试键盘是否都为正常的时候,首先编写了如2.1.2介绍的键盘程序,但是在按键过程中,第4个键位始终不能控制,而其他键均正常,通过对硬件检查,发现它的2、3脚和1、4脚为通,正常;1、2脚为开路,也属于正常;但按键下,发现1、2脚仍然为开路,而正常情况下应该接通。因此判断是硬件中的第4个按键出现了断键问题。开始想在它的1、2脚上直接接上一个导线,应该可以显示,事实上确实,但是由于它一直导通,导致其他按键失效。解决方案:撤换按键。
4.3整体调试
在整体调试之前,首先对液晶和键盘做了个简单的测试,检验单片机最小系统、液晶
和键盘是否能够很好的配合使用,再次检验它们发送的波形是否正确,高低电平波形是否是有用的,结果并没有发现什么问题。由于只要检查发送的频率数据BH1415F是否正确的接受到,给了一个死程序死循环给单片机发送出去,检测示波器是否收到一个频率变换的正弦波形,注意调到AC挡。如果是的话那就基本上有发射数据给BH1415F,而它也有收到数据。接下来就是把几个频率的发送数据均加到按键程序后,然后逐个操作按键看是否有频率变化。如果符合想象中的显示结果,在BH1415F接一个MP3,在旁边放一个收音机,把要发射的频率预先调到收音机中,然后点开电源开关,确定频率点是否正确和接受信号有没有杂音,如果有杂音,调节电感L,直到效果声音清晰为止。这样就可以控制发射模块从而能够听到想要听到的音乐了。
第 16 页 共 29 页
结 论
本设计采用单片机AT89S52作为中央控制单元和计算器件,充分发挥了单片机软、硬件结合的特点,因此电路结构简单、性能可靠、方便扩展等。同过这次设计也基本掌握了小功率调频发射的原理和设计经验。通过对这个设计的研究,掌握了调频控制,稳定频率等方面的知识,熟悉了单片机的应用,对于液晶显示的控制也有了一定程度的掌握。相信以后遇到调频方面的和单片机控制方面的自己会更加的得心应手。
参考文献
[1] 郑郁正李飞 文斌 杨明欣 方睿 《单片机原理及应用》 四川大学出版社 2003.9 [2] 高如云 《通信电子线路》 西安电子科技大学出版社 2003.4 [3] 调频发烧友网站www.fmsky.net [4] 调频酷站www.fmku.com
第 17 页 共 29 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库车载MP3无线调频器ljd(4)在线全文阅读。
相关推荐: