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

📄 lcd 带字库编程.txt

📁 基于FPGA的lcd的驱动程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
      caozuogongnengbiaozhi=7;          //清操作功能选择标志
      anjianbianliang&=0xFb;
    }
    if(anjianbianliang&0x08)              //取消键按下操作页面
    {
      caozuoyemian=1;                    
      caozuogongnengbiaozhi=7;          //清操作功能选择标志
      chucijinruyemian=1;                //将初次进入页面标志置,以便下个页面使用
      anjianbianliang&=0xF7;
    }
    switch(dianliuxuanzebianliang)      //在电流选择变量应的地方闪烁
    {
    case 0: Char_Set_XY (1, 1, "5A  "); break;
    case 1: Char_Set_XY (5, 1, "1A  ");  break;
    case 2: Char_Set_XY (8, 0, " 100mA"); break;
    case 3: Char_Set_XY (12, 0, "10mA"); break;
    default: break;
    }
  }
}


//////////////////////////////////显示内存数据函数//////////////////////////////////////////////

     
void xianshineicunshuju()      // 显示内存数据函数
{
  
}



void baiweishujuxianshihanshu(uint x,uchar y,uint z)       //变量百位在液晶屏上的显示函数
{
  switch(z/100)
  {
  case 0: Char_Set_XY (x, y, "0"); break;
  case 1: Char_Set_XY (x, y, "1"); break;
  case 2: Char_Set_XY (x, y, "2"); break;
  case 3: Char_Set_XY (x, y, "3"); break;
  case 4: Char_Set_XY (x, y, "4"); break;
  case 5: Char_Set_XY (x, y, "5"); break;
  case 6: Char_Set_XY (x, y, "6"); break;
  case 7: Char_Set_XY (x, y, "7"); break;
  case 8: Char_Set_XY (x, y, "8"); break;
  case 9: Char_Set_XY (x, y, "9"); break;
  default: break;
  }
}


void shiweishujuxianshihanshu(uint x,uchar y,uint z)       //变量十位数据在液晶屏上的显示函数
{
  switch((z%100)/10)
  {
  case 0: Char_Set_XY (x, y, "0"); break;
  case 1: Char_Set_XY (x, y, "1"); break;
  case 2: Char_Set_XY (x, y, "2"); break;
  case 3: Char_Set_XY (x, y, "3"); break;
  case 4: Char_Set_XY (x, y, "4"); break;
  case 5: Char_Set_XY (x, y, "5"); break;
  case 6: Char_Set_XY (x, y, "6"); break;
  case 7: Char_Set_XY (x, y, "7"); break;
  case 8: Char_Set_XY (x, y, "8"); break;
  case 9: Char_Set_XY (x, y, "9"); break;
  default: break; 
  }
}


void geweishujuxianshihanshu(uint x,uchar y,uint z)       //变量个位数据在液晶屏上的显示函数
{
  switch(z%10)
  {
  case 0: Char_Set_XY (x, y, "0"); break;
  case 1: Char_Set_XY (x, y, "1"); break;
  case 2: Char_Set_XY (x, y, "2"); break;
  case 3: Char_Set_XY (x, y, "3"); break;
  case 4: Char_Set_XY (x, y, "4"); break;
  case 5: Char_Set_XY (x, y, "5"); break;
  case 6: Char_Set_XY (x, y, "6"); break;
  case 7: Char_Set_XY (x, y, "7"); break;
  case 8: Char_Set_XY (x, y, "8"); break;
  case 9: Char_Set_XY (x, y, "9"); break;
  default: break; 
  }
}





///////////////////////////////////时钟调整函数/////////////////////////////////////////////


void shizhongtiaozheng()      //时钟调整函数
{
}


///////////////////////////////////打印机函数/////////////////////////////////////////////
      
    
void dayinji()                //打印机函数
{
}




////////////////////////////////测试函数(所有数据均在没有校准的情况下)////////////////////////////////////////
//////////////////100mA的继电器处于常闭的状态,要测试其它的电流应该先打开对应档位再去关掉100mA档位/////////////

