BH1415F調(diào)頻臺(tái)控制C程序 使用keilC51 通過(guò)調(diào)試
//使用AT89C52單片機(jī),12MHz晶振,用共陽(yáng)四位LED數(shù)碼管
//P0口輸出段碼,P2口掃描
//#pragmaSRC(d:aa.asm)
#include“reg52.h”
#include“intrins.h”//_nop_();延時(shí)函數(shù)用
#defineDisdataP0//段碼輸出口
#definedisCANP2//掃描口
#definekeyioP1//鍵盤(pán)接口
#defineucharunsignedchar
#defineuintunsignedint
sbitDA=P3^0;//數(shù)據(jù)輸出
sbitCK=P3^1;//時(shí)鐘
sbitCE=P3^2;//片選
sbitDIN=P0^7;//LED小數(shù)點(diǎn)控制
sbitmonolamp=P3^3;//立體聲指示燈
uinth;//延時(shí)參量
//
//掃描段碼表
ucharcodedis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/*共陽(yáng)LED段碼表“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“-”*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列掃描控制字
uintdataf_data={0x00},f_data1;//頻率數(shù)據(jù),數(shù)據(jù)運(yùn)算時(shí)暫存用
uchardatadisplay[4]={0x00,0x00,0x00,0x00};//顯示單元數(shù)據(jù),共4個(gè)數(shù)據(jù)
ucharbdatacondata=0x08;//1415控制字高5位,開(kāi)機(jī)為立體聲狀態(tài)
sbitmono=condata^3;//單聲道/立體聲控制位
uchardataconcommand[2],keytemp;//合成后的2個(gè)控制字,鍵值存放
//
/**********************************************************************/
//
//
/***********11微秒延時(shí)函數(shù)**********/
//
voiddelay(uintt)
{
for(;t》0;t--);
}
//
/***********LED顯示動(dòng)態(tài)掃描函數(shù)**********/
scan()
{
chark;
for(k=0;k《4;k++)//四位LED掃描控制
{
Disdata=dis_7[display[k]];
if(k==1){DIN=0;}
discan=scan_con[k];delay(90);discan=0xff;
}
}
//
//
/***********頻率數(shù)據(jù)轉(zhuǎn)換為顯示用BCD碼函數(shù)**********/
turn_bcd()
{
display[3]=f_data/1000;if(display[3]==0){display[3]=10;}//最高位為0時(shí)不顯示
f_data1=f_data%1000;
display[2]=f_data1/100;//求顯示十位數(shù)
f_data1=f_data1%100;
display[1]=f_data1/10;//求顯示個(gè)位數(shù)
display[0]=f_data1%10;//求顯示小數(shù)位
}
/***********控制字合成函數(shù)**********/
command()
{
concommand[1]=f_data/256;
concommand[0]=f_data%256;
concommand[1]=concommand[1]+condata;
}
/***********寫(xiě)入1個(gè)字節(jié)函數(shù)**********/
write(ucharval)
{
uchari;
CE=1;
for(i=8;i》0;i--)
{
DA=val&0x01;//
_nop_();_nop_();_nop_();_nop_();
CK=1;
_nop_();_nop_();_nop_();_nop_();
CK=0;
val=val/2;
}
CE=0;
}
/***********控制字寫(xiě)入1415函數(shù)**********/
w_1415()
{
write(concommand[0]);
write(concommand[1]);
}
//
//*************頻率涮新*****************//
fup()
{
turn_bcd();//顯示BCD碼轉(zhuǎn)換
command();//合成控制字
w_1415();//寫(xiě)入1415
}
//
/***********查鍵函數(shù)**********/
read_key()
{
keyio=0xf0;
keytemp=(~keyio)&0xf0;
if(keytemp!=0)
{
keytemp=keyio;
keyio=0x0f;
keytemp=keytemp|keyio;
while(((~keyio)&0x0f)!=0);//
switch(keytemp)
{
case238:{f_data++;if(f_data》1099){f_data=1099;}fup();break;}//加0.1MHZ
case222:{f_data--;if(f_data《800){f_data=800;}fup();break;}//減0.1MHZ
case190:{mono=~mono;if(mono){monolamp=0;}elsemonolamp=1;fup();break;}//立體聲/單聲道轉(zhuǎn)換
case126:{f_data=1090;fup();break;}//預(yù)置109.0MHZ
case237:{f_data=1070;fup();break;}//預(yù)置107.0MHZ
case221:{f_data=1050;fup();break;}//預(yù)置105.0MHZ
case189:{f_data=1030;fup();break;}//預(yù)置103.0MHZ
case125:{f_data=1000;fup();break;}//預(yù)置100.0MHZ
case235:{f_data=970;fup();break;}//預(yù)置97.0MHZ
case219:{f_data=950;fup();break;}//預(yù)置95.0MHZ
case187:{f_data=930;fup();break;}//預(yù)置93.0MHZ
case123:{f_data=900;fup();break;}//預(yù)置90.0MHZ
case231:{f_data=870;fup();break;}//預(yù)置87.0MHZ
case215:{f_data=850;fup();break;}//預(yù)置85.0MHZ
case183:{f_data=830;fup();break;}//預(yù)置83.0MHZ
case119:{f_data=800;fup();break;}//預(yù)置80.0MHZ
default:{break;}//
}
}
keyio=0xff;
}
//
//
//
/**************主函數(shù)****************/
main()
{
Disdata=0xff;//初始化端口
discan=0xff;
keyio=0xff;
DA=0;//bh1415禁止
CK=0;//
CE=0;//
for(h=0;h《4;h++){display[h]=8;}//開(kāi)機(jī)顯示“8888”
for(h=0;h《500;h++)
{scan();}//開(kāi)機(jī)顯示“8888”2秒
f_data=1000;//預(yù)置1000MHZ
monolamp=0;//開(kāi)機(jī)立體聲燈點(diǎn)亮
fup();//頻率送入BH1415
while(1)
{
read_key();//查鍵按紐
scan();//顯示4ms
}
}
//
//*********************結(jié)束**************************//
評(píng)論