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

📄 2543.c

📁 单片机控制AD2543,同时通过液晶显示的程序
💻 C
📖 第 1 页 / 共 2 页
字号:

    //6号管 开始显示
  dis_7219(0x01,thou);    //千位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x05,hun);   //百位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x07,ten);   //十位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x03,entries);
  for(tune=0;tune<0xff;tune++){}
}
/*-----------------------------------------------------------*/
void t0int(void) interrupt 0 using 3
{
data      uchar thou ,hun,ten,entries, tune;
EA=0;
if(grain>=0)
 {
  grain=grain-1;
  //digitally_dis(grain,1);
   thou=grain/1000;
  hun= (grain-thou*1000 )/100;
  ten = (grain-thou*1000- hun* 100)/10;
  entries= grain-thou*1000- hun* 100-ten*10;

    //6号管 开始显示
  dis_7219(0x01,thou);    //千位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x05,hun);   //百位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x07,ten);   //十位
  for(tune=0;tune<0xff;tune++){}
  dis_7219(0x03,entries);
  for(tune=0;tune<0xff;tune++){}
  EA=1;
 }
 if (grain==0)
 {
  count=1;
 // digitally_dis(10,1);
 }
 delay(1);
}
/*-----------------------------------------------------------*/
void tra_buff(char da) //~~传送数据
{
 bit cf;
 ACC=da;
 cf=P;
 //取校验位 偶校验
 //abit7=P;  7位数据
 // cf=~cf;
 ab=da;
 abit7=cf;
 SBUF=ab;
 //rst_wdog();
}
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/


/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/

