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

📄 lcdtst.c

📁 利用51单片机
💻 C
📖 第 1 页 / 共 4 页
字号:
       }
}

void dis_adjweek()
{   lcdcls();
    showhz(2,0x00,3);//设
    showhz(2,0x10,4);//置
    showhz(2,0x20,1);//星
    showhz(2,0x30,2);//期
    showchar(2,0x40,0x3a);//:

    showhz(4,0x30,1);//星
    showhz(4,0x40,2);//期
    showcharf(4,0x50,0x30+(temp1&0x0f));
}

void dis_adjbote()
{   lcdcls();
    showhz(1,0x00,14);//波
    showhz(1,0x10,15);//特
    showhz(1,0x20,16);//率
    showhz(1,0x30,20);//为
    showchar(1,0x40,0x3a);//:

    showchar(3,0x10,0x39);//
    showchar(3,0x18,0x36);//
    showchar(3,0x20,0x30);//
    showchar(3,0x28,0x30);//
    showchar(3,0x30,0x20);//
    showchar(3,0x38,0x42);//B

    showchar(5,0x10,0x34);//
    showchar(5,0x18,0x38);//
    showchar(5,0x20,0x30);//
    showchar(5,0x28,0x30);//
    showchar(5,0x30,0x20);//
    showchar(5,0x38,0x42);//B
    if (flag_1==0)
       {showhz(3,0x00,21);
        showhz(5,0x00,22);
        }
    else
       {showhz(3,0x00,22);
        showhz(5,0x00,21);
        }
}

//显示电压,临时函数,调试用
void disvoltage()
{
     showchar(2,0x50,0x30+voltage1);//
     showchar(2,0x58,0x2e);//.
     showchar(2,0x60,0x30+voltage2);//
     showchar(2,0x68,0x30+voltage3);//
}


//延迟函数
delay10ms()
{   uchar i,j;
    for(j=0;j<25;j++)
    {
      for(i=0;i<255;i++)
       {nop;
        nop;
        nop;
        nop;
        nop;
        nop;
       }
    }
}

void main()
{ 
  //液晶初始化:
     initlcd();
  //7289初始化:
     clk = 0;
     cs = 1;
  //ds12887初始化:
     ds_areg=0x20;
     ds_breg=0x02;//BCD显示,24小时进制
  //开中断:
     EA = 1;
     ES = 1;
     EX0 = 1;
     PX0 = 1;
     IT0 = 1; //下降沿触发外部中断
     EX1 = 1;
     IT1 = 1;
     PX1 = 0;
  //设置串行通信控制寄存器
     SCON = 0x50; //方式1,不允许多级通信,允许接收
  //设置定时器T1
     TMOD = 0xd0;//定时器1工作在模式1,受int1控制,计数方式。
     TH1 = 0x00;
     TL1 = 0x00;
     TR1 = 1;
  //设置定时器,设置波特率
     T2CON  = 0x34; //设置定时器2为波特率发生器
     TH2    = 0xff;
     TL2    = 0xd9;
     RCAP2H = 0xff;
     RCAP2L = 0xd9; //设置波特率为9600
  //状态和标志位清零
     state = 0;
     state_s = 0;
     flag  = 0;
  //报警温度初始化
     tem_alm = 0x35;
     tem = 0x34;
  //设置时间
/*   settime();
     setdate();
     setweek(); */
     while(1)
     {
       while((ds_creg & 0x10)==0)
         {//nop;
           if (flag_3 ==1&&flag_5==1) /*如果有新温度数据要传送,且允许传送,则传送*/
              {SBUF= tem;             /*传送完毕会产生中断,所以需要在发送中断中*/
               flag_5 =0;             /*清标志位,否则一直产生中断,程序不能正常运行*/
               }
         }
       if (state == 0)
       {flag_4 = 1;
        EX0 = 0;
        EX1 = 0;
        dis_main();
        flag_4 = 0;
        if (flag_0 ==1&&tem>tem_alm)
             {  if(flag_6 ==0)
                  { flag_3 = 0;  
                    SBUF = 0xff;}
             }
       else
          flag_6 = 0;             
        EX0 = 1;
        EX1 = 1;        
       }
                
      }

}

