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

📄 zhjc.c

📁 51系列单片机的汇编程序包
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/* 得到键盘扫描码 */
uchar GetKey(bit isDispLed)
{
  uchar pos,i,k;
  i = 8;
  pos = 0x80;      /*扫描列*/
  do
  {
    *OUTBIT = ~pos;
    pos>>=1;
    k=~(*IN_KEY) & 0xf;
  } while ((--i!=0)&&(k==0));

  if(k!=0)  /* 键盘扫描码 = 列 * 4 + 行 */
  {
    i*=4;
    if(k&2) i+=1;
    else if(k&4) i+=2;
    else if(k&8) i+=3;
    *OUTBIT = 0;
    while(TestKey())   /*等键释放*/
      if(isDispLed)
        DispLed();
    return(i);         /*返回扫描码*/
  }
  else return(0xff);   /*键值超出范围*/
}

/* 显示运行状态 */
void DispRunStatus()
{
  LCD_DispLat(0, 0);   /*显示点阵*/
  LCD_DispStr(
    "        "
    " 按任意键退出 "
    " 正在运行…… "
    "        "
  );
}

/* 显示菜单 */
void DispMenu(uchar pages)
{
  LCD_DispLat(0, 0);    /*显示点阵*/
  switch(pages)
  {
    case 0: LCD_DispStr(DispMsg0); break;
    case 1: LCD_DispStr(DispMsg1); break;
    case 2: LCD_DispStr(DispMsg2); break;
    case 3: LCD_DispStr(DispMsg3); break;
  }
  LCD_DispCon(0xff,0xff,0x80,0x80,8,16);
  LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
}

/* 循环延时 */
void myDelay(uint myLoop, uint myDelayTimes)
{
  uint i;
  for(i=0;i<myLoop;i++)
  {
    if(TestKey()) break;
    Delay(myDelayTimes);
  }
}
/*录音程序,20秒*/
void RecSound()
{
    uchar count;
    for(count =0;count<20;count++)
        {
          *RecCs = RecTab[count];
          RecPlayDelay(2000);    /*延时20秒*/
        }
    *RecCs = 0xff;
}
/*放音程序   */
void *PlaySound  ()
{
    uchar count = 0;
    *RecCs = 0xff;
    RecPlayDelay(2);
    *RecCs = PlayTab [count];
    RecPlayDelay(50);
    *RecCs = 0x80;
    RecPlayDelay (50);
}


