//陈永飞于2016年1月,调频立体声发射BH1415F芯片的单片机控制 //是用MCS-51单片机实现的,四位共阳数码管显示频率 #include #include #define uchar unsigned char #define uint unsigned int #define nop _nop_ #define nop() nop;nop;nop #define duan P0 //宏定义数码管段选端口 ***it SCL=P3^7; //接BH1415F芯片的时钟引脚 ***it SDA=P3^6; //接BH1415F芯片的数据引脚 ***it CE=P3^5; //接BH1415F芯片的锁存引脚 ***it led1=P2^0; //数码管千位位选 ***it led2=P2^1; //数码管百位位选 ***it led3=P2^2; //数码管十位位选 ***it led4=P2^3; //数码管个位位选 ***it key1=P1^1; //频率加按键 ***it 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); } } |
更多回帖