网站首页  |  法律法规  |   调频入门  |   调频发射  |   调频接收  |   天线技术  |   电视电台  |   音响技术  |   单 片 机  |   下载中心  |   广播资讯  |   名站推介  |   本站留言  |  淘宝店铺
  用户名: 密码: 验证码:       
今天是:

共有 18519 位读者读过此文 【选择字体颜色】: 【字体:放大 正常 缩小】     【双击自动滚屏】【图片滚轮变焦】

BH1415F调频台控制C程序

发表日期:2007年10月1日   出处:网络收录 【编辑录入:飞奔

/*********************************************************************/
//                      BH1415F调频台控制C程序
//                         使用keil C51
//                       2005.3.16通过调试
/*********************************************************************/
//使用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
    }
}
//
//*********************结束**************************//

0
  • 上一篇:使用TDA7010T制作的对讲机
  • 下一篇:ATMEGA8控制BH1415F程序
  • 相关专题:

  • 专题1信息无
  • 专题2信息无
  • 相关评论:(评论内容只代表网友观点,与本站立场无关!)[相关评论无]

    发表、查看更多关于该信息的评论 将本信息发给好友 打印本页

    | 关于我们 | 网站地图 | 联系我们 | 帮助中心 | 图片新闻 |淘宝店铺 |
    Copyright © 2003-2017 www.fmdiy.com All Rights Reserved
    电话:020-86048309   手机:13512700536
    Powered By:ForecastNews v1.5(B1)
    点击这里给我发消息 xml聚合新闻rss2.0 firefox全面支持 Creative Commons License
    页面执行时间:31.250毫秒