📄 morse.c
字号:
for(i=0;i<no-1;i++)
{
*s=RcvByte(); /*发送数据*/
Ack_I2c(0); /*发送就答位*/
s++;
}
*s=RcvByte();
Ack_I2c(1); /*发送非应位*/
Stop_I2c(); /*结束总线*/
return(1);
}
#endif
indir char morse_input_flag=0;
indir short current_device_id;
indir short dest_device_id;
indir char keydata=(char)0xFF;
indir char morse_ch=(char)0x01;
indir uchar bit_count=0;
indir char left_flag=0;
indir char right_flag=0;
indir char mode_flag=0;
indir char display_id;
indir char morse_bit=0;
indir char e2rom_have_id_num;
void main()
{
/*
char keydata=(char)0xFF;
char morse_ch=(char)0x01;
uchar bit_count=0;
char left_flag=0;
char right_flag=0;
char mode_flag=0;
char display_id;
char morse_bit=0;
*/
char ch[1];
char *str="12345";
char rec[5];
char i;
char m;
char e2rom_subaddr=0;
char *pcscratch =(char *)&self_device_id;
DISI();
init_key();
init_timer();
init_lcd();
lcd_clear();
init_i2c();
//read from E2prom,init morse_di_time,morse_dah_time etc
//and display ID connet with device ID.
IRcvStr(i2c_addr,e2rom_subaddr,&pcscratch[3],1);
IRcvStr(i2c_addr,e2rom_subaddr+1,&pcscratch[2],1);
IRcvStr(i2c_addr,e2rom_subaddr+2,&pcscratch[1],1);
if(self_device_id==0)
{
self_device_id=0x12345600;
e2rom_subaddr=0;
ISendStr(i2c_addr,e2rom_subaddr,&pcscratch[3],1);
ISendStr(i2c_addr,e2rom_subaddr+1,&pcscratch[2],1);
ISendStr(i2c_addr,e2rom_subaddr+2,&pcscratch[1],1);
}
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+3;
IRcvStr(i2c_addr,e2rom_subaddr,&middle_var,1);
morse_di_time = middle_var;
if(morse_di_time >10 ||morse_di_time<0)
{
morse_di_time=5;
middle_var = morse_di_time;
ISendStr(i2c_addr,e2rom_subaddr,&middle_var,1);
}
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+4;
IRcvStr(i2c_addr,e2rom_subaddr,&middle_var,1);
morse_dah_time=middle_var;
if(morse_dah_time >10 || morse_dah_time <0)
{
morse_dah_time =5;
middle_var = morse_dah_time;
ISendStr(i2c_addr,e2rom_subaddr,&middle_var,1);
}
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+5;
IRcvStr(i2c_addr,e2rom_subaddr,&middle_var,1);
morse_char_endtime = middle_var;
if(morse_char_endtime >20 || morse_char_endtime < 10)
{
morse_char_endtime =15;
middle_var = morse_char_endtime;
ISendStr(i2c_addr,e2rom_subaddr,&middle_var,1);
}
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+6;
IRcvStr(i2c_addr,e2rom_subaddr,&middle_var,1);
morse_word_endtime = middle_var;
if(morse_word_endtime >30 ||morse_word_endtime <20)
{
morse_word_endtime =25;
middle_var =morse_word_endtime;
ISendStr(i2c_addr,e2rom_subaddr,&middle_var,1);
}
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+7;
IRcvStr(i2c_addr,e2rom_subaddr,&middle_var,1);
e2rom_have_id_num = middle_var;
if(e2rom_have_id_num >10 || e2rom_have_id_num <0)
{
e2rom_have_id_num =0;
}
//only read ID,from 0--9,and do nothing...
e2rom_subaddr =0;
e2rom_subaddr =e2rom_subaddr+8;
pcscratch = (char *)&e2rom_have_id_num;
write_cont(0x23);//set TCC 1:16,TCC source = 16.38K
TCC =0;
// IOC7=0xFF;//port7 set input when use keyboard
ENI();
while(1)
{
/*
for(i=0;i<10;i++)
ISendStr(i2c_addr,i,&i,1);
for(i=0;i<10;i++)
{
IRcvStr(i2c_addr,i,&m,1);
ch[0]=m+0x30;
lcd_append_str(ch,1);
}
ISendStr(i2c_addr,0,str,5);
IRcvStr(i2c_addr,0,rec,5);
lcd_display(0, str, 5);
lcd_display(10, rec, 5);
display_ico(S1, 1);
display_ico(p_p, 1);
display_ico(ALL,1);
*/
}
#if 0
while(1)
{
// IOCD=0xFF;//set port7 internal pull high
// keydata=PORT7;
if(TCC >10)
{
keydata=scan_key();
TCC =0;
}
//key down...
if((keydata&0xFF)!=0xFF)
{
open_led();
start_beep();
press_flag=1;
if(keydata==key_morse_di )
{
morse_input_flag =1;
morse_bit =0;
}
else if(keydata==key_morse_dah)
{
morse_input_flag =1;
morse_bit =1;
}
else if(keydata==key_morse_end)
{
morse_input_flag =2;
}
else
{
morse_input_flag =0;
}
}
//key up...
else
{
if(morse_input_flag==1)
{
if(press_flag)
{
if(morse_bit)
{
morse_ch = morse_ch<<1;
morse_ch =morse_ch+1;
}
else
{
morse_ch = morse_ch<<1;
}
if(bit_count <7)
++bit_count;
key_morse_end_counter=0;
}
}
//morse input end ...
else if(morse_input_flag ==2)
{
if(bit_count)
{
if(bit_count >6)
{
ch[0]=(char)MorseErrorCode;
}
else
{
ch[0]=morse_decode(morse_ch);
}
}
if(ch[0] !=(char)MorseErrorCode)
{
//display input char.
lcd_append_str(ch,1);
// NOP();
// array_set(INPUT_WORD_ADDR+ch_count,(char *)ch[0],1);
ch_count ++;
if(ch_count >MAX_WORD_LEN)
{
ch_count =0;
//send words...
// begin_send_words(current_device_id,dest_device_id);
lcd_clear();
}
}
if(press_flag)
key_morse_end_counter ++;
bit_count =0;
morse_ch =(char)0x01;
ch[0] =(char)MorseErrorCode;
if(key_morse_end_counter==2)
{
//when seriral press 2 key_morse_end ,a word input over and send it ..
key_morse_end_counter=0;
morse_input_over_flag=1;
lcd_clear();
}
}
morse_input_flag =0;
close_led();
stop_beep();
press_flag=0;
}
if(press_flag)
{
if(keydata==key_left)
{
left_flag =1;
if(right_flag&left_flag)
{
right_flag =0;
left_flag =0;
current_status =1;
}
}
else if(keydata==key_right)
{
right_flag=1;
if(right_flag&left_flag)
{
right_flag =0;
left_flag =0;
current_status =1;
}
}
else if(keydata==key_up)
{
if(current_status==0)
{
}
else if(current_status==1)
{
}
else if(current_status==2)
{
}
}
else if(keydata==key_down)
{
if(current_status==0)
{
}
else if(current_status==1)
{
}
else if(current_status==2)
{
}
}
else if(keydata==key_switch)
{
if(current_status==0)
{
if(press_long_flag)
{
//change status to control ID status
ch[0]='7';
lcd_display(0, ch, 1);
current_status =2;
}
else
{
//in view status,
if(mode_flag)
{
mode_flag=0;
//P-P
send_mode =1;
}
else
{
mode_flag =1;
//ALL send
send_mode =0;
}
}
}
else if(current_status==1)
{
if(press_long_flag)
{
//change status to view status
current_status =0;
//write configre input time to E2prom.
}
}
else if(current_status==2)
{
current_status=0;
// current ID overcast be selected ID and write to E2prom
}
}
}
if(morse_input_over_flag)
{
//when input timeout and seriral press 2 key_morse_end,send it
morse_input_over_flag=0;
//send word...
// begin_send_words(current_device_id,dest_device_id);
lcd_clear();
}
if(timer2_int_flag)
{
timer2_isr();
}
}
#endif
}
void timer2_isr()
{
timer2_int_flag =0;
RELOAD_TIMER2();
if(press_flag)
press_long_counter ++;
if(press_long_counter >PRESS_LONG_TIMER)
{
press_long_flag =1;
press_long_counter =0;
}
if(key_morse_end_counter==1)
{
morse_input_counter ++;
}
if(morse_input_counter >MORSE_INPUT_TIMER)
{
morse_input_counter=0;
key_morse_end_counter =0;
morse_input_over_flag=1;
}
}
/*
*
*/
void _intcall interrupt_l(void) @ 0x08:low_int 7
{
//save ACC,R3,R4,R5
_asm
{
MOV 0X1F,A
SWAPA 0X4
BS 0X4,6
BS 0X4,7
MOV 0X3F,A
SWAPA 0X3
MOV 0X3E,A
SWAPA 0X5
MOV 0X3D,A
}
}
void _intcall interrupt(void) @ int 7
{
//backup C system
_asm
{
MOV A,0X10 // USE 1 BYTE C TYPE,C SYSTEM BACKUP
MOV 0X3C,A
MOV A,0X14
MOV 0X3B,A
MOV A,0X18
MOV 0X3A,A
MOV A,0X1B
MOV 0X39,A
MOV A,0X1C
MOV 0X38,A
}
// Write your code (inline assembly or C) here
DISI();
isr_source=ISR;
if(isr_source &0x20)
{
timer2_int_flag =1;
}
ISR =0;
//restore C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X3C // USE 1 BYTE C TYPE,C SYSTEM RESTORE
MOV 0X10,A
MOV A,0X3B
MOV 0X14,A
MOV A,0X3A
MOV 0X18,A
MOV A,0X39
MOV 0X1B,A
MOV A,0X38
MOV 0X1C,A
}
//restore ACC,R3,R4,R5
_asm
{
BS 0X4,6
BS 0X4,7
SWAPA 0X3D
MOV 0X5,A
SWAPA 0X3E
MOV 0X3,A
SWAPA 0X3F
MOV 0X4,A
SWAP 0X1F
SWAPA 0X1F
}
ENI();
}
#if 0
void _intcall counter1_l(void) @ 0x0C:low_int 4
{
}
void _intcall counter1(void) @ int 4
{
//backup R4
_asm
{
SWAPA 0x04
MOV 0x1F,A
}
//backup C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X10 // USE 1 BYTE C TYPE,C SYSTEM BACKUP
MOV 0X3C+1,A
MOV A,0X14
MOV 0X3B+1,A
MOV A,0X18
MOV 0X3A+1,A
MOV A,0X1B
MOV 0X39+1,A
MOV A,0X1C
MOV 0X38+1,A
}
// Write your code (inline assembly or C) here
//restore C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X3C+1 // USE 1 BYTE C TYPE,C SYSTEM RESTORE
MOV 0X10,A
MOV A,0X3B+1
MOV 0X14,A
MOV A,0X3A+1
MOV 0X18,A
MOV A,0X39+1
MOV 0X1B,A
MOV A,0X38+1
MOV 0X1C,A
}
//restore R4
_asm
{
SWAPA 0x1F
MOV 0X04,A
}
}
void _intcall counter2_l(void) @ 0x0F:low_int 5
{
}
void _intcall counter2(void) @ int 5
{
//backup R4
_asm
{
SWAPA 0x04
MOV 0x1F,A
}
//backup C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X10 // USE 1 BYTE C TYPE,C SYSTEM BACKUP
MOV 0X3C+1,A
MOV A,0X14
MOV 0X3B+1,A
MOV A,0X18
MOV 0X3A+1,A
MOV A,0X1B
MOV 0X39+1,A
MOV A,0X1C
MOV 0X38+1,A
}
// Write your code (inline assembly or C) here
DISI();
RELOAD_TIMER2();
IOCF=0;
if(press_flag)
press_long_counter ++;
if(press_long_counter >PRESS_LONG_TIMER)
{
press_long_flag =1;
press_long_counter =0;
}
if(key_morse_end_counter==1)
{
morse_input_counter ++;
}
if(morse_input_counter >MORSE_INPUT_TIMER)
{
morse_input_counter=0;
key_morse_end_counter =0;
morse_input_over_flag=1;
}
//restore C system
_asm
{
BS 0X4,6
BS 0X4,7
MOV A,0X3C+1 // USE 1 BYTE C TYPE,C SYSTEM RESTORE
MOV 0X10,A
MOV A,0X3B+1
MOV 0X14,A
MOV A,0X3A+1
MOV 0X18,A
MOV A,0X39+1
MOV 0X1B,A
MOV A,0X38+1
MOV 0X1C,A
}
//restore R4
_asm
{
SWAPA 0x1F
MOV 0X04,A
}
ENI();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -