bh1415f调频台控制c程序 使用keilc51 通过调试
//使用at89c52单片机,12mhz晶振,用共阳四位led数码管
//p0口输出段码,p2口扫描
//#pragmasrc(d:aa.asm)
#include“reg52.h”
#include“intrins.h”//_nop_();延时函数用
#definedisdatap0//段码输出口
#definediscanp2//扫描口
#definekeyiop1//键盘接口
#defineucharunsignedchar
#defineuintunsignedint
sbitda=p3^0;//数据输出
sbitck=p3^1;//时钟
sbitce=p3^2;//片选
sbitdin=p0^7;//led小数点控制
sbitmonolamp=p3^3;//立体声指示灯
uinth;//延时参量
//
//扫描段码表
ucharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
/*共阳led段码表“0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“-”*/
ucharcodescan_con[4]={0xfe,0xfd,0xfb,0xf7};//列扫描控制字
uintdataf_data={0x00},f_data1;//频率数据,数据运算时暂存用
uchardatadisplay[4]={0x00,0x00,0x00,0x00};//显示单元数据,共4个数据
ucharbdatacondata=0x08;//1415控制字高5位,开机为立体声状态
sbitmono=condata^3;//单声道/立体声控制位
uchardataconcommand[2],keytemp;//合成后的2个控制字,键值存放
//
/**********************************************************************/
//
//
/***********11微秒延时函数**********/
//
voiddelay(uintt)
{
for(;t》0;t--);
}
//
/***********led显示动态扫描函数**********/
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;
}
}
//
//
/***********频率数据转换为显示用bcd码函数**********/
turn_bcd()
{
display[3]=f_data/1000;if(display[3]==0){display[3]=10;}//最高位为0时不显示
f_data1=f_data%1000;
display[2]=f_data1/100;//求显示十位数
f_data1=f_data1%100;
display[1]=f_data1/10;//求显示个位数
display[0]=f_data1%10;//求显示小数位
}
/***********控制字合成函数**********/
command()
{
concommand[1]=f_data/256;
concommand[0]=f_data%256;
concommand[1]=concommand[1]+condata;
}
/***********写入1个字节函数**********/
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;
}
/***********控制字写入1415函数**********/
w_1415()
{
write(concommand[0]);
write(concommand[1]);
}
//
//*************频率涮新*****************//
fup()
{
turn_bcd();//显示bcd码转换
command();//合成控制字
w_1415();//写入1415
}
//
/***********查键函数**********/
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;}//立体声/单声道转换
case126:{f_data=1090;fup();break;}//预置109.0mhz
case237:{f_data=1070;fup();break;}//预置107.0mhz
case221:{f_data=1050;fup();break;}//预置105.0mhz
case189:{f_data=1030;fup();break;}//预置103.0mhz
case125:{f_data=1000;fup();break;}//预置100.0mhz
case235:{f_data=970;fup();break;}//预置97.0mhz
case219:{f_data=950;fup();break;}//预置95.0mhz
case187:{f_data=930;fup();break;}//预置93.0mhz
case123:{f_data=900;fup();break;}//预置90.0mhz
case231:{f_data=870;fup();break;}//预置87.0mhz
case215:{f_data=850;fup();break;}//预置85.0mhz
case183:{f_data=830;fup();break;}//预置83.0mhz
case119:{f_data=800;fup();break;}//预置80.0mhz
default:{break;}//
}
}
keyio=0xff;
}
//
//
//
/**************主函数****************/
main()
{
disdata=0xff;//初始化端口
discan=0xff;
keyio=0xff;
da=0;//bh1415禁止
ck=0;//
ce=0;//
for(h=0;h《4;h++){display[h]=8;}//开机显示“8888”
for(h=0;h《500;h++)
{scan();}//开机显示“8888”2秒
f_data=1000;//预置1000mhz
monolamp=0;//开机立体声灯点亮
fup();//频率送入bh1415
while(1)
{
read_key();//查键按纽
scan();//显示4ms
}
}
//
//*********************结束**************************//
抢占新兴市场大蛋糕,PCB概念股迎来风口
NodeMCU板上的基本MQTT协议用法
人工智能将成为城市治理的核心和大脑
e络盟扩大库存,可提供8万余种连接器及电缆产品
英特尔无线蓝牙设备无法启动代码10
AT89C52单片机的调频台控制设计
移动5G毫米波在哪个频段
Google Ads为外贸企业打造高效推广方式,助力跨境电商品牌出海
32位MCU专业的解决方案有哪些-新唐MCU想你所需!
数据中心可视化合集,解锁机房运维新境界
共模电感和扼流圈的区别?
CES消费电子展开幕 中外企业纷纷亮相
华为将携手青春版荣耀8推出“赵灵儿”版手机,回味一代人青春仙剑情
机器人与农业的整合将会是世界的大趋势 以便大力发展精准农业
基于组件GIS的应用系统开发技术
24V350W电源改0-30V可调电源diy图解
数字货币交易平台执行官赵长鹏表示ICO比传统的风投更容易筹集资金
河套IT WALK(总第56期):量子计算、元宇宙与云技术的交汇点,科技新浪潮下的前沿探索
通过工业物联网网关实现远程控制PLC设备的策略
什么是超声波传感器?超声波传感器优劣势