/* 主函数 */
void main()
{
  uchar keyval;
  uchar ad, da, pages = 0;
  uchar a, b, uv;
  uchar i;
  bit   fl;

  LCD_Init();           /*LCD初始化*/
  LCD_DispLat(0, 0);    /*显示点阵*/
  LCD_DispStr(
    "Dais Detect V1.0"  /*line1*/
    "达爱思软件工作室"  /*line3*/
    "实验装置综合检测"  /*line2*/
    "程序设计:高敏杰"  /*line4*/
  );
  LCD_DispCon(0xff,0xff,0x80,0x80,8,16);
  Delay(3000);
  LCD_ClrRam();
  LCD_DispStr(DispMsg0);
  LCD_DispCon(0xff,0xff,0x98,0x90,8,16);

  while(1)
  {
    if(TestKey())
    {
      keyval = GetKey(NoDisp);
      if(keyval>=0 && keyval<=31)
      {
        switch(keyval)
        {
          case kbB1:  /*按F1键*/
            if(pages==1)
            {
              LCD_ClrRam();
              LCD_DispStr(DispMsg0);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
              pages = 0;
            }
            else if(pages==2)
            {
              LCD_ClrRam();
              LCD_DispStr(DispMsg1);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
              pages = 1;
            }
            else if(pages==3)
            {
              LCD_ClrRam();
              LCD_DispStr(DispMsg2);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
              pages = 2;
            }
            break;

          case kbB0:  /*按F2键*/
            if(pages==0)
            {
              pages = 1;
              LCD_ClrRam();
              LCD_DispStr(DispMsg1);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
            }
            else if(pages==1)
            {
              pages = 2;
              LCD_ClrRam();
              LCD_DispStr(DispMsg2);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
            }
            else if(pages==2)
            {
              pages = 3;
              LCD_ClrRam();
              LCD_DispStr(DispMsg3);
              LCD_DispCon(0xff,0xff,0x98,0x90,8,16);
            }
            break;

          case kbA0:  /*按0键 - A/D*/
          case kbA4:  /*按4键 - 压力*/
            DispRunStatus();
            LedBuf[0] = 0xc0;
            LedBuf[1] = 0x80;
            LedBuf[2] = 0xc0;
            LedBuf[3] = 0x90;
            LedBuf[4] = 0xff;
            LedBuf[5] = 0xff;
            while(!TestKey())
            {
              switch(keyval)
              {
                case kbA0:
                  *(CS0809)=02;
                  /**(CS0809+2)=02;*/
                  ad=*(CS0809+2);
                  break;
                case kbA4:
                  *CS0809 = 1;
                  /**(CS0809+1)=1*/;
                  ad=*(CS0809+1);
                  break;
              }
              LedBuf[6] = LedMap[ad>>4];
              LedBuf[7] = LedMap[ad&0xf];
              DispLed();
            }
            DispMenu(pages);
            break;

          case kbA1:  /*按1键 - D/A输出波形*/
          case kbA6:  /*按6键 - 直流电机*/
            *CS0832 = DA_2V5;
            LCD_DispLat(0, 0);   /*显示点阵*/
            LCD_DispStr(
              " 调节基准电压 "
              "D/A AOUT输出2.5V"
              "调节W2电位器,使"
              " 按任意键继续 "
            );
            while(!TestKey());  /*任意键继续*/
            DispRunStatus();
            da = DA_0V;
            while(!TestKey())   /*任意键退出*/
            {
              *CS0832 = DA_0V;  myDelay(5,100);
              *CS0832 = DA_2V5; myDelay(10,100);
              *CS0832 = DA_5V;  myDelay(5,100);
              *CS0832 = DA_2V5; myDelay(10,100);
            }
            *CS0832 = DA_2V5;
            DispMenu(pages);
            break;

          case kbA2:  /*按2键 - I/O*/
            DispRunStatus();
            while(!TestKey()) *CS_IO = *CS_IO;
            DispMenu(pages);
            break;

          case kbA3:  /*按3键 - LedKey*/
            LCD_DispLat(0, 0);   /*显示点阵*/
            LCD_DispStr(
              "键盘显示综合实验"
              "注意:连续按4次"
              " 正在运行…… "
              "相同键退出实验!"
            );
            LedBuf[0] = 0xa1;
            LedBuf[1] = 0x88;
            LedBuf[2] = 0xf9;
            LedBuf[3] = 0x92;
            LedBuf[4] = 0xbf;
            LedBuf[5] = 0xbf;
            LedBuf[6] = 0xff;
            LedBuf[7] = 0xff;
            i = 0; uv = 0xff;
            while(i<3)
            {
              if(TestKey())
              {
                keyval = GetKey(NeedDisp);
                if(uv == keyval) i++;
                else i = 0;
                uv = keyval;
                LedBuf[6] = LedMap[KeyTab[keyval]>>4];
                LedBuf[7] = LedMap[KeyTab[keyval]&0xf];
              }
              DispLed();
            }
            DispMenu(pages);
            break;

          case kbA5:  /*按5键 - 步进电机*/
            DispRunStatus();
            while(!TestKey())
            {
              for(i=0;i<15;i++)
              {
                *cs_374 = 0x30; myDelay(5,10);
                *cs_374 = 0x60; myDelay(5,10);
                *cs_374 = 0xc0; myDelay(5,10);
                *cs_374 = 0x90; myDelay(5,10);
              }
              for(i=0;i<15;i++)
              {
                *cs_374 = 0x90; myDelay(5,10);
                *cs_374 = 0xc0; myDelay(5,10);
                *cs_374 = 0x60; myDelay(5,10);
                *cs_374 = 0x30; myDelay(5,10);
              }
            }
            DispMenu(pages);
            break;

          case kbA7:  /*按7键 - 温控*/
            DispRunStatus();
            LedBuf[0] = 0xbf;
            LedBuf[1] = 0xbf;
            for(i=2;i<8;i++) LedBuf[i] = 0xff;
            while(1)
            {
              if(TestKey())
              {
                keyval = GetKey(NeedDisp);
                if(KeyTab[keyval]>0xf) break; /*是功能键退出*/
                if(!fl)
                {
                  a = KeyTab[keyval];
                  if(a<0x10) LedBuf[0] = LedMap[a];
                  fl = 1;
                }
                else
                {
                  b = KeyTab[keyval];
                  if(a<0x10) LedBuf[1] = LedMap[b];
                  fl = 0;
                }
              }
              uv = (a<<4) + (b&0xf);
              *CS0809 = 0;
              Delay(5);
              ad = *(CS0809);
              LedBuf[4] = LedMap[ad>>4];
              LedBuf[5] = LedMap[ad&0xf];
              DispLed();
              if(ad>=uv) /**CS_IO = 0;*/
              *cs_374 = 0;
              else /**CS_IO = 0xf;*/
              *cs_374 = 0xf;
            }
            DispMenu(pages);
            break;

          case kbA8:  /*按8键 - 8253*/
            DispRunStatus();
            *CS8253 = 0x36;
            *CS8253CNT0 = 0x00;
            *CS8253CNT0 = 0x10;
            while(!TestKey());
            DispMenu(pages);
            break;

          case kbA9:  /*按9键 - 16x16*/
            DispRunStatus();
            while(1)
            { /*达爱思产品,技术的典范,品质的保证!*/
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_DA);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_AI);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_SI);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_CHAN);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_PIN);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_COMMA);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_JI);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_SHU);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_DE);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_DIAN);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_FAN);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_COMMA);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_PIN);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_ZHI);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_DE);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_BAO);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_ZHENG);
              if(TestKey()) if(GetKey(NoDisp)<32) break;
              for(i=0;i<20;i++) Disp16Led(FontData_EXCMARK);
            }
            *HROW = *LROW = *HLINE = *LLINE = 0;
            DispMenu(pages);
            break;

          case kbAA:  /*按A键 - 串并*/
            DispRunStatus();
            SCON = 0x00;
            i = 0;
            while(!TestKey())
            {
              SBUF = ~S2PTab[i];
              Delay(600);
              i = (i==9)? 0:i+1;
            }
            SBUF = 0x00;
            DispMenu(pages);
            break;

          case kbAB:  /*按B键 - 音频*/
            DispRunStatus();
            while(!TestKey())
            {
              for(i=0;i<100;i++)
              {
                Speaker = !Speaker;
                Delay(1);
              }
              Delay(100);
            }
            DispMenu(pages);
            break;

          case kbAC:           /*按C键,录音实验*/
            DispRunStatus();
            RecSound();
            DispMenu(pages);
          break;

          case kbAD:           /*按D键,放音实验*/
            DispRunStatus();
            PlaySound();
            DispMenu(pages);
          break;

          case kbAE:                /*KBAE:IC卡实验*/
            DispRunStatus();
            IC_Main();
            DispMenu(pages);
          break;
        }
      }
    }
  }
}

⌨️ 快捷键说明

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