//外部中断1,7135busy触发
void int1() interrupt 2
{
     /*uint n;
     float x;
     EX1 = 0;
     n = TH1;
     n = n<<8;
     n = n+TL1;
     n = n-10000;
     x = n/10000.0;
     voltage1 = (uchar)x;
     x = (x-voltage1)*10;
     voltage2 = (uchar)x;
     x = (x-voltage2)*10;
     voltage3 = (uchar)x;
     if(state == 0)
       {  EX0 = 0;
          disvoltage();
          EX0 =1;
       }
     TH1 = 0x00;
     TL1 = 0x00;
     EX1 = 1;*/
     uint n;
     uchar x;
     uchar y;
     uchar x1,y1,x2,y2;
     n = TH1<<8;
     n = n+TL1;
     n = n-10000;
     x = n>>8;
     y = n&0x00ff;
     x1 = x>>4;
     x2 = x&0x0f;
     y1 = y>>4;
     y2 = y&0x0f;
     if(x1>9)
       x1= x1+7;
     if(x2>9)
       x2= x2+7;
     if(y1>9)
       y1= y1+7;
     if(y2>9)
       y2= y2+7;
    if(state ==0)
     {EX0 = 0;
      showchar(2,0x50,0x30+x1);
      showchar(2,0x58,0x30+x2);
      showchar(2,0x60,0x30+y1);
      showchar(2,0x68,0x30+y2);
      EX0 = 1;
     }
     tem = ((0x30+y1)<<4)+ 0x30+y2;
     flag_5 = 1;
     TH1 = 0;
     TL1 = 0;

}



//串口中断
void serial() interrupt 4
{
    uchar s_data;
    if(RI == 1)
     { RI = 0;
       s_data = SBUF;
       switch(state_s)
         {case 0x00: switch(s_data)
                       {case 0x11: state_s = 1;
                                   break;
                        case 0x22: state_s = 2;
                                   break;
                        case 0x33: state_s = 3;
                                   break;
                        case 0x44: state_s = 4;
                                   break;
                        case 0x55: flag_3 = 1;
                                   SBUF = tem;
                                   flag_5 = 0;
                                   break;
                        case 0x66: flag_3 = 0;
                                   break;
                        case 0x77: flag_6 = 1;
                                   break;          
                        default: break;
                        }
                      break;
          case 0x01: temp1 = s_data;
                     state_s = 0x11;
                     break;
          case 0x11: temp2 = s_data;
                     state_s = 0x21;
                     break;
          case 0x21: temp3 = s_data;
                     state_s = 0x00;
                     settime(temp1,temp2,temp3);
                     break;
          case 0x02: temp1 = s_data;
                     state_s = 0x12;
                     break;
          case 0x12: temp2 = s_data;
                     state_s = 0x22;
                     break;
          case 0x22: temp3 = s_data;
                     state_s = 0x00;
                     setdate(temp1,temp2,temp3);
                     break;
          case 0x03: temp1 = s_data;
                     state_s = 0x00;
                     setweek(temp1);
                     break;
          case 0x04: temp1 = s_data;
                     state_s = 0x00;
                     tem_alm = temp1;
                     break;
          default :break;
         }
      }
    if(TI ==1)
      {TI = 0;
       /*if(flag_3==1&&flag_5 ==1)
         {
           SBUF = tem;
           flag_5 = 0;
         }*/
       }
}

