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

📄 lcd 带字库编程.txt

📁 基于FPGA的lcd的驱动程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
      bzdzdy2=bzdzdy;
    }
    bzdzdy2=(bzdzdy2/200);
    P1OUT&=~BIT4;
  }
  P4OUT|=BIT7;
  P5OUT|=BIT3;             //使被测电阻接入放大器,标准电阻断开*/
  jisuangxianshihanshu();       //计算显示函数
  yiceliangbiaozhi=1;
}

void jisuangxianshihanshu()      //计算显示函数
{
  //long n=0,m=0,b=0;
  /*将被测电阻的电压值从16进制转化成10进制*/
  //dianzuzhizhuanhuan(bcdzdy,beicedianzuzhi_10);
  /*将标准电阻的电压值从16进制转化成10进制*/ 
  //dianzuzhizhuanhuan(bzdzdy,biaozhundianzu_10);
  switch(beishubiaozhi)
  {
  case 0: P1OUT|=BIT4;
  case 1: P1OUT|=BIT5;
  case 2: P3OUT|=BIT0;
  case 3: P4OUT|=BIT4;
  case 4: P4OUT|=BIT5;
  case 5: P4OUT|=BIT6;
  default:break;
  }
  WriteCom(0x01);                       //清除液晶屏
  Char_Set_XY (2, 0, "测试结果");       //发送字符到夜晶屏
  Char_Set_XY (1, 1, "测试电流");       //发送字符到夜晶屏
  shicedianliuxianshihanshu();                   //实测电流显示函数,将对应的选择电流值显示在液晶屏上
  Char_Set_XY (10, 0, "电阻值: ");       //发送字符到夜晶屏
  while((P5IN&BIT6)!=0)            //确认键没有按下
  {
    msec(1000);
    //if(bcdzdy!=bcdzdy1)
  //  {
     // bcdzdy1=bcdzdy;
      //shicebeicedianzuzhi=(bcdzdy1/(bzdzdy2*4));  //实测被测电阻值的计算 0.05*被测电阻电压/标准电阻电压
      shicebeicedianzuzhi=(((bcdzdy/4095)*5)/2);
      switch(zidongceshidianliubiaozhi)              //判断自动测试电流变量的值
      {
      case 0: shicebeicedianzuzhi=(shicebeicedianzuzhi/5); break;
      case 1: shicebeicedianzuzhi=((shicebeicedianzuzhi*132)/100); break;
      case 2: shicebeicedianzuzhi=((shicebeicedianzuzhi*132)/10); break;
      case 3: shicebeicedianzuzhi=(shicebeicedianzuzhi*116.3); break;
      default: break;
      }
      switch(beishubiaozhi)
      {
      case 0: shicebeicedianzuzhi=(shicebeicedianzuzhi/200); break;
      case 1: shicebeicedianzuzhi=(shicebeicedianzuzhi/100); break;
      case 2: shicebeicedianzuzhi=(shicebeicedianzuzhi/50); break;
      case 3: shicebeicedianzuzhi=(shicebeicedianzuzhi/25); break;
      case 4: shicebeicedianzuzhi=((shicebeicedianzuzhi/25)*2); break;
      case 5: shicebeicedianzuzhi=(shicebeicedianzuzhi/6); break;
      default:break;
      }
      shicedianzuzhengshu=shicebeicedianzuzhi;     //取实测被测电阻值的整数部分
      shicedianzuxiaoshu=(shicebeicedianzuzhi-shicedianzuzhengshu)*1000; //取实测被测电阻值的小数部分 保留三位小数
      baiweishujuxianshihanshu(8,1,shicedianzuzhengshu);//将实测电阻值的整数部分百位显示在液晶屏上对应的位置上
      shiweishujuxianshihanshu(9,1,shicedianzuzhengshu);//将实测电阻值的整数部分十位显示在液晶屏上对应的位置上
      geweishujuxianshihanshu(10,1,shicedianzuzhengshu); //将实测电阻值的整数部分个位显示在液晶屏上对应的位置上
      Char_Set_XY (11, 1, ".");                    //显示字符
      baiweishujuxianshihanshu(12,1,shicedianzuxiaoshu); //将实测电阻值的小数部分第1位显示在液晶屏上对应的位置上
      shiweishujuxianshihanshu(13,1,shicedianzuxiaoshu);//将实测电阻值的小数部分第2位显示在液晶屏上对应的位置上
      geweishujuxianshihanshu(14,1,shicedianzuxiaoshu);  //将实测电阻值的小数部分第3位显示在液晶屏上对应的位置上
      Char_Set_XY (15, 1, "Ω");
   // }
  }
  while((P5IN&BIT6)==0);             //确认键没有释放
  caozuoyemian=1;                   //返回操作页面
  chucijinruyemian=1;               //将初次进入页面标志置1
  caozuogongnengbiaozhi=7;          //清操作功能选择标志
  switch(beishubiaozhi)
  {
  case 0: P1OUT&=~BIT4;
  case 1: P1OUT&=~BIT5;
  case 2: P3OUT&=~BIT0;
  case 3: P4OUT&=~BIT4;
  case 4: P4OUT&=~BIT5;
  case 5: P4OUT&=~BIT6;
  default:break;
  }
}


