发 帖  
原厂入驻New
[问答]

怎么把下面的51程序(关于电子血压计设计的)改为MSP430

1371
分享





  1. <div align="left">#include<reg51.h></div><div align="left">#define uchar unsigned char</div><div align="left">#define uint unsigned int</div><div align="left">sbit DQ=P1^0;//ASDX001与单片机接口</div><div align="left">sbit RS=P3^5;</div><div align="left">sbit RW=P3^6;</div><div align="left">sbit EN=P3^7;</div><div align="left">unsigned char code str1[]={"blood pressure:  "};</div><div align="left">unsigned char code str2[]={"              "};</div><div align="left">uchar data disdata[5];</div><div align="left">uint tvalue;//压力值</div><div align="left">uchar tflag;//压力正负标志</div><div align="left">/*************************lcd1602程序**************************/</div><div align="left">void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)</div><div align="left">{unsigned int i,j;</div><div align="left">   for(i=0;i<ms;i++)</div><div align="left">    for(j=0;j<100;j++);</div><div align="left">}</div><div align="left">void wr_com(unsigned char com)//写指令//</div><div align="left">{ </div><div align="left">delay1ms(1);</div><div align="left">RS=0;</div><div align="left">RW=0;</div><div align="left">EN=0;</div><div align="left">P0=com;</div><div align="left">delay1ms(1);</div><div align="left">EN=1;</div><div align="left">delay1ms(1);</div><div align="left">EN=0;</div><div align="left">}</div><div align="left">void wr_dat(unsigned char dat)//写数据//</div><div align="left">{ </div><div align="left">delay1ms(1);;</div><div align="left">RS=1;</div><div align="left">RW=0;</div><div align="left">EN=0;</div><div align="left">P0=dat;</div><div align="left">delay1ms(1);</div><div align="left">EN=1;</div><div align="left">delay1ms(1);</div><div align="left">EN=0;</div><div align="left">}</div><div align="left">void lcd_init()//初始化设置//</div><div align="left">{</div><div align="left">delay1ms(15);</div><div align="left">wr_com(0x38);</div><div align="left">delay1ms(5);</div><div align="left">wr_com(0x08);</div><div align="left">delay1ms(5);</div><div align="left">wr_com(0x01);</div><div align="left">delay1ms(5);</div><div align="left">wr_com(0x06);</div><div align="left">delay1ms(5);</div><div align="left">wr_com(0x0c);</div><div align="left">delay1ms(5);</div><div align="left">}</div><div align="left">void display(unsigned char *p)//显示//</div><div align="left">{</div><div align="left">while(*p!='\0')</div><div align="left">{</div><div align="left">wr_dat(*p);</div><div align="left">p++;</div><div align="left">delay1ms(1);</div><div align="left">}</div><div align="left">}</div><div align="left">init_play()//初始化显示</div><div align="left">{ lcd_init();</div><div align="left">wr_com(0x80);</div><div align="left">display(str1);</div><div align="left">wr_com(0xc0);</div><div align="left">display(str2);</div><div align="left">   }</div><div align="left">void delay_asdx001(unsigned int i)//延时1微秒</div><div align="left">{</div><div align="left">   while(i--);</div><div align="left">}</div><div align="left">void asdx001rst()/*ds1820复位*/</div><div align="left">{ unsigned char x=0;</div><div align="left">DQ = 1;          //DQ复位</div><div align="left">delay_asdx001(4); //延时</div><div align="left">DQ = 0;          //DQ拉低</div><div align="left">delay_asdx001(100); //精确延时大于480us</div><div align="left">DQ = 1;          //拉高</div><div align="left">delay_asdx001(40); </div><div align="left">} </div><div align="left">uchar asdx001rd()/*读数据*/</div><div align="left">{ unsigned char i=0;</div><div align="left">unsigned char dat = 0;</div><div align="left">for (i=8;i>0;i--)</div><div align="left">{   DQ = 0; //给脉冲信号</div><div align="left">    dat>>=1;</div><div align="left">    DQ = 1; //给脉冲信号</div><div align="left">    IF(DQ)</div><div align="left">    dat|=0x80;</div><div align="left">    delay_asdx001(10);</div><div align="left">}</div><div align="left">   return(dat);</div><div align="left">}</div><div align="left">void asdx001wr(uchar wdata)/*写数据*/</div><div align="left">{unsigned char i=0;</div><div align="left">    for (i=8; i>0; i--)</div><div align="left">   { DQ = 0;</div><div align="left">     DQ = wdata&0x01;</div><div align="left">     delay_asdx001(10);</div><div align="left">     DQ = 1;</div><div align="left">     wdata>>=1;</div><div align="left">   }</div><div align="left">}</div><div align="left">read_pressure1()/*读取压力值并转换*/</div><div align="left">{</div><div align="left">asdx001rst();    </div><div align="left">asdx001wr(0xcc);//*跳过读序列号*/</div><div align="left">asdx001wr(0x44);//*启动压力转换*/</div><div align="left">asdx001rst();    </div><div align="left">}</div><div align="left">read_pressure2()</div><div align="left">{uchar a,b;</div><div align="left">asdx001wr(0xcc);//*跳过读序列号*/ </div><div align="left">asdx001wr(0xbe);//*读取压力*/ </div><div align="left">a=asdx001rd();</div><div align="left">b=asdx001rd();</div><div align="left">tvalue=b;</div><div align="left">tvalue<<=8;</div><div align="left">tvalue=tvalue|a;</div><div align="left">    if(tvalue<0x0fff)</div><div align="left">   tflag=0;</div><div align="left">    else</div><div align="left">   {tvalue=~tvalue+1;</div><div align="left">   tflag=1;</div><div align="left">   }</div><div align="left">return(tvalue);</div><div align="left">}</div><div align="left">/*******************************************************************/</div><div align="left">   void asdx001disp1()//压力值显示</div><div align="left">{   uchar flagdat;</div><div align="left">    disdata[0]=tvalue/1000+0x30;//百位数</div><div align="left">     disdata[1]=tvalue%1000/100+0x30;//十位数</div><div align="left">     disdata[2]=tvalue%100/10+0x30;//个位数</div><div align="left">     disdata[3]=tvalue%10+0x30;//小数位</div><div align="left">    </div><div align="left">     if(tflag==0)</div><div align="left">     flagdat=0x20;//正压力不显示符号</div><div align="left">     else</div><div align="left">       flagdat=0x2d;//负压力显示负号</div><div align="left">     if(disdata[0]==0x30)</div><div align="left">    {disdata[0]=0x20;//如果百位为0,不显示</div><div align="left">   if(disdata[1]==0x30)</div><div align="left">    {disdata[1]=0x20;//如果百位为0,十位为0也不显示</div><div align="left">    }</div><div align="left">   }}</div><div align="left">void asdx001disp2()</div><div align="left">  {uchar flagdat;</div><div align="left">    wr_com(0xc3);</div><div align="left">    wr_dat(flagdat);//显示符号位</div><div align="left">    wr_dat(disdata[0]);//显示百位</div><div align="left">    wr_dat(disdata[1]);//显示十位 </div><div align="left">    wr_dat(disdata[2]);//显示个位 </div><div align="left">    wr_dat(0x2e);//显示小数点 </div><div align="left">    wr_dat(disdata[3]);//显示小数位</div><div align="left">    wr_com(0xca);</div><div align="left">    wr_dat(0xdf);</div><div align="left">    wr_dat(0x43);</div><div align="left">   }</div><div align="left">/********************主程序***********************************/</div><div align="left">void main()</div><div align="left">{ </div><div align="left">init_play();//初始化显示</div><div align="left">   while(1)</div><div align="left">{   read_pressure1();//读取压力</div><div align="left">    read_pressure2();//读取压力</div><div align="left">    asdx001disp1();//显示</div><div align="left">    asdx001disp2();//显示</div><div align="left">}</div><div align="left">}</div>

复制代码




0
2014-6-4 18:36:58   评论 分享淘帖 邀请回答
4个回答
各位大神帮帮忙~~感激不尽~~毕设需要
2014-6-4 23:05:57 评论

举报

只需要改动IO设置和初始化程序就行了  感觉你用的是1602  换个初始化程序然后改一下RS RW EN的IO 应该就可以了
2014-6-12 10:15:30 评论

举报

2014-10-1 20:49:02 评论

举报

2014-10-6 13:34:18 评论

举报

只有小组成员才能发言,加入小组>>

1449个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

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