//外部中断1,键盘中断
void int0() interrupt 0
{
    uchar data key_value;
    key_value = getkey();
    delay10ms();
    switch (state)
      {case 0x00: if (key_value == OK)
                    { state = 1;
                      dismenu(1);
                     }
                   break;
       case 0x01: switch(key_value)
                     {case CANCEL: state = 0;
                                   dis_main();
                                   break;
                      case DOWN: state = 2;
                                 dismenu(2);
                                 break;
                      case UP: state = 4;
                               dismenu(4);
                               break;
                      case OK:
                      case ONE: state = 5;
                                dis_adjmenu(1);//显示时间调整选择菜单
                                break;
                      case TWO: state = 2;
                                flag_0 =! flag_0;
                                dismenu(2);
                                break;
                      case THREE: state = 8;
                                  dis_adjtem(1);
                                  t_temalm = tem_alm;
                                  break;
                      case FOUR: state = 9;
                                 flag_2 = flag_1;
                                 dis_adjbote();
                                 break;
                      default: break;
                     }
                     break;
        case 0x02: switch(key_value)
                     {case CANCEL: state = 0;
                                   dis_main();
                                   break;
                      case DOWN: state = 3;
                                 dismenu(3);
                                 break;
                      case UP: state = 1;
                               dismenu(1);
                               break;
                      case OK:
                      case TWO: flag_0 =! flag_0;
                                dismenu(2);
                                state = 2;
                                break;
                      case ONE: state = 5;
                                dis_adjmenu(1);//显示时间调整选择菜单
                                break;
                      case THREE: state = 8;
                                  dis_adjtem(1);
                                  t_temalm = tem_alm;
                                  break;
                      case FOUR: state = 9;
                                 flag_2 = flag_1;
                                 dis_adjbote();
                                 break;
                      default: break;
                     }
                     break;
        case 0x03: switch(key_value)
                     {case CANCEL: state = 0;
                                   dis_main();
                                   break;
                      case DOWN: state = 4;
                                 dismenu(4);
                                 break;
                      case UP: state = 2;
                               dismenu(2);
                               break;
                      case OK:
                      case THREE: state = 8;
                                  dis_adjtem(1);
                                  t_temalm = tem_alm;
                                  break;
                      case ONE: state = 5;
                                dis_adjmenu(1);//显示时间调整选择菜单
                                break;
                      case TWO: flag_0 =! flag_0;
                                dismenu(2);
                                state = 2;
                                break;
                      case FOUR: state = 9;
                                 flag_2 = flag_1;
                                 dis_adjbote();
                                 break;
                      default: break;
                     }
                     break;
        case 0x04: switch(key_value)
                     {case CANCEL: state = 0;
                                   dis_main();
                                   break;
                      case DOWN: state = 1;
                                 dismenu(1);
                                 break;
                      case UP: state = 3;
                               dismenu(3);
                               break;
                      case OK:
                      case FOUR: state = 9;
                                 flag_2 = flag_1;
                                 dis_adjbote();
                                 break;
                      case ONE: state = 5;
                                dis_adjmenu(1);//显示时间调整选择菜单
                                break;
                      case TWO: flag_0 =! flag_0;
                                dismenu(2);
                                state = 2;
                                break;
                      case THREE: state = 8;
                                  dis_adjtem(1);
                                  t_temalm = tem_alm;
                                  break;
                      default: break;
                     }
                     break;
        case 0x05: switch(key_value)
                     {case CANCEL: state = 1;
                                   dismenu(1);
                                   break;
                      case DOWN: state = 0x06;
                                 dis_adjmenu(2);
                                 break;
                      case UP: state = 0x07;
                               dis_adjmenu(3);
                               break;
                      case OK:
                      case ONE: state = 0x0a;
                                temp1 = ds_year;
                                temp2 = ds_month;
                                temp3 = ds_daymonth;
                                dis_adjdate(1);
                                break;
                      case 2:  state = 0x0b;
                               temp1 = ds_hour;
                               temp2 = ds_minute;
                               temp3 = ds_second;
                               dis_adjtime(1);
                               break;
                      case 3: state = 0x0c;
                              temp1 = ds_dayweek;
                              dis_adjweek();
                              break;
                      default: break;
                     }
                     break;
        case 0x06: switch(key_value)
                     {case CANCEL: state = 1;
                                   dismenu(1);
                                   break;
                      case DOWN: state = 0x07;
                                 dis_adjmenu(3);
                                 break;
                      case UP: state = 0x05;
                               dis_adjmenu(1);
                               break;
                      case OK:
                      case TWO: state = 0x0b;
                                temp1 = ds_hour;
                                temp2 = ds_minute;
                                temp3 = ds_second;
                                dis_adjtime(1);
                                break;
                      case 1: state = 0x0a;
                              temp1 = ds_year;
                              temp2 = ds_month;
                              temp3 = ds_daymonth;
                              dis_adjdate(1);
                              break;
                      case 3: state = 0x0c;
                              temp1 = ds_dayweek;
                              dis_adjweek();
                              break;

⌨️ 快捷键说明

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