/*----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
void main(void)
{

data  uchar  i,addr,channel,j,addrw,key,addrd;
idata  uchar zzj;
idata int xx[30],wght ,wghtj;
long int t;
bit set,al,read,alarm,flag;
data union{
	uchar ch[2];
	uint i;
	}u;
zj:
    while(1){
  P1=0;
  delay(5);
  P1=1;
  delay(5);}
  dis_set();
   grain=0x0a;
   ii=grain;  //记住设定值                //reset  grain initial num
   dis_7219(0x01,0x00); //initial 1000 grain
   dis_7219(0x05,0x00);
   dis_7219(0x07,0x01);
   dis_7219(0x03,0x00);
   dis_7219(0x04,0x82);
   delay(20);
                //reset
zzj=0;     //求平均 计数器
addrd=3;      // 待显示地址 计数器
addr=2;          //5045内地址
flag=0;         //系统运行标志
EA=1;
EX0=1;

TMOD=0X20;
SCON=0x50;
TH1=0xf3;
SBUF=0;
TR1=1;

al=1;//+、-控制使能
channel=0;  //P1&0xf8;/*turn off output*/
SP=0xef;
set=0;   //set  read 转换控制标志
//wrsr_cmd(0); //1.4s reset  key=5;
while(1)  //主程序
{
  key=keyscan();
 // rst_wdog();
  switch(key){

  case 0:

    // delay(1);    //red light
    // dis_7219(0x04,0x80);   //green light
     if ( flag==1){
          for(i=0;i<30;i++)
          {
           xx[i]=ad_2543(channel);
          }
        for(i=0;i<30;i++)            //处理数据  排序
          {
            for(j = 0; j < 30- i; j++)
            {
             if (xx[j]>xx[j+1])
               {
                  t = xx[j];
                  xx[j] = xx[j + 1];
                   xx[j+1] = t;
                }
            }
          }
      t=0;
      for (i=0;i<30;i++)
         {
         t=t+xx[i];
         }

      wght=t/30;//1g ->0.44 无物体时wght=44
      if (wght<50)wght=50;

      wght=wght-50;
      t=wght/0.44;

      zzj=zzj+1;   //5个t取平均
      xx[zzj]=t;
      if (zzj==5)
        {
        //zzj=0;////////////实验附值  实验后改之  否则键盘不好使
        flag=0; //停止采样
        t=0;
        for(i=1;i<5;i++)
        t=t+xx[i];
        for(i=0;i<5;i++)
        xx[i]=0;
        t=t/4;
       if (t<0)t=0;
        digitally_dis(t,6);
        u.i=t; //存第一组数据
        addr=addr+1;
        wrsr_cmd(0);
        byte_write(addr,u.ch[0]);
        addr=addr+1;
        byte_write(addr,u.ch[1]);
        addrw=addr;
       }
      }
 //报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警报警
        for(i=0;i<10;i++)
          {
           xx[i]=ad_2543(channel);
          }

          for(i=0;i<10;i++)            //处理数据
          {
            for(j = 0; j < 10- i; j++)
              {
                 if (xx[j]>xx[j+1])
                   {
                    t = xx[j];
                    xx[j]  = xx[j + 1];
                    xx[j+1] = t;
                   }
              }
          }
         t=0;
         for (i=3;i<8;i++)
           {
            t=t+xx[i];
           }

        wght=t/5;//1g ->0.44 无物体时wght=44
        wght=wght-50;
        t=wght/0.44;
        if(t>3000)
           alarm=1; //报警条件报警条件报警条件报警条件报警条件报警条件报警条件报警条件报警条件
        if (alarm==1)
            for (j=0;j<2;j++)
                {
                  dis_7219(0x04,0x02);    //red light
                  delay(2);
                  t=0;
                  dis_7219(0x04,0x80);   //green light
                  delay(2);
                }
   break;

  case 1:  //读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读读
   led1=1;
   led2=0;
   led3=0;
   led4=0;
   set=~set;
   al=1;    //使能+-键
   if(set)
    {
    dis_7219(0x04,0x00);    //red light
    addrd=5;
    u.ch[0]=byte_read(addr-1);
    u.ch[1]=byte_read(addr);
    t=u.i;
    digitally_dis( t,1);
    delay(5) ;   //防止两次读键盘   抖动
     }
    if (!set)
     {
     if (count==1)
      {
       count=0;//2次计数开始标志
       //grain=0x0a;
      }
      dis_7219(0x04,0x02);    //red light
      grain=ii;
      digitally_dis(ii,1);
      delay(5) ;
      EA=1;
     }

  break;

  case 2:
  if (al==1)
  {
   led1=0;
   led2=1;
   led3=0;
   led4=0;
     if(set==1)
     {
        addrd=addrd-1;

       if( addrd==0)
          {
           addrd=5;
          }
       switch(addrd)
            {
               case 1: wrsr_cmd(0);
                u.ch[0]=byte_read(9);
                u.ch[1]=byte_read(10);   break;//no key
               case 2: wrsr_cmd(0);
                u.ch[0]=byte_read(7);
                u.ch[1]=byte_read(8); break;
               case 3: wrsr_cmd(0);
                u.ch[0]=byte_read(5);
                u.ch[1]=byte_read(6); break;
               case 4: wrsr_cmd(0);
                u.ch[0]=byte_read(3);
                u.ch[1]=byte_read(4); break;
               case 5: wrsr_cmd(0);
                u.ch[0]=byte_read(1);
                u.ch[1]=byte_read(2); break;
               default:break;
            }
            t=u.i;
            delay(5) ;
            digitally_dis(0x00,1);
            digitally_dis(t,1);
      }
     if(set==0)
     {

        grain=grain-1;
        ii=grain;
         if (ii<=0)
        {
          ii=0x0a;
        }

        digitally_dis( ii,1);
        delay(5) ;
        EA=1;
     }
   }
  break;



  case 3:
  if (al==1)
  {
   led1=0;
   led2=0;
   led3=1;
   led4=0;
    if (set==1)
        {      ///地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+/地址+
        addrd=addrd+1;

       if( addrd==6)
         {
          addrd=1;
         }
        switch(addrd)
         {
          case 1: wrsr_cmd(0);
                  u.ch[0]=byte_read(9);
                  u.ch[1]=byte_read(10);   break;//no key
          case 2: wrsr_cmd(0);
                  u.ch[0]=byte_read(7);
                  u.ch[1]=byte_read(8); break;
          case 3: wrsr_cmd(0);
                  u.ch[0]=byte_read(5);
                  u.ch[1]=byte_read(6); break;
          case 4: wrsr_cmd(0);
                  u.ch[0]=byte_read(3);
                  u.ch[1]=byte_read(4); break;
          case 5: wrsr_cmd(0);
                  u.ch[0]=byte_read(1);
                  u.ch[1]=byte_read(2); break;
          default:break;
         }

     t=u.i;
     delay(5) ;
     digitally_dis(0x00,1);
     digitally_dis(t,1);
    }

     if(set==0)
      {
      grain=grain+1;
      ii=grain;
      digitally_dis(ii,1);
      delay(5) ;
     }
  }
 break;
 //运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行//运行

 case 4:
   al=0;
   EA=0;//防止程序进中断
   led1=0;
   led2=0;
   led3=0;
   led4=1;
     read=0;
     //set=1;
     alarm=0;
     dis_7219(0x04,0x80);
     digitally_dis(0x00,1);
     flag=1;
     zzj=0;
     if(addr>10)addr=0;
   break;
   case 5:
     //while(1);     wave 对5045 的reset 没反应
     delay(20);
     key=keyscan();
     if( key==5)
     goto zj;//reset
     read_Nbyte(xx,1,10);
     for(i=10;i>=1;i--)
     {
      tra_buff(xx[i-1]);

     }
   break;
   default:
   break;
  }
 }
}



⌨️ 快捷键说明

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