?? fff.c
字號:
/*********************************************************************/
// 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
}
}
//
//*********************結束**************************//
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -