⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q.c

📁 msp430单片机与dsp的同步通信及传输过程中的显示及编码
💻 C
📖 第 1 页 / 共 3 页
字号:
                    *(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
                    *(p2+10)=0xc1,*(p2+11)=0xf7;//"流"=0xc1f7
                    *(p2+12)=0x20,*(p2+13)=0x20;
                    }
                else if(m1&BIT2)
                  {
                    *(p2+3)=0x20;
                    *(p2+4)=0xca,*(p2+5)=0xe4;//"输"=0xcae4
                    *(p2+6)=0xb3,*(p2+7)=0xf6;//"出"=0xb3f6
                    *(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
                    *(p2+10)=0xd1,*(p2+11)=0xb9;//"压"=0xd1b9
                    *(p2+12)=0x20,*(p2+13)=0x20;
                    }
                else if(m1&BIT1)
                  {
                    *(p2+3)=0x20;
                    *(p2+4)=0xca,*(p2+5)=0xe4;//"输"=0xcae4
                    *(p2+6)=0xc8,*(p2+7)=0xeb;//"入"=0xc8eb
                    *(p2+8)=0xb9,*(p2+9)=0xfd;//"过"=0xb9fd
                    *(p2+10)=0xc7,*(p2+11)=0xb7;//"欠"=0xc7b7
                    *(p2+12)=0xd1,*(p2+13)=0xb9;//"压"=0xd1b9
                    }
                else if(!(m1&BIT0))
                  {//m1.0=0
                    *(p2+3)=0x20;
                    *(p2+4)=0xb9,*(p2+5)=0xfd;//"过"=0xb9fd
                    *(p2+6)=0x20,*(p2+7)=0x20;
                    *(p2+8)=0xc8,*(p2+9)=0xc8;//"热"=0xc8c8
                    *(p2+10)=0x20,*(p2+11)=0x20;
                    *(p2+12)=0x20,*(p2+13)=0x20;
                    }
                if(m1&BIT7)
                  {               //处理整个系统的运行状态
                    string[0][12]=0xce;//"稳"=0xcec8
                    string[0][13]=0xc8;
                    string[0][14]=0xd1;//"压"=0xd1b9
                    string[0][15]=0xb9;
                    }
                else
                  {
                    string[0][12]=0xce;//"稳"=0xcec8
                    string[0][13]=0xc8;
                    string[0][14]=0xc1;//"流"=0xc1f7
                    string[0][15]=0xf7;
                    }
                p2+=16;
                }    
            }
        if(bytes==32) NISP=4,bytes=0,p2=string[0];
        }
    else 
      {       //NISP=4接收参数值
        if(bytes==0)
        k=m1<<8,bytes+=1;
        else if(bytes==1)
          {               //处理电压值
            k+=m1;
            k+=k<<1;//k*3
            L=k>>10;//L/1024,L是电压值的整数部分
            if(L>=10)
              {       //电压值不小于10V
                *(p2+21)=0x31;//十位数字
                *(p2+22)=L-10+0X30;//个位数字
                *(p2+23)=0x2e;//小数点
                k-=(L<<10);
                k=k<<1;//k*10
                k=k+(k<<2);
                *(p2+24)=(k>>10)+0X30;//十分位数字
                }
            else 
              {       //电压值小于10V
                *(p2+21)=L+0x30;//个位数字
                *(p2+22)=0x2e;//小数点
                k-=(L<<10);
                k=k<<1;//k*10
                k=k+(k<<2);
                L=k>>10;
                *(p2+23)=L+0X30;//十分位数字.
                k-=(L<<10);
                k=k<<1;//k*10
                k=k+(k<<2);
                *(p2+24)=(k>>10)+0X30;//百分位数字
                }
            bytes+=1;
            }
        else if(bytes==2) bytes+=1;//总电流值的第一个字节肯定为0x00
        else if(bytes==3)           //总电流值的第二个字节
          {               //处理总电流值
            if(m1) *(p2+55)=0x31;//万位数字
            else *(p2+55)=0x20;//万位数字
            bytes+=1;
            }
        else if(bytes==4) k=m1,bytes+=1;//总电流值的第三个字节
        else if(bytes==5)
          {                 //总电流值的第四个字节
            if(*(p2+55)==0x31) k=24576+(k<<8)+m1;
            else 
              {
                k=(k<<8)+m1;
                if(k>=0xa000) *(p2+55)=0x31,k-=0xa000;//万位数字
                else *(p2+55)=0x20;//万位数字
                }
            L=k>>12;//L=k/4096
            if(L) *(p2+56)=L+0x30;//千位数字
            else if(*(p2+55)==0x20) *(p2+56)=0x20;
                 else *(p2+56)=0x30;
            k-=(L<<12);
            k=k<<1;//k*10
            k=k+(k<<2);
            L=k>>12;//L=k/4096
            if(L) *(p2+57)=L+0x30;//百位数字
            else if(*(p2+56)==0x20) *(p2+57)=0x20;
                 else *(p2+57)=0x30;
            k-=(L<<12);
            k=k<<1;//k*10
            k=k+(k<<2);
            L=k>>12;//L=k/4096
            if(L) *(p2+58)=L+0x30;//十位数字
            else if(*(p2+57)==0x20) *(p2+58)=0x20;
                 else *(p2+58)=0x30;
            k-=(L<<12);
            k=k<<1;//k*10
            k=k+(k<<2);
            *(p2+59)=(k>>12)+0x30;//个位数字
            bytes+=1;
            }
        else if(bytes==6) bytes+=1;
        else if(bytes==7) 
          {       //总机器数量
            if(m1>=10) 
            *(p2+8)=0x31,*(p2+9)=0x26+m1;
            else *(p2+8)=0x20,*(p2+9)=0x30+m1; 
            bytes+=1;
            }
        else if(bytes==8) bytes+=1;
        else if(bytes==9) 
          {       //正常运行的机器数量
            bytes+=1;
            } 
        else if(bytes==10) bytes+=1;
        else //if(bytes==11) 
          {       //本机的机号
            bytes+=1;
            k=m1+1;
            if(k>=10) 
            *(p2+5)=0x31,*(p2+6)=0x26+k;
            else *(p2+5)=0x20,*(p2+6)=0x30+k; 
            p3=string[2];//将本机的电流值或工作状态复制到主页
            for(i=37;i<47;i++)//先将原有的记录清除掉
            *(p2+i)=0x20;
            for(i=0;i<16;i++)
              if(*(p2+5)==*p3&&*(p2+6)==*(p3+1))
                for(j=3;j<14;j++)
                  *(p2+34+j)=*(p3+j),i=15;
              else p3+=16;
              BootChar1=0,bytes=0;
              if(status==10) Display(string[0]);
              else if(status==30) Display(string[2]);
                else if(status==40) Display(string[3]);
                  else if(status==50) Display(string[4]);
                    else if(status==60) Display(string[5]);
            }
        /*else if(bytes==12) bytes+=1;
        else if(bytes==13)    
          {           //识别指令类型即工作模式
            if(m1==0x41)
              {            //收到稳流工作指令
                string[1][41]=0x30;//将电压设定值的缓冲区清0
                string[1][42]=0x56;
                string[1][43]=0x20;
                string[1][44]=0x20;
                string[1][45]=0x20;
                }
            else if(m1==0x56)
              {
                string[1][9]=0x30;//将电流设定值的缓冲区清0
                string[1][10]=0x41;
                string[1][11]=0x20;
                string[1][12]=0x20;
                string[1][13]=0x20;
                string[1][14]=0x20;
                }
            bytes+=1;
            }
        else if(bytes==14) k=m1,bytes+=1;
        else //if(bytes==15)
          {
            BootChar1=0,bytes=0;
            if(status==10) Display(string[0]);
              else if(status==30) Display(string[2]);
                else if(status==40) Display(string[3]);
                  else if(status==50) Display(string[4]);
                    else if(status==60) Display(string[5]);
            }*/
        }
    }
    
    
main(void)
  {
    WDTCTL=WDTPW+WDTHOLD;//停止看门狗
    _DINT();//关中断
    IO_init();//进行I/O初始化
    SPI_init();//首先进行SPI通信初始化
    U0TXBUF=0x00;
    LCM_init();//液晶显示器初始化
    Display(string[0]);//显示主页
    _EINT();//开中断
    while(1)
      {
        if(keyxd())
          {
            keybuf=key_scan();
	    delay(500);//延时消抖动
	    if((keyxd()!=0)&&(keybuf==key_scan()))
              {
                while(keyxd()!=0);
                keyp();//调用按键处理子程序 
                }
            }
        }
    }

#pragma vector=UART0RX_VECTOR
__interrupt void UART0RX(void)//UART0的SPI模式接收中断子程序
  {
    m5=U0RXBUF;
    if(m4==0) m1=m5<<m2,m3=m1;
    else m1=m3+(m5>>(8-m2)),m3=m5<<m2;
    if(BootChar1!=4)
      {                 //尚未收到四个连续的引导字符0xf0
        m4+=1;
        if(m1==0xf0) BootChar1+=1;
        else 
          {
            BootChar1=0;
            if(m4==132) 
              {
                m2+=1;
                if(m2==8) m2=0;
                m4=0;
                } 
            }
        if(BootChar1==4) NISP=1,p2=string[2];
        }
    else Pro_data();//已经收到四个连续的引导字符0xf0*/
    }
    

/*关于状态参数status的说明
status=10:主页的初始状态
status=20:第二页的初始状态
status=22:正在设置电流值
status=24:正在设置电压
status=30:正在显示第三页
status=40:正在显示第四页
status=50:正在显示第五页
status=60:正在显示第六页
*/
/*关于键盘的说明
  1       2       3       选择
  
  4       5       6       删除
  
  7       8       9       确认
  
  .       0      上翻     下翻
*/
/*关于变量的说明
Value:电流值设定过程中用于保存电流值的中间结果.在设定电压值
      //后(工作模式发生改变)被清0,否则维持原来的值不变.初值为0
VH,VL:电压值设定过程中用于保存电压值的中间结果,VH保存整数部分,VL保存小数部
      //分.在设定电流值后被清0(工作模式发生改变),否则维持原来的值不变.初值为0
Parameter[4],Parameter[5]:设定值最终结果的高8位(整数部分)和低8位(小数部分),初值为0
Parameter[5]:机器号.无机器号输入(缺省值)则为0x65
*/
/*程序中用到的汉字的编码:
电:0xb5e7 压:0xd1b9 流:0xc1f7 机:0xbbfa 号:0xbac5 输:0xcae4 入:0xc8eb 出:0xb3f6 过:0xb9fd 
欠:0xc7b7 驱:0xc7fd 动:0xb6af 保:0xb1a3 护:0xbba4 热:0xc8c8 总:0xd7dc 设:0xc9e8 定:0xb6a8 稳:0xcec8
*/
/*
  X   X   X   X   X   X   X   X   X   X   X   X   X   X   X   X 
  0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -