📄 bh1415f.c
字号:
#include<reg52.h>
#include<intrins.h>
//#define disdata P0吗 //段码输出口
#define discan P2
//#define condata P1; //位码
#define uint unsigned int
#define uchar unsigned char
//#define keyio P1
sbit keyio=P3^7 ;
uint data f_data={0x00},f_data1; //频率数据,数据运算是暂存用
sbit DA=P3^0; //数据输入
sbit CK=P3^1; //时钟
sbit CE=P3^2; //片选
//sbit DIN=P0^1; //小数点控制
//sbit monolamp=P1^0; 立体//立体声指示灯
uint h; // 延时参数
uchar code du[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xff};
uchar code we[4]={0xef,0xdf,0xbf,0x7f};
uchar data display[4]={0x00,0x00,0x00,0x00};
uchar bdata condata=0x08; //1415控制字高五位,开机为立体声状态
//sbit mono=condata^3; sbit mono=condata^3; //单声道/立体声控制位
uchar data concommand[2];
uchar keytemp=0;
void delay(uint t)
{
for(;t>0;t--);
}
scan()
{
uchar k;
for(k=0;k<4;k++)
{
P0=du[display[k]];
//if(k==1) {DIN=0;}
discan=we[k];
delay(50);
P2=0xff;
}
}
/******频率数据转换为显示用BCD码函数**********/
turn_bcd()
{
display[3]=f_data/1000;if(display[3]==0){display[3]=10;}
f_data1=f_data%1000;
display[2]=f_data1/100;
f_data1=f_data%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函数**************/
w1415()
{
write(concommand[0]);
write(concommand[1]);
}
/**********频率刷新********/
fup()
{
turn_bcd();
command();
w1415();
}
read_key()
{ if(keyio==0)
{
delay(500 );
if(keyio==0)
{
keytemp++;
if(keytemp==16)
keytemp=0;
}
switch(keytemp)
{
case 15 :{f_data++;if(f_data>1099){f_data=1099;}fup();break;}
case 14 :{f_data--;if(f_data<800){f_data=800;}fup();break;}
//case 190 :{mono=~mono;if(mono){monolamp=0;} else monolamp=1;fup();break;}
case 13 :{f_data=1090;fup();break;}
case 12 :{f_data=1070;fup();break;}
case 11 :{f_data=1050;fup();break;}
case 10 :{f_data=1030;fup();break;}
case 9 :{f_data=1000;fup();break;}
case 8 :{f_data=970;fup();break;}
case 7 :{f_data=950;fup();break;}
case 6 :{f_data=930;fup();break;}
case 5 :{f_data=900;fup();break;}
case 4 :{f_data=870;fup();break;}
case 3 :{f_data=850;fup();break;}
case 2 :{f_data=830;fup();break;}
case 1 :{f_data=800;fup();break;}
default :break ;
}
}
/*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;}
case 222 :{f_data--;if(f_data<800){f_data=800;}fup();break;}
//case 190 :{mono=~mono;if(mono){monolamp=0;} else monolamp=1;fup();break;}
case 126 :{f_data=1090;fup();break;}
case 237 :{f_data=1070;fup();break;}
case 221 :{f_data=1050;fup();break;}
case 189 :{f_data=1030;fup();break;}
case 125 :{f_data=1000;fup();break;}
case 235 :{f_data=970;fup();break;}
case 219 :{f_data=950;fup();break;}
case 187 :{f_data=930;fup();break;}
case 123 :{f_data=900;fup();break;}
case 231 :{f_data=870;fup();break;}
case 215 :{f_data=850;fup();break;}
case 183 :{f_data=830;fup();break;}
case 119 :{f_data=800;fup();break;}
default :break;
}
}
keyio=0xff;*/
}
main()
{
P0=0xff;
discan=0xff;
keyio=0xff;
DA=0;CK=0;CE=0;
for(h=0;h<4;h++)
{
display[h]=8;
}
for(h=0;h<500;h++)
{
scan();
}
f_data=1000;
// monolamp=0;
fup();
while(1)
{
read_key();
scan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -