#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
void main()
{
sys_init();//系統初始化
while(mode_cnt==0)//如果還沒確定是做發送和接收,就在這等待
{
key();//按鍵掃描,先按下移位或乘位的做主機,另外的做從機
}
if(mode_cnt==1)
{
ES=0;
uart_send_char(0xFA);
ES=1;
}
while(1)
{
while(mode_cnt==1)//發送機
{
while(flag_yiwei_ok==0||flag_chengwei_ok==0)
//等待乘位和移位輸入完成
{
key();
}
val_yiwei_r=val_yiwei;
val_chengwei_r=val_chengwei;
while(flag_fangshi==0)
{
key();
}
flag_show_point=1;//數碼管顯示小數點
while(input_cnt<4)//等待輸入數據
{
key();
}
while(!flag_zhuanhuan_ok)
{
key();
}
led_zhuanhuan_on();
while(!flag_fasong)//等待發送
{
key();
}
led_fasong_on();
while(1);
}
while(mode_cnt==2)//接收機
{
//key();
while(!flag_jieshou);
led_jieshou_on();
while(flag_jieshou);//等待接收
flag_jieshou=0;
while(!flag_jieshou)
{
key();
}
while((!flag_yiwei_ok)||(!flag_chengwei_ok))
{
key();
}
while(!flag_zhuanhuan_ok)
{
key();
}
led_zhuanhuan_on();
while(1);
}
}
}
........................................................
datpro.h
void dat_pro(uchar n)
{
uchar i,j;
for(i=0;i==val_dat[j])
{
val_yiwei++;
val_chengwei++;
break;
}
}
val_dat_r=(val_dat+val_yiwei)*val_chengwei;
val_dat_r=val_dat_r%100;
}
}
void dat_compare(uchar n,uchar dat)
{
uchar i;
for(i=0;i==dat)
{
val_yiwei++;
val_chengwei++;
}
}
}
..............................................
delay.h
void delayms(uint t)
{
uint="uint" i,j;
for(i=0;i0)//7
{
key_n[0]=0;
yiwei_chengwei_input(7);
input_dat(7);
}
else if(key_n[1]>0)//8
{
key_n[1]=0;
yiwei_chengwei_input(8);
input_dat(8);
}
else if(key_n[2]>0)//9
{
key_n[2]=0;
yiwei_chengwei_input(9);
input_dat(9);
}
else if(key_n[3]>0)//移位
{
key_n[3]=0;
if(!flag_yiwei)
{
if(mode_cnt==0)
{
mode_cnt=1;//做發送
flag_yiwei=1;
}
else if(mode_cnt==1)
{
flag_yiwei=1;
}
else if(mode_cnt==2)
{
if(flag_jieshou)flag_yiwei=1;
}
}
}
else if(key_n[4]>0)//4
{
key_n[4]=0;
yiwei_chengwei_input(4);
input_dat(4);
}
else if(key_n[5]>0)//5
{
key_n[5]=0;
yiwei_chengwei_input(5);
input_dat(5);
}
else if(key_n[6]>0)//6
{
key_n[6]=0;
yiwei_chengwei_input(6);
input_dat(6);
}
else if(key_n[7]>0)//乘位
{
key_n[7]=0;
if(!flag_chengwei)
{
if(mode_cnt==0)
{
mode_cnt=1;//做發送
flag_chengwei=1;
}
else if(mode_cnt==1)
{
flag_chengwei=1;
}
else if(mode_cnt==2)
{
if(flag_jieshou)flag_chengwei=1;
}
}
}
else if(key_n[8]>0)//1
{
key_n[8]=0;
yiwei_chengwei_input(1);
input_dat(1);
}
else if(key_n[9]>0)//2
{
key_n[9]=0;
yiwei_chengwei_input(2);
input_dat(2);
}
else if(key_n[10]>0)//3
{
key_n[10]=0;
yiwei_chengwei_input(3);
input_dat(3);
}
else if(key_n[11]>0)//方式數字轉換
{
key_n[11]=0;
if(mode_cnt==1&&!flag_fangshi&&flag_yiwei_ok&&flag_chengwei_ok)
{
flag_fangshi=1;
}
}
else if(key_n[12]>0)//明暗轉換
{
key_n[12]=0;
if(mode_cnt==1&&input_cnt==4&&!flag_zhuanhuan_ok)
{
flag_zhuanhuan_ok=1;
val_dat_rr[0]=val_dat[0];
val_dat_rr[1]=val_dat[1];
val_dat_rr[2]=val_dat[2];
val_dat_rr[3]=val_dat[3];
dat_pro(4);
//val_dat_r[0]=(val_dat[0]+val_yiwei)*val_chengwei;
//val_dat_r[1]=(val_dat[1]+val_yiwei)*val_chengwei;
//val_dat_r[2]=(val_dat[2]+val_yiwei)*val_chengwei;
//val_dat_r[3]=(val_dat[3]+val_yiwei)*val_chengwei;
}
if(mode_cnt==2&&!flag_zhuanhuan_ok&&flag_yiwei_ok&&flag_chengwei_ok)
{
flag_zhuanhuan_ok=1;
if(val_chengwei==val_chengwei_r&&val_yiwei==val_yiwei_r)
{
val_dat_r[0]=val_dat_rr[0];
val_dat_r[1]=val_dat_rr[1];
val_dat_r[2]=val_dat_rr[2];
val_dat_r[3]=val_dat_rr[3];
}
else
{
val_dat_r[0]=val_dat[0]/val_chengwei-val_yiwei;
val_dat_r[1]=val_dat[1]/val_chengwei-val_yiwei;
val_dat_r[2]=val_dat[2]/val_chengwei-val_yiwei;
val_dat_r[3]=val_dat[3]/val_chengwei-val_yiwei;
}
seg_val[0]=val_dat_r[0]/10;
seg_val[1]=val_dat_r[0]%10;
seg_val[2]=val_dat_r[1]/10;
seg_val[3]=val_dat_r[1]%10;
seg_val[4]=val_dat_r[2]/10;
seg_val[5]=val_dat_r[2]%10;
seg_val[6]=val_dat_r[3]/10;
seg_val[7]=val_dat_r[3]%10;
}
}
else if(key_n[13]>0)//0
{
key_n[13]=0;
yiwei_chengwei_input(0);
input_dat(0);
}
else if(key_n[14]>0)//接收
{
key_n[14]=0;
if(mode_cnt==2&&!flag_jieshou)
{
flag_jieshou=1;
flag_show_point=1;
seg_val[0]=val_dat[0]/10;
seg_val[1]=val_dat[0]%10;
seg_val[2]=val_dat[1]/10;
seg_val[3]=val_dat[1]%10;
seg_val[4]=val_dat[2]/10;
seg_val[5]=val_dat[2]%10;
seg_val[6]=val_dat[3]/10;
seg_val[7]=val_dat[3]%10;
}
}
else if(key_n[15]>0)//發送
{
key_n[15]=0;
if(mode_cnt==1&&!flag_fasong)
{
flag_fasong=1;
ES=0;
uart_send_char(0XAF);
uart_send_char(val_dat_r[0]);
uart_send_char(val_dat_r[1]);
uart_send_char(val_dat_r[2]);
uart_send_char(val_dat_r[3]);
uart_send_char(val_yiwei_r);
uart_send_char(val_chengwei_r);
uart_send_char(val_dat_rr[0]);
uart_send_char(val_dat_rr[1]);
uart_send_char(val_dat_rr[2]);
uart_send_char(val_dat_rr[3]);
ES=1;
}
}
}
}
void key()
{
key_scan();
key_pro();
}
.......................................
seg.h
void seg_display()
{
static uchar i=0;
switch(i)
{
case 0:seg_duan=seg_tab[seg_val];seg_wei=seg_bit;i++;break;
case 1:
if(!flag_show_point)seg_duan=seg_tab[seg_val];
else seg_duan=seg_tab[seg_val]+0x80;
seg_wei=seg_bit;i++;break;
case 2:seg_duan=seg_tab[seg_val];seg_wei=seg_bit;i++;break;
case 3:
if(!flag_show_point)seg_duan=seg_tab[seg_val];
else seg_duan=seg_tab[seg_val]+0x80;
seg_wei=seg_bit;i++;break;
case 4:seg_duan=seg_tab[seg_val];seg_wei=seg_bit;i++;break;
case 5:
if(!flag_show_point)seg_duan=seg_tab[seg_val];
else seg_duan=seg_tab[seg_val]+0x80;
seg_wei=seg_bit;i++;break;
case 6:seg_duan=seg_tab[seg_val];seg_wei=seg_bit;i++;break;
case 7:seg_duan=seg_tab[seg_val];seg_wei=seg_bit;i=0;break;
default:i=0;
}
}
...............................................................
sys_init.h
void sys_init()
{
delayms(100);
led_yiwei_off();
led_chengwei_off();
led_zhuanhuan_off();
led_fasong_off();
led_jieshou_off();
TMOD = 0X21;
SCON=0X50;
TH0=0XFC;
TL0=0X18;
TR0=1;
ET0=1;
TH1=0XFD;
TL1=0XFD;
TR1=1;
ES=1;
PS=1;
EA=1;
}
................................................................
uart.h
}
} */
void uart_rev_irt() interrupt 4
{
uchar dat;
while(RI==0);
RI=0;
dat=SBUF;
if(mode_cnt==0&&dat==0xFA)mode_cnt=2;
if(mode_cnt==2&&dat==0xAF)
{
flag_jieshou=1;
input_cnt=0;
return;
}
if(mode_cnt==2&&flag_jieshou&&input_cnt<10)
{
if(input_cnt<4)val_dat[input_cnt]=dat;
else if(input_cnt==4)val_yiwei_r=dat;
else if(input_cnt==5)val_chengwei_r=dat;
else if(input_cnt<10)val_dat_rr[input_cnt-6]=dat;
input_cnt++;
if(input_cnt==10)
{
flag_jieshou=0;
input_cnt=4;
}
}
}
[此貼子已經被作者于2013-1-2 16:01:16編輯過]
|