历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2018年01月07日 | AT89C52单片机控制BH1415F调频台C程序

2018-01-07 来源:eefocus

BH1415F调频台控制C程序 使用keil C51 通过调试 
//使用AT89C52单片机,12MHz晶振,用共阳四位LED数码管 
//P0口输出段码,P2口扫描 
//#pragma SRC(d:\aa.asm) 
#include "reg52.h" 
#include "intrins.h"     //_nop_();延时函数用 

#define  Disdata    P0   //段码输出口 
#define  disCAN     P2   //扫描口 
#define  keyio      P1   //键盘接口 
#define uchar unsigned char 
#define uint  unsigned int 
sbit  DA=P3^0;          //数据输出 
sbit  CK=P3^1;          //时钟 
sbit  CE=P3^2;          //片选 
sbit  DIN=P0^7;         //LED小数点控制 
sbit  monolamp=P3^3;    //立体声指示灯 
uint   h;                //延时参量 
// 
//扫描段码表 
uchar code dis_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" "不亮" "-" */                 
uchar code  scan_con[4]={0xfe,0xfd,0xfb,0xf7};   // 列扫描控制字 
uint  data  f_data={0x00},f_data1;               // 频率数据,数据运算时暂存用 
uchar data  display[4]={0x00,0x00,0x00,0x00};    //显示单元数据,共4个数据 
uchar bdata condata=0x08;                        //1415控制字高5位,开机为立体声状态 
sbit mono=condata^3;                            //单声道/立体声控制位 
uchar data  concommand[2],keytemp;               //合成后的2个控制字,键值存放 
// 
/**********************************************************************/ 
// 
// 
/***********11微秒延时函数**********/ 
// 
void delay(uint t) 

for(;t>0;t--); 

// 
/***********LED显示动态扫描函数**********/ 
scan() 

char k; 
    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(uchar val) 

uchar i; 
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) 

case 238:{f_data++;if(f_data>1099){f_data=1099;}fup();break;}//加0.1MHZ 
case 222:{f_data--;if(f_data<800){f_data=800;}fup();break;}  //减0.1MHZ 
case 190:{mono=~mono;if(mono){monolamp=0;}else monolamp=1;fup();break;}//立体声/单声道转换 
case 126:{f_data=1090;fup();break;}//预置109.0MHZ 
case 237:{f_data=1070;fup();break;}//预置107.0MHZ 
case 221:{f_data=1050;fup();break;}//预置105.0MHZ 
case 189:{f_data=1030;fup();break;}//预置103.0MHZ 
case 125:{f_data=1000;fup();break;}//预置100.0MHZ 
case 235:{f_data=970;fup();break;}//预置97.0MHZ 
case 219:{f_data=950;fup();break;}//预置95.0MHZ 
case 187:{f_data=930;fup();break;}//预置93.0MHZ 
case 123:{f_data=900;fup();break;}//预置90.0MHZ 
case 231:{f_data=870;fup();break;}//预置87.0MHZ 
case 215:{f_data=850;fup();break;}//预置85.0MHZ 
case 183:{f_data=830;fup();break;}//预置83.0MHZ 
case 119:{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 
  } 

// 
//*********************结束**************************// 


推荐阅读

史海拾趣

General Magnetics Inc公司的发展小趣事
在电子变压器电路中安装过流、过压、过热等保护装置,以防止因异常情况导致的损坏。
台湾丰宾(CapXon)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,CapXon公司开始积极拓展市场,寻求更广阔的发展空间。公司不仅在台湾本土市场取得了显著的成果,还逐步将产品推向国际市场,与全球众多知名电子品牌建立了长期稳定的合作关系。同时,CapXon还注重品牌塑造,通过一系列的市场推广活动,提高了品牌知名度和美誉度,进一步巩固了公司在行业中的地位。

安碁科技(AKER)公司的发展小趣事

品质是企业的生命线。安碁科技自成立以来,一直注重品质管理和技术创新。2000年,公司引进了全自动化制程设备,正式生产SMD产品,并通过了ISO9002认证。此后,安碁科技陆续通过了多项国际认证,如TL-9000、TS16949等,证明了其在品质管理方面的卓越表现。同时,公司也不断投入研发资源,推动技术创新和产品升级,以满足市场不断变化的需求。

