📄 led.c
字号:
#include "led.h"
bit flag_9833=0;
unsigned char key_timer,count,led_sel,show_sel,key_in,key_hiter,key_undeal,key_buf[4],timer_counter;
unsigned char sel_9833,deal_counter,deal_buf[6],deal_device,point_loc,error_no,preset_ok;
unsigned char show_buf[6],seri_buf[8];
unsigned char step,ask,psk;
unsigned long f_in,fa,f1;
unsigned int add,f_buf[10];
//unsigned char code para_avl[4]="有效";
unsigned int code freq_regs[2] ={0x0051,0x3ae1};//100KHz
unsigned char code led_code[28][2]={{'0',0x3f},{'1',0x06},{'2',0x5b},{'3',0x4f},{'4',0x66},
{'5',0x6d},{'6',0x7d},{'7',0x07},{'8',0x7f},{'9',0x6f},
{'A',0x77},{'B',0x7C},{'C',0x39},{'D',0x5E},{'E',0x79},
{'F',0x71},{'H',0x76},{'L',0x38},{'O',0x5C},{'P',0x73},
{'U',0x3E},{'R',0x50},{'Y',0x6E},{'.',0x80},{'-',0x40},
{'=',0x48},{0X00,0X00},{0Xff,0Xff}};
extern void Initial9833(void);
/***********************************************************************/
void init_timer()
{
TH0=0xcf;
TL0=0X00;
TR0=1;
ET0=1;
timer_counter=0;
}
/**********************************************************************/
void init_8155()
{
Order_state=0x03;
led_contrl=0;
show_sel=0xfe;
led_sel=0x00;
key_timer=0;
key_hiter=0x0f;
key_in=0xff;
key_undeal=0;
key_buf[0]= key_buf[1]= key_buf[2]= key_buf[3]=0;
}
/**********************************************************************/
void get_show(unsigned long f)
{
unsigned char i;
if(f<100000){
show_buf[5]=0x00;
}
else { i=f/100000;
show_buf[5]=led_code[i][1]; f=f%100000;}
if(f<10000){ show_buf[4]=f_in<10000?0x0:led_code[0][1];}
else { i=f/10000;
show_buf[4]=led_code[i][1]; f=f%10000;}
if(f<1000)
{ show_buf[3]=f_in<1000?0x0:led_code[0][1];}
else { i=f/1000; show_buf[3]=led_code[i][1]; f=f%1000;}
if(f<100){ show_buf[2]=f_in<100?0x0:led_code[0][1];}
else { i=f/100; show_buf[2]=led_code[i][1]; f=f%100;}
if(f<10){i=f/10; show_buf[1]=led_code[i][1]|0x80;}
else { i=f/10; show_buf[1]=(led_code[i][1]| 0x80); i=f%10;}
show_buf[0]=led_code[i][1];
}
/*********************************************************************/
void Initial9833()
{
f_buf[0]=freq_regs[1]; //f0_low
f_buf[1]=freq_regs[0]; //f0_high
f_buf[2]=0; //f1_low
f_buf[3]=0; //f1_high
f_buf[4]=0; //p0
f_buf[5]=2048; //p1
control=0; b28=1;//fsel=1;
Control_9833();
ask=0;psk=0;step=1;
f_in=1000;
get_show(f_in);
}
void time0() interrupt 1
{
TH0=0xff;
TL0=0xce; //定时器0中断十个us //此处应改为5us,如10KHz应改为50us
timer_counter++;
if(timer_counter>20)
{ //此处也许应改为200
timer_counter=0;
key_timer=1;
}
sk_signal=~sk_signal;
if(ask){
if(sk_signal)Write9833(control);
else Write9833(control | 0x0800);
}
else if(psk){
if(sk_signal)Write9833(control);
else Write9833(control | 0x0400);
}
}
/******************************调整X9C102********************************/
void POT(bit updown)
{
AGC_CTL = 0;
UP=updown;
while(step--){
INC=1;_nop_();_nop_();_nop_();_nop_();_nop_();
INC=0;}
INC=1;
AGC_CTL = 1;
}
/*********************************************************************/
void main(void)
{
init_8155();
init_timer();
Initial9833();
EA=1;
while(1) {
FEED_DOG;
if(key_timer){
key_timer=0;
if(led_sel>0 && led_sel <5 ){
if(key_hiter != 0x0f && led_sel <5 ){ //有键按下
key_in=(port_c & 0x0f ); //读键
if(key_in != 0x0f ){ //键有效
if( key_in != key_buf[led_sel-1]){ //新键
key_undeal=1; key_buf[led_sel-1] = key_in;
switch(key_in){
case 0x0e:
key_in=16-led_sel;
break;
case 0x0d:
key_in=12-led_sel;
break;
case 0x0b:
key_in=8-led_sel;
break;
case 0x07:
key_in=4-led_sel;
break;
default:
key_buf[led_sel-1] = key_in=0x0f; key_undeal=0;
break; }}}
else {key_buf[led_sel-1] = 0x0f;}} //键无效
else{key_buf[led_sel-1] = 0x0f; }} //键释放
port_b=0xff;
port_a=show_buf[led_sel];
port_b=show_sel;
led_sel++;
show_sel=(show_sel<<1)+1;
if(led_sel>5){
led_sel=0;
show_sel=0xfe;}
key_hiter= (port_c & 0x0f); } //检测按键
if(key_undeal){
key_undeal=0;
deal_counter=0;
switch(key_in){
case 0x00: //↑
case 0x01: //↓
case 0x02: //←
case 0x03: //→
if(key_in==0x0) { f_in=f_in+1000;if(f_in>100000)f_in=100000;}
if(key_in==0x1) { f_in=f_in-1000;if(f_in<10)f_in=10;}
if(key_in==0x2) { f_in++;if(f_in>100000)f_in=100000;}
if(key_in==0x3) { f_in--;if(f_in<10)f_in=10;}
fa=f_in<<12; //*2**27/10**8
if((fa%25)>12) fa=fa/25+1;
else fa=fa/25;
fa=fa<<5;
if((fa%25)>12) fa=fa/25+1;
else fa=fa/25;
fa=fa<<5;
if((fa%5)>2) fa=fa/5+1;
else fa=fa/5;
f_buf[0]=(unsigned int )(fa & 0x03fff);
f_buf[1]=(unsigned int )(fa >>14);
add = f0write;
Write9833(0x2000);
Write9833(f_buf[0] | add);
Write9833(f_buf[1] | add);
Write9833(control );
get_show(f_in);
break;
case 0x04: //
case 0x05: // 三角波;
case 0x06: // 方波/2;
case 0x07: // 方波;
control=0;
if(key_in==0x05){mode=1; ask=0; psk=0;}// 三角波
if(key_in==0x06){opb=1; ask=0; psk=0;} // 方波/2;
if(key_in==0x07){opb=1; div2=1; ask=0; psk=0;}// 方波;
Write9833(control);
break;
case 0x08: // ask;
case 0x09: // psk;
if(key_in==8){ask=1; psk=0;}// ask;
else if(key_in==9){psk=1; ask=0;}// psk
control=0;
f_buf[0]=freq_regs[1]; //f0_low
f_buf[1]=freq_regs[0]; //f0_high
add = f0write;
Write9833(0x2000);
Write9833(f_buf[0] | add);
Write9833(f_buf[1] | add);
break;
case 0x0e: //减小
step=1;
POT(0);
break;
case 0x0f: //增大
step=1;
POT(1);
break;
default:
break;}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -