单片机的控制程序

[复制链接]
2751|2
 楼主| zhbwgh 发表于 2007-5-29 15:16 | 显示全部楼层 |阅读模式
#include&nbsp;&quot;W78E354.H&quot;<br />#define&nbsp;COUNT&nbsp;4&nbsp;&nbsp;//定义接收缓冲区的大小//<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />/*数据采集部分管脚定义*/<br />sbit&nbsp;RO=P2^0;//格雷码输入//<br />sbit&nbsp;RED=P2^1;//允许格雷码输入,低电平有效//<br />sbit&nbsp;DE=P2^2;//时钟输出允许,高电平有效//<br />sbit&nbsp;CLOCK=P2^3;//时钟输出//<br />/*串口输出部分管脚定义*/<br />sbit&nbsp;RE_DE=P1^4;//485控制引脚//<br />sbit&nbsp;Key_3=P0^4;<br />sbit&nbsp;Key_4=P0^5;<br />sbit&nbsp;ALARM=P0^3;<br />/*7219管脚定义*/<br />sbit&nbsp;LOAD&nbsp;=&nbsp;P0^2;&nbsp;//MAX7219&nbsp;&nbsp;&nbsp;&nbsp;Load-Data&nbsp;Input:&nbsp;&nbsp;<br />sbit&nbsp;DIN&nbsp;&nbsp;=&nbsp;P0^0;&nbsp;//MAX7219&nbsp;&nbsp;&nbsp;&nbsp;Serial-Data&nbsp;Input:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />sbit&nbsp;CLK&nbsp;&nbsp;=&nbsp;P0^1;&nbsp;//MAX7219&nbsp;&nbsp;&nbsp;Serial-Clock&nbsp;Input:&nbsp;<br />uchar&nbsp;bstop=0;/*结束泵工作的标志*/<br />uchar&nbsp;fstop=0;/*结束阀工作的标志*/<br />uchar&nbsp;key=0;<br />uchar&nbsp;key1=0;/*7219寄存器的标志设置*/<br />uchar&nbsp;idata&nbsp;displ[COUNT]={3,6,8};/*定义发送缓冲区*/<br />void&nbsp;COM_inter(void);/*声明函数变量*/<br />void&nbsp;manage_key1(void);<br />void&nbsp;manage_key2(void);<br />void&nbsp;Timer_ini(void);<br />void&nbsp;judge_key(void);<br />void&nbsp;collect(void);<br />main()<br />{&nbsp;<br />&nbsp;&nbsp;CLOCK=1;<br />&nbsp;&nbsp;RED=0;/*接收器允许*/<br />&nbsp;&nbsp;DE=1;/*发送器允许*/<br />&nbsp;&nbsp;Key_3=0;/*泵,阀初始化*/<br />&nbsp;&nbsp;Key_4=0;<br />&nbsp;&nbsp;RE_DE=0;/*485准备接收*/<br />&nbsp;&nbsp;Timer_ini();<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;collect();<br />&nbsp;&nbsp;&nbsp;&nbsp;judge_key();<br />&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;Timer_ini(void)&nbsp;//定时器的初始化//<br />{<br />&nbsp;&nbsp;TMOD=0x20;/*定时器0工作于方式2,定时器1工作于方式2,&nbsp;0010&nbsp;0010*/&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;TH1=0xb7;//实现数据传输率9600//<br />&nbsp;&nbsp;TL1=0xb7;<br />&nbsp;&nbsp;SCON=0x50;//选择串口工作方式1,打开接收允许//<br />&nbsp;&nbsp;PCON=0x00;//波特率倍增设置//<br />&nbsp;&nbsp;TR1=1;//启动定时器T1//<br />&nbsp;&nbsp;ES=1;EA=1;//允许串口中断//<br />}<br /><br />//--------------------------------------------------------<br />//函数名称:COM_send();串口发送函数<br />//函数功能:把数据缓冲区的4位数据发送出去<br />//--------------------------------------------------------<br />void&nbsp;COM_send(void)<br />{<br />&nbsp;&nbsp;uchar&nbsp;point;<br />&nbsp;&nbsp;for(point=0;point&ltCOUNT;point++)&nbsp;//连续发送4位数据,将数据发送到缓冲口//<br />&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBUF=displ[point];//发送数据//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(TI!=1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;ES=1;<br />}<br />//-----------------------------------------------<br />//函数名称:manage_key3()<br />//函数功能:按键3处理子程序<br />//-----------------------------------------------<br />void&nbsp;manage_key3(void)<br />{<br />&nbsp;bstop++;<br />&nbsp;if(bstop&lt=1)<br />&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;Key_3=1;/*使外部泵开始工作*/<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;Key_3=0;/*结束泵工作*/<br />&nbsp;&nbsp;bstop=0;/*标注清零*/<br />&nbsp;}&nbsp;<br /><br /><br />}<br />//-----------------------------------------------<br />//函数名称:manage_key4()<br />//函数功能:按键4处理子程序<br />//-----------------------------------------------<br />void&nbsp;manage_key4(void)<br />{<br />&nbsp;fstop++;/**/<br />&nbsp;if(fstop&lt=1)<br />&nbsp;{<br />&nbsp;&nbsp;Key_4=1;/*使外部阀开始工作*/<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;Key_4=0;/*结束外部阀开始工作*/<br />&nbsp;&nbsp;fstop=0;/*标注清零*/<br />&nbsp;}<br />}<br /><br />//--------------------------------------------------------<br />//函数名称:com_interrup()串口接收中断处理函数<br />//函数功能:接收包括起始位0xFE,地址位和终止位0xEF在内的10bit数据到数据缓冲区<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,地址不匹配,则接收到的是无效数字,不写到接收缓冲区<br />//--------------------------------------------------------<br />void&nbsp;COM_inter(void)&nbsp;interrupt&nbsp;4&nbsp;using&nbsp;1//串口处理函数//<br />{&nbsp;<br />&nbsp;&nbsp;uchar&nbsp;a;/*串口标志*/<br />&nbsp;&nbsp;RI=0;<br />&nbsp;&nbsp;RE_DE=0;<br />&nbsp;&nbsp;a=SBUF;<br />&nbsp;&nbsp;switch(a)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x01:ES=0;RI=0;manage_key1();ES=1;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x02:ES=0;RI=0;manage_key2();ES=1;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x03:ES=0;RI=0;manage_key3();ES=1;break;/*调用函数实现泵的控制*/<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x04:ES=0;RI=0;manage_key4();ES=1;break;/*调用函数实现阀的控制*/<br />&nbsp;&nbsp;&nbsp;&nbsp;default:RE_DE=1;RI=0;TI=0;&nbsp;ES=0;COM_send();break;/*使485处于发送状态,发送数据*/<br />&nbsp;&nbsp;}<br />}<br />/******************************************<br />发送一个字节的子程序:<br />上升沿发送数据,<br />MSB&nbsp;first<br />******************************************/<br />void&nbsp;Write_Max7219_byte(unsigned&nbsp;char&nbsp;temp)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&lt8;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLK&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DIN&nbsp;=&nbsp;(bit)(temp&0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;&lt&lt=1;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLK&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />/**********************************************************<br />向寄存器中写入一个数据<br />先写地址,后写数据<br />load&nbsp;上升沿锁存数据<br />**********************************************************/<br />void&nbsp;Write_Max7219(unsigned&nbsp;char&nbsp;address,unsigned&nbsp;char&nbsp;dat)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LOAD&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Write_Max7219_byte(address);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Write_Max7219_byte(dat);<br />&nbsp;&nbsp;&nbsp;&nbsp;LOAD&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//-----------------------------------------------<br />//函数名称:manage_key1()<br />//函数功能:按键1处理子程序<br />//-----------------------------------------------<br />void&nbsp;manage_key1(void)<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;key1++;/*进行寄存器的标志设置*/<br />&nbsp;&nbsp;key++;<br />&nbsp;&nbsp;switch(key1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;case&nbsp;1:Write_Max7219(1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80);break;//选择最低位寄存器,准备进行调节//<br />&nbsp;&nbsp;case&nbsp;2:Write_Max7219(2,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);break;//选择次低位寄存器,进行调节//<br />&nbsp;&nbsp;case&nbsp;3:Write_Max7219(3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);break;//选择次中间寄存器,进行调节//<br />&nbsp;&nbsp;case&nbsp;4:Write_Max7219(4,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0);break;//选择最高位寄存器,进行调节//<br />&nbsp;&nbsp;default:key1=0;break;<br />&nbsp;&nbsp;}<br />}<br />//-----------------------------------------------<br />//函数名称:manage_key2()<br />//函数功能:按键2处理子程序,对显示的数据进行增1调节<br />//-----------------------------------------------<br />void&nbsp;manage_key2(void)<br />{<br />&nbsp;&nbsp;switch(key)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:{displ[0]++;Write_Max7219(1,(displ[0]|0x80));if((displ[0]|0x80)==0x8A)displ[0]=(0|0x80);}break;//依次对显示进行增量调节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:{displ[1]++;Write_Max7219(2,displ[1]);if(displ[1]==10)displ[1]=0;}break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:{displ[2]++;Write_Max7219(3,displ[2]);if(displ[2]==10)displ[2]=0;}break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:{displ[3]++;Write_Max7219(4,displ[3]);if(displ[3]==10)displ[3]=0;key=0;}break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:key=0;break;<br />&nbsp;&nbsp;}<br />}<br />/*延时子程序,延时时间为(16×N+24微秒)*/<br />void&nbsp;delay(unsigned&nbsp;int&nbsp;N)<br />{<br />&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;for(i=0;i&ltN;i++);<br />}<br />//----键值判断--------------------------<br /><br />//---------------------------------------------------<br />void&nbsp;judge_key(void)<br />{uchar&nbsp;Key_value=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key_value=P1&0x0f;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(Key_value)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0E:delay(30000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Key_value==(P1&0x0f))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manage_key1();break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0D:delay(30000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Key_value==(P1&0x0f))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manage_key2();break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x0B:delay(30000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Key_value==(P1&0x0f))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manage_key3();break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x07:delay(30000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Key_value==(P1&0x0f))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manage_key4();break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />void&nbsp;collect(void)<br />{<br />&nbsp;&nbsp;uchar&nbsp;Gdata[25];<br />&nbsp;&nbsp;uchar&nbsp;Bdata[25];<br />&nbsp;&nbsp;uchar&nbsp;i,j,k,l=0;<br />&nbsp;&nbsp;unsigned&nbsp;long&nbsp;Tran=0;<br />&nbsp;&nbsp;for(i=0;i&lt25;i++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;CLOCK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;CLOCK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;Gdata=RO;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;i=0;<br />&nbsp;&nbsp;Bdata[0]=Gdata[0];/*将首位赋给二进制首位*/<br />&nbsp;&nbsp;for(j=1;j&lt=24;j++)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Gdata[j]==0)/*若格雷码为0,二进制与前一位相同*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bdata[j]=Bdata[j-1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else/*若格雷码为1,二进制与前一位相反*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{if(l==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{l++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Bdata[j-1]==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Bdata[j]=Bdata[j-1]-1;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Bdata[j]=Bdata[j-1]+1;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Bdata[j-1]==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Bdata[j]=Bdata[j-1]-1;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Bdata[j]=Bdata[j-1]+1;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l=0;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;for(k=0;k&lt=20;k++);/*延时*/<br />&nbsp;&nbsp;for(i=0;i&lt25;i++)/*将转换的二进制存入长整形变量*/<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tran^=Bdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tran=Tran&lt&lt1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;displ[0]=(Tran/62111);//二进制转换成显示的工程算法,Diaply0显示的是最高位,//<br />&nbsp;&nbsp;displ[1]=(Tran%62111)/6211;//此值赋给次高位//<br />&nbsp;&nbsp;displ[2]=((Tran%62111)%6211)/621;<br />&nbsp;&nbsp;displ[3]=(((Tran%62111)%6211)%621)/62;<br />&nbsp;&nbsp;if((displ[0]==9)&&(displ[1]==9))/*出错控制*/<br />&nbsp;&nbsp;&nbsp;{ALARM=0;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />程序在单独运行键盘显示时&nbsp;能用;单独测试串口时&nbsp;能够给单片机写入数据,上传的数据看不到&nbsp;我以为是数据格式的问题,但是将两个程序放在一起的时候,就不好用了&nbsp;请教这是为什么啊&nbsp;?多谢大家
lbx_00 发表于 2007-5-29 21:10 | 显示全部楼层

分点

  
lbx_00 发表于 2007-5-29 21:21 | 显示全部楼层

逐点调试

你说,下载数据成功了,你看到下载的数据被mcu保存了吗?上传的数据,你先编个小程序试试,上位先不要用你的程序,因为可能有错,先用串口助手,还有,连续发送aah或者55h,用示波器看看波特率。<br /><br />至于两个程序放在一起不好用,看看有没有冲突的地方,如果你要是有仿真器,就好办一些,要是没有,就要想办法显示主要信息,例如,关键程序是否已经执行了,执行的结果怎么样,认真分析现象,会判断出来的。<br /><br />你的问题不是大问题,和水平无关,但是要仔细。<br /><br />写程序不难,调试很重要。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

51

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部