void ceshi()                  //测试函数
{
  if(caozuogongnengbiaozhi==0)        //如果开始测试被选择进入函数
  {
    if(zhidongceshibiaozhi==1) zidongceshihanshu();       //如果选择自动测试则进入自动测试函数
    else shoudongceshihanshu();       //没有选择自动测试则进入手动测试函数
    caozuogongnengbiaozhi=7;
  }
}


void zidongceshihanshu()         //如果选择自动测试则进入自动测试函数
{
  zidongceshidianliubiaozhi=3;    //自动测试电流标志赋初值
  chaofanweibiaozhi=0;                          //超范围标志复位
  yiceliangbiaozhi=0;              //已测量标志
  WriteCom(0x01);                       //清除液晶屏
  Char_Set_XY (1, 0, "正在自动测试");       //发送正在自动测试中字符
  Char_Set_XY (1, 1, "请等待。。。                                          ");       //发送 请等待。。。 字符
  ceshidianzu10mA();      //测试电阻10mA函数,在10mA的电流下测试电阻
  if(yiceliangbiaozhi==0)
    ceshidianzu100mA();       //测试电阻100mA函数,在100mA的电流下测试电阻
  if(yiceliangbiaozhi==0)
    ceshidianzu1A();        //测试电阻1A函数,在1A的电流下测试电阻
  if(yiceliangbiaozhi==0)
    ceshidianzu5A();             //测试电阻10A函数,在10A的电流下测试电阻
  //if(chaofanweibiaozhi==0)  celiangbiaozhundianzu(); //如果没有超出范围进行标准电阻测量,并显示结果 
  zhidongceshibiaozhi=0;  //清自动测试标志
}



