|
//陈永飞于2016年1月,调频立体声发射BH1415F芯片的单片机控制
//是用MCS-51单片机实现的,四位共阳数码管显示频率
#include<reg51.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_
#define nop() nop;nop;nop
#define duan P0 //宏定义数码管段选端口
sbit SCL=P3^7; //接BH1415F芯片的时钟引脚
sbit SDA=P3^6; //接BH1415F芯片的数据引脚
sbit CE=P3^5; //接BH1415F芯片的锁存引脚
sbit led1=P2^0; //数码管千位位选
sbit led2=P2^1; //数码管百位位选
sbit led3=P2^2; //数码管十位位选
sbit led4=P2^3; //数码管个位位选
sbit key1=P1^1; //频率加按键
sbit key2=P1^0; //频率减按键
uint pin_li=888;
uchar code tab[]={ 0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
};
///////////////////////////////////////////////////////////////////////////
void wriet_BH1415(uint shu)
{
uchar x;
shu=shu|0x0800; //方式控制为立体声
CE=1;
nop();
for(x=0;x<16;x++)
{
SDA=shu&0x01;
nop();
SCL=1;
nop();
SCL=0;
shu>>=1;
nop();
}
CE=0;
SDA=0;
}
//////////////////////////////////////////////////////////////////////////////////
void delay()
{
uchar a;
for(a=0;a<100;a++);
}
/////////////////////////////////////////////
void desplay(uint k)
{
duan=tab[k/1000];
led1=0;
delay();
led1=1;
duan=tab[k%1000/100];
led2=0;
delay();
led2=1;
duan=tab[k%100/10]&0x7f; //点亮这位小数点
led3=0;
delay();
led3=1;
duan=tab[k%10]|0x80; //关小数点
led4=0;
delay();
led4=1;
}
/////////////////////////////////////////////////////
void key()
{
if(!key1)
{
delay();
if(!key1)
{
pin_li--;
if(pin_li<760)pin_li=1088;
wriet_BH1415(pin_li);
}
}
if(!key2)
{
delay();
if(!key2)
{
pin_li++;
if(pin_li>1088)pin_li=760;
wriet_BH1415(pin_li);
}
}
}
///////////////////////////////////////////////////
void main()
{
P2=0;
P3=0;
P2=0;
wriet_BH1415(pin_li);
while(1)
{
key();
desplay(pin_li);
}
}
|
|