找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3476|回复: 1
收起左侧

求大神帮忙看下这个程序,写下程序框图,帮忙理解

[复制链接]
ID:47600 发表于 2013-1-2 15:58 | 显示全部楼层 |阅读模式
#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编辑过]
回复

使用道具 举报

ID:7485 发表于 2013-1-6 09:30 | 显示全部楼层
这个怎么看啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表