void ceshidianzu5A()           //测试电阻5A函数
{
  if(zidongceshidianliubiaozhi==0)
  {
    beishubiaozhi=7;    //倍数标志置7
    bcdzdy1=1000;                  //暂时测量数1赋初值   
    bzdzdy2=2;                  //暂时测量数2赋初值  为了使这两个数组的初值不相等
    P4OUT|=BIT3;               //打开5A电流开关
    P4OUT|=BIT0;               //关闭10mA电流
    P4OUT|=BIT7;
    P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
    //P4OUT|=BIT6;                //打开6倍
    msec(10000);
    while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
    {
      msec(1000);
      bcdzdy1=bcdzdy;
    }
    P4OUT&=~BIT6;       //关闭6倍
    if(bcdzdy1<0x08)         //小于1mΩ
      chaofanweihanshu();                   //超范围函数,超出范围如何处理
    if(bcdzdy1>=0x08&&bcdzdy1<=0x10)        //1mΩ~2mΩ
    {
       //P1OUT|=BIT4;        //打开200倍
      // beishubiaozhi=0;    //倍数标志置0
       celiangbiaozhundianzu();
    }
    else P1OUT&=~BIT4;        //关闭200倍
    if(bcdzdy1>0x10&&bcdzdy1<=0x21)        //2mΩ~4mΩ
    {
       //P1OUT|=BIT5;        //打开100倍
       //beishubiaozhi=1;    //倍数标志置1
       celiangbiaozhundianzu();
    }
    else P1OUT&=~BIT5;        //关闭100倍
    if(bcdzdy1>0x21&&bcdzdy1<=0x42)        //4mΩ~8mΩ
    {
       //P3OUT|=BIT0;        //打开50倍
       //beishubiaozhi=2;    //倍数标志置2
       celiangbiaozhundianzu();
    }
    else P3OUT&=~BIT0;        //关闭50倍
    if(bcdzdy1>0x42&&bcdzdy1<=0x83)        //8mΩ~16mΩ
    {
       //P4OUT|=BIT4;        //打开25倍
       //beishubiaozhi=3;    //倍数标志置3
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT4;        //关闭25倍
    if(bcdzdy1>0x83&&bcdzdy1<=0x106)        //16mΩ~32mΩ
    {
       //P4OUT|=BIT5;        //打开12.5倍
      // beishubiaozhi=4;    //倍数标志置4
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT5;        //关闭12.5倍
    if(bcdzdy1>0x106&&bcdzdy1<=0x189)        //32mΩ~48mΩ
    {
       //P4OUT|=BIT6;        //打开6倍
       //beishubiaozhi=5;    //倍数标志置5
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT6;        //关闭6倍
    //if(bcdzdy1>0xc50)        //大于48mΩ
     // zidongceshidianliubiaozhi=1;
    P4OUT&=~BIT0;               //打开10mA电流开关
    P4OUT&=~BIT3;               //关闭5A电流开关
   }
}


void ceshidianzu1A()        //测试电阻1A函数,在10A的电流下测试电阻 
{
  if(zidongceshidianliubiaozhi==1)
  {
    beishubiaozhi=7;    //倍数标志置7
    bcdzdy1=1000;      //暂时测量数1赋初值   
    bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
    P4OUT|=BIT2;               //1A电流开关
    P4OUT|=BIT0;               //关闭10mA电流开关
    P4OUT|=BIT7;
    P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
    //P1OUT&=~BIT4;
    //P1OUT&=~BIT5;     
    //P3OUT&=~BIT0;
    //P4OUT&=~BIT4;
    //P4OUT&=~BIT5;
    //P4OUT&=~BIT6;                    //关闭所有电阻,放大一倍
    msec(10000);
    while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
    {
      msec(1000);
      bcdzdy1=bcdzdy;
    }
    if(bcdzdy1>=0x69&&bcdzdy1<=0x127)        //64mΩ~180mΩ
    {
      // P4OUT|=BIT5;        //打开12.5倍
      // beishubiaozhi=4;    //倍数标志置4
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT5;        //关闭12.5倍
    if(bcdzdy1>0x127&&bcdzdy1<=0x28f)        //180mΩ~400mΩ
    {
       //P4OUT|=BIT6;        //打开6倍
       //beishubiaozhi=5;    //倍数标志置5
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT6;        //关闭6倍
    if(bcdzdy1>0x28f&&bcdzdy1<=0xf5c)        //400mΩ~2.4Ω
    {
       celiangbiaozhundianzu();
    }
    if(bcdzdy1<0x69)        //大于2.4Ω
      zidongceshidianliubiaozhi=0;
    P4OUT&=~BIT0;               //打开10mA电流开关
    P4OUT&=~BIT2;               //关闭1A电流开关
  }
}


void ceshidianzu100mA()       //测试电阻100mA函数,在100mA的电流下测试电阻
{
  if(zidongceshidianliubiaozhi==2)
  {
    beishubiaozhi=7;    //倍数标志置7
    bcdzdy1=1000;      //暂时测量数1赋初值   
    bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
    P4OUT|=BIT1;               //打开100mA电流开关
    P4OUT|=BIT0;               //关闭10mA电流开关
    P4OUT|=BIT7;
    P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
    msec(10000);
    while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
    {
      msec(1000);
      bcdzdy1=bcdzdy;
    }
    if(bcdzdy1>0x189&&bcdzdy1<=0x28f)        //2.4Ω~4Ω
    {
      // P4OUT|=BIT6;        //打开6倍
       //beishubiaozhi=5;    //倍数标志置5
       celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT6;        //关闭6倍
    if(bcdzdy1>0x28f&&bcdzdy1<=0xf5c)        //4Ω~24Ω
    {
       celiangbiaozhundianzu();
    }
    if(bcdzdy1<0x189)        //大于2.4Ω
      zidongceshidianliubiaozhi=1;
    P4OUT&=~BIT0;               //打开10mA电流开关
    P4OUT&=~BIT1;               //关闭100mA电流开关
  }
}


void ceshidianzu10mA()      //测试电阻10mA函数,在10mA的电流下测试电阻
{
  if(zidongceshidianliubiaozhi==3)
  {
    beishubiaozhi=7;    //倍数标志置7
    bcdzdy1=1000;      //暂时测量数1赋初值   
    bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
    //P4OUT|=BIT0;               //关闭10mA电流开关
    P4OUT|=BIT7;
    P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
    msec(10000);
    while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
    {
      msec(1000);
      bcdzdy1=bcdzdy;
    }
    if(bcdzdy1<0x189)        //大于2.4Ω
      zidongceshidianliubiaozhi=2;
    if(bcdzdy1>0x189&&bcdzdy1<=0x28f)        //2.4Ω~4Ω
    {
       //P4OUT|=BIT6;        //打开6倍
      // beishubiaozhi=5;    //倍数标志置5
      celiangbiaozhundianzu();
    }
    else P4OUT&=~BIT6;        //关闭6倍
    if(bcdzdy1>0x28f&&bcdzdy1<=0xd28)        //4Ω~24Ω
    {
       celiangbiaozhundianzu();
    }
    if(bcdzdy1>0xd28)        //大于2.4Ω
      chaofanweihanshu();
    //P4OUT&=~BIT0;               //打开10mA电流开关
  }
}



void chaofanweihanshu()       //超范围函数,超出范围如何处理
{
  WriteCom(0x01);                       //清除液晶屏
  Char_Set_XY (2, 0, "对不起!");              //显示字符
  if(zidongceshidianliubiaozhi==0)          
  Char_Set_XY (9, 0, "被测电阻过小");       //如果在10A的电流下测量显示过小字符
  else Char_Set_XY (9, 0, "被测电阻过大");       //如果在100mA的电流下测量显示过大字符
  Char_Set_XY (9, 1, "按确认键返回      ");       //显示字符
  chaofanweibiaozhi=1;                          //超范围标志置位
  yiceliangbiaozhi=1;                         //已测量标志置1
  while((P5IN&BIT6)!=0);             //确认键没有按下
  while((P5IN&BIT6)==0);             //确认键没有释放
  caozuoyemian=1;                   //返回操作页面
  chucijinruyemian=1;               //将初次进入页面标志置1
  caozuogongnengbiaozhi=7;          //清操作功能选择标志
}


void celiangbiaozhundianzu()      //测量标准电阻函数
{/*
  P4OUT&=~BIT7;
  P5OUT&=~BIT3;             //使标准电阻接入放大器,被测电阻断开
  if(zidongceshidianliubiaozhi==0)                      //5A时,标准电阻电压放大2倍
  {
    P1OUT&=~BIT4;
    P1OUT&=~BIT5;     
    P3OUT&=~BIT0;
    P4OUT&=~BIT4;
    P4OUT&=~BIT5;
    P4OUT&=~BIT6;                    //关闭所有电阻,放大一倍
     while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
    {
      bzdzdy2=bzdzdy;
    }
  }
  
  if(zidongceshidianliubiaozhi==1)                      //1A时,标准电阻电压放大32倍
  {
    P1OUT&=~BIT4;
    P1OUT&=~BIT5;     
    P3OUT&=~BIT0;
    P4OUT&=~BIT4;
    P4OUT&=~BIT5;
    P4OUT&=~BIT6;                    //关闭其它电阻,放大6倍
     while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
    {
      bzdzdy2=bzdzdy;
    }
  }
  
  if(zidongceshidianliubiaozhi==2)                      //100mA时,标准电阻电压放大320倍
  {
    P1OUT&=~BIT4;
    P1OUT&=~BIT5;     
    P3OUT&=~BIT0;
    P4OUT|=BIT4;
    P4OUT&=~BIT5;
    P4OUT&=~BIT6;                    //关闭其它电阻,放大50倍
     while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
    {
      bzdzdy2=bzdzdy;
    }
    bzdzdy2=(bzdzdy2/25);
    P4OUT&=~BIT4;
  }
  
  if(zidongceshidianliubiaozhi==3)                      //10mA时,标准电阻电压放大440倍
  {
    P1OUT|=BIT4;
    P1OUT&=~BIT5;     
    P3OUT&=~BIT0;
    P4OUT&=~BIT4;
    P4OUT&=~BIT5;
    P4OUT&=~BIT6;                    //关闭其它电阻,放大6倍
     while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
    {

⌨️ 快捷键说明

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