void shicedianliuxianshihanshu()                   //实测电流显示显示函数,将对应的选择电流值显示在液晶屏上
{
  switch(zidongceshidianliubiaozhi)              //判断自动测试电流变量的值
  {
  case 0: Char_Set_XY (5, 1, ":5A "); break;
  case 1: Char_Set_XY (5, 1, ":1A "); break;
  case 2: Char_Set_XY (5, 1, ":100mA"); break;
  case 3: Char_Set_XY (5, 1, ":10mA "); break;
  default: break;
  }
}


/*
uint dianzuzhizhuanhuan(uint x,uint z)     //电阻值转换函数,把电阻值从16进制转换成10进制
{
  uint i;
  switch(x>>8)                         //先转换高四位
  {
    case 0x0000: i=0 ;break; 
    case 0x0001: i=1; break;  
    case 0x0002: i=2; break;   
    case 0x0003: i=3; break;  
    case 0x0004: i=4; break;     
    case 0x0005: i=5; break; 
    case 0x0006: i=6; break;  
    case 0x0007: i=7; break;   
    case 0x0008: i=8; break;  
    case 0x0009: i=9; break;
    case 0x000A: i=10;break; 
    case 0x000B: i=11;break;  
    case 0x000C: i=12;break;   
    case 0x000D: i=13;break;  
    case 0x000E: i=14;break; 
    case 0x000F: i=15;break;
    default: break;
  }
  z=i*256;                            
  switch((x&0x00f0)>>4)                         //转换中四位
  {
    case 0x0000: i=0 ;break; 
    case 0x0001: i=1; break;  
    case 0x0002: i=2; break;   
    case 0x0003: i=3; break;  
    case 0x0004: i=4; break;     
    case 0x0005: i=5; break; 
    case 0x0006: i=6; break;  
    case 0x0007: i=7; break;   
    case 0x0008: i=8; break;  
    case 0x0009: i=9; break;
    case 0x000A: i=10;break; 
    case 0x000B: i=11;break;  
    case 0x000C: i=12;break;   
    case 0x000D: i=13;break;  
    case 0x000E: i=14;break; 
    case 0x000F: i=15;break;
    default: break;
  }
  z=z+i*16;                      
  switch(x&0x000f)                         //转换低四位
  {
    case 0x0000: i=0 ;break; 
    case 0x0001: i=1; break;  
    case 0x0002: i=2; break;   
    case 0x0003: i=3; break;  
    case 0x0004: i=4; break;     
    case 0x0005: i=5; break; 
    case 0x0006: i=6; break;  
    case 0x0007: i=7; break;   
    case 0x0008: i=8; break;  
    case 0x0009: i=9; break;
    case 0x000A: i=10;break; 
    case 0x000B: i=11;break;  
    case 0x000C: i=12;break;   
    case 0x000D: i=13;break;  
    case 0x000E: i=14;break; 
    case 0x000F: i=15;break;
    default: break;
  }
  z=z+i;                      //转换单个元素的10进制的值
  return z;
}
 */ 


void shoudongceshihanshu()        // 手动测试函数
{
  WriteCom(0x01);                       //清除液晶屏
  Char_Set_XY (1, 0, "正在手动测试");       //发送正在自动测试中字符
  Char_Set_XY (1, 1, "测试电流");       //发送字符到夜晶屏
  switch(dianliuxuanzebiaozhi)              //判断电流选择标志的值
  {
  case 0: Char_Set_XY (5, 1, ":5A "); break;
  case 1: Char_Set_XY (5, 1, ":1A "); break;
  case 2: Char_Set_XY (5, 1, ":100mA"); break;
  case 3: Char_Set_XY (5, 1, ":10mA"); break;
  default: break;
  }
  Char_Set_XY (9, 1, "请等待。。。    ");       //发送 请等待。。。 字符
  switch(dianliuxuanzebiaozhi)              //判断电流选择标志的值
  {
  case 0: shoudong_5A(); break;
  case 1: shoudong_1A(); break;
  case 2: shoudong_100mA(); break;
  case 3: shoudong_10mA(); break;
  default: break;
  }
  //zidongceshidianliubiaozhi=dianliuxuanzebiaozhi;//电流选择标志赋于自动测试电流标志,以便存入EEPROM
}

void shoudong_5A()     //手动5A测试函数
{
  beishubiaozhi=7;    //倍数标志置7
  bcdzdy1=1000;      //暂时测量数1赋初值   
  bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
  P4OUT|=BIT3;               //打开10A电流开关
  P4OUT|=BIT0;               //关闭10mA电流开关
  zidongceshidianliubiaozhi=0;   //为在能显示对应的电流值
  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_1();                             //超范围
  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>0x189)        //大于48mΩ
    chaofanweihanshu_1();                             //超范围
  P4OUT&=~BIT0;             //打开10mA电流开关
  P4OUT&=~BIT3;                //关闭5A电流开关
}


void shoudong_1A()     //手动1A测试函数
{
  beishubiaozhi=7;    //倍数标志置7
  bcdzdy1=1000;      //暂时测量数1赋初值   
  bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
  P4OUT|=BIT2;               //打开1A电流开关
  P4OUT|=BIT0;               //关闭10mA电流开关
  zidongceshidianliubiaozhi=1;   //为在能显示对应的电流值
  P4OUT|=BIT7;
  P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
  msec(10000);
  while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
  {
    msec(1000);
    bcdzdy1=bcdzdy;
  }
  if(bcdzdy1<0x69)
    chaofanweihanshu_1();                             //超范围
  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>0xf5c)        //大于2.4Ω
    chaofanweihanshu_1();                             //超范围
  P4OUT&=~BIT0;               //打开10mA电流开关
  P4OUT&=~BIT2;               //关闭1A电流开关
}



void shoudong_100mA()     //手动100mA测试函数
{
  beishubiaozhi=7;    //倍数标志置7
  bcdzdy1=1000;      //暂时测量数1赋初值   
  bzdzdy2=2;      ////暂时测量数2赋初值  为了使这两个数组的初值不相等
  P4OUT|=BIT1;               //打开100mA电流开关
  P4OUT|=BIT0;               //关闭10mA电流开关
  zidongceshidianliubiaozhi=2;   //为在能显示对应的电流值
  P4OUT|=BIT7;
  P5OUT|=BIT3;              //使w1 b1接入网络,被侧电阻接入放大器
  msec(10000);
  while(((bcdzdy-bcdzdy1)>0x20)||((bcdzdy1-bcdzdy)>0x20))
  {
    msec(1000);
    bcdzdy1=bcdzdy;
  }
  if(bcdzdy1<0x189)
    chaofanweihanshu_1();                             //超范围
  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>0xf5c)        //大于2.4Ω
    chaofanweihanshu_1();                             //超范围
  P4OUT&=~BIT0;               //打开10mA电流开关
  P4OUT&=~BIT1;               //关闭1A电流开关
}



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


void chaofanweihanshu_1()           //手动超范围函数
{
  WriteCom(0x01);                       //清除液晶屏
  Char_Set_XY (2, 0, "对不起!");              //显示字符
  Char_Set_XY (8, 0, "电阻不在测量量程");       //显示字符
  Char_Set_XY (9, 1, "按确认键返回       ");       //显示字符
  while((P5IN&BIT6)!=0);             //确认键没有按下
  while((P5IN&BIT6)==0);             //确认键没有释放
  caozuoyemian=1;                   //返回操作页面
  chucijinruyemian=1;               //将初次进入页面标志置1
  caozuogongnengbiaozhi=7;          //清操作功能选择标志
}
  

///////////////////////////////////时钟函数/////////////////////////////////////////////


void shizhong()             //时钟函数
{
}

  
  
///////////////////////////////////EEPROM存储函数/////////////////////////////////////////////    
 


void epromcunchu()          //EEPROM存储函数  数据只存放在双数页地址中,可存储256组数据
{
  
}

⌨️ 快捷键说明

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