倍思特(BEST)公司的发展小趣事

1990年,安碁科技股份有限公司正式成立,标志着其进军石英振荡器领域的起点。公司初创时期,面临着激烈的市场竞争和技术挑战。然而,安碁科技凭借对技术的执着追求和对市场的敏锐洞察,逐步在行业中崭露头角。通过不断的技术研发和产品创新,公司逐渐建立了自己的品牌地位,为后续的发展奠定了坚实的基础。

Alliance Fiber Optics Products Inc公司的发展小趣事

在1995年,台湾人章启侨在美国加州创立了AFOP。当时的电子行业正处于光纤通信技术的蓬勃发展时期,章启侨凭借对市场的敏锐洞察,将公司的业务聚焦于光纤通信主被动元件的设计与制造。在创立初期,AFOP面临着技术、资金和市场等多方面的挑战,但章启侨带领团队不断攻克难关,逐渐在市场中站稳脚跟。

极海半导体(Geehy)公司的发展小趣事

随着产品质量的不断提升和市场需求的扩大,AFOP开始积极拓展国内外市场。公司通过与各大电信运营商、设备制造商等建立合作关系,将产品应用于长途通信、大都会网络以及最后一里接入等领域。同时,AFOP还积极参与国际光纤通信展览会等活动,加强与国际同行的交流与合作,提升了公司在国际市场的知名度。

问答坊 | AI 解惑

汇编交通灯程序

汇编交通灯程序…

查看全部问答>

求助:vmware6.0下Fedora9系统中的minicom设置后接arm没有反应

对vmware6.0下Fedora9系统中的minicom进行设置,波特率115200,无奇偶校验,数据位8,停止位1,设置后显示115200 8N1 保存设置后,连接arm却没有反应 我在xp下用超级终端在同样的设置下可以连接到arm,不知道是怎么回事啊? 谢谢各位…

查看全部问答>

BSP移植成功,散分!!!

经过三个月的努力,在自己公司的开发板上,成功移植wince5.0 BSP 开发包,今天加入display驱动后,看到了wince5.0桌面. 呵呵,心里爽呀.这块板不支持BX指令(ARM CPU版本太旧),修改 wince kernel成功解决!!!…

查看全部问答>

S3C6410的USB通讯小项目外包

S3C6410的USB通讯小项目外包: 硬件:S3C6410开发板(用现成的)软件要求:通过USB线使S3C6410开发板能与PC机通讯下载文件。   说明:其实开发板上的EBOOT已经实现了这个功能,只是没有上位机DNW的源代码。而我们必须要有源代码。开发费可 ...…

查看全部问答>

求一个比较好的IQ解调器芯片

大家推荐一个比较好的IQ解调器芯片,我现在用的是RF2938RFMD但是很容易谁坏,不知道是什么原因。 我的RF是137MHz,拜托大家了。…

查看全部问答>

stm32f103vc发送中断

串口3的发送中断配置好后,为什么立即发送失败,但等候大约1s时间后,发送却能够正常? 串口的配置是没有问题的,关键是上述的那个问题?…

查看全部问答>

毕业设计的问题,诚心求一个高手帮帮忙。

我的毕业设计题目是用TMS320F2812EVM做一个变声器,现在实在弄不出来,因为DSP的编程有问题,有谁能给我一点思路和程序指点吗?如果有谁能帮忙的话那就感激不尽了,需要的话加我QQ,53430188。 我打算用AD+FFT+DA的流程,但是在具体操作的时候发现 ...…

查看全部问答>

单片机

目前使用最好的单片机芯片是什么呀?请大家指教…

查看全部问答>

关于STM8L152 12864液晶显示问题

最近我用STM8L15x的固件库编写一个12864的液晶显示,但是液晶无法显示出来,而且有时会乱码#include \"stm8l15x.h\"#define uchar unsigned char#define E_H() (GPIO_SetBits(GPIOD,GPIO_Pin_7))#define E_L() (GPIO_ResetBits(GPIOD,GPIO_Pi ...…

查看全部问答>

lm567能数字调制吗

本帖最后由 paulhyde 于 2014-9-15 03:31 编辑 lm567能数字调制吗    …

查看全部问答>