标签:
本方案采用89S52做为主控芯片,LC72131+LA1845N做为收音模块,支持按键控制,红外线遥控控制,也可通过串口上位机控制,可以通过计算机并口更新单片机软件程序。
音量用两块DS1804控制,频率信息用一块1602液晶显示。
单面板,飞线很多,呵呵。
硬件方案.rar(Protel99)
PC端控制软件.rar(VC++7.1,即Visual Stdio .Net 2003)
本方案的单片机软件使用C语言编写(Keil uVision3),LC72131芯片的驱动稍微麻烦,他使用SPI总线与单片机芯片通讯:
//SPI总线数据传输
//首先发送高位,延时必须大于1.5us。
void WriteLC72131(INT32 _DATA)
{
data INT8 i=0;
PIN_CE=0; //CE默认为低电平
PIN_CL=1; //CL默认为高电平
for(i=1;i<=32;i++)
{
PIN_CL=0; // CL产生下降沿
Delay_2CP(1);
if(_DATA & 0x80000000)
{
PIN_DI=1;
}
else
{
PIN_DI=0;
}
PIN_CL=1; // CL产生上升沿
Delay_2CP(1);
if(i==8)
{
PIN_CE=1;
Delay_2CP(1);
}
_DATA=_DATA<<1;
}
PIN_CE=0;
}
//封装了输入模式1的数据
extern idata union _IN1_DATA
{
INT32 _IN1_DATA_32;
struct _IN1_DATA_BITS
{
INT8 Address :8;
INT16 Frequency :16;
INT8 R3 :1;
INT8 R2 :1;
INT8 R1 :1;
INT8 R0 :1;
INT8 XS :1;
INT8 CTE :1;
INT8 DVS :1;
INT8 SNS :1;
}IN1_DATA_BITS;
}IN1_DATA;
//封装了输入模式2的数据
extern idata union _IN2_DATA
{
INT32 _IN2_DATA_32;
struct _IN2_DATA_BITS
{
INT8 Address :8;
//位域:对于每个独立的位,C语言要求低位写在前边;
//字节顺序不受影响,仍然是高字节在前。
INT8 B04 :1;
INT8 B03 :1;
INT8 B02 :1;
INT8 B01 :1;
INT8 IO2 :1;
INT8 IO1 :1;
INT8 IOC2 :1;
INT8 IOC1 :1;
INT8 DZ1 :1;
INT8 DZ0 :1;
INT8 UL1 :1;
INT8 UL0 :1;
INT8 DOC2 :1;
INT8 DOC1 :1;
INT8 DOC0 :1;
INT8 DNC :1;
INT8 TEST2 :1;
INT8 TEST1 :1;
INT8 TEST0 :1;
INT8 IFS :1;
INT8 DLC :1;
INT8 TBC :1;
INT8 GT1 :1;
INT8 GT0 :1;
}IN2_DATA_BITS;
}IN2_DATA;
完整源代码:单片机软件.rar
备注:该方案是学习51单片机时的习作。
推荐一个这方面的技术大牛:Ningpanda工作室 http://ningpanda.21ic.org
http://blog.21ic.com/user1/2339/archives/2008/52580.html
51单片机控制的收音机(带串口,遥控,芯片89S52+LC72131+LA1845N)
标签:
原文地址:http://www.cnblogs.com/dgx/p/5491494.html