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

📄 main.c

📁 这是本人有幸收集的最完整的10多级液晶显示程序模块
💻 C
📖 第 1 页 / 共 5 页
字号:
//#pragma src

#include <reg52.h>       //
#include <regusre.h>
#include <value.h>       //
#include <tab.h>         //共用字库表
#include <v_static.h>    //
//#include <show.h>        //
//#include <control.c>     //
void startwd(void);
#define high 1;
#define low 0;


/*----------------------------------    主程序及主程序初始化开始    -------------------------------------*/
void main()
{
  	/*-------------主程序初始化------------*/
    unsigned  char idata *  data  a;
    uchar tempb;
    uchar xdata * idata addr_xa;
   // uchar tempp,tempp1;
    IE=0x1a;                                       /*中断允许*/
    TMOD=0x21;                                     /*堆栈设置*/
    TCON&=0x00;                                    /*定时器0工作模式设置,工作于重新装入常数的16位定时器*/
    T2CON=0x00;                                    /*定时器2工作模式设置,工作于自动重新装入常数的16位定时器*/
    T2MOD=0x00;
    TL0=reload_low0;
    TH0=reload_high0;                              /*定时器溢出值设定,定时时间为1ms*/
    TL2=reload_low2;
    TH2=reload_high2;
    AUXR|=0x0c;
    //WDTPRG=0;                                    //for debug
    //WDTRST=0x1e;
    //WDTRST=0xe1;


	  //dis_number=CMOD;

//通讯初始化子程序
	TMOD|=0x20;				//设定T1为定时模式2
	ET1=0;					//关闭T1中断使能
	TH1=0xfd;				//预置定时器初值f5,波特率9.6k
	TL1=0xfd;
	TR1=1;					//起动定时器T1
	PCON|=0x80;				//波特率加倍
	SCON=0x50;				//串口工作在方式1,并且接收使能
	IE|=0x10;				//使能串口中断
//通讯初始化结束
                                             /*通讯初始化*/
    P0=P2=0x0ff;
    P1=P1&0xf8;
    P3=P3|0x04;
    IE=IE|0x80;                                  /*开中断*/


    TR0=1;
    TR2=1;

     P1=P1|0x38;
    P3=P3&0x37;

     LEDStart = 0;
     LEDAlarm = 0;
     LEDStop  = 0;
     LEDFault = 0;
     LEDRun = 0;
     lcdinit();
     clr_fullscreen();     /*LCD显示初始化*/

  for (a=ram_data_start;a<255;a++)    /*内存初始化*/
      {tempb=1;*a=0x00;
      	 tempb=*a;}
  for(addr_xa=0x0;addr_xa<1024;addr_xa++)
    *addr_xa=0;
    alone_user=1;           //单机模式=1
    mode_judge=1;           //工作模式未判决
 	 menu_program();	//刷新位置1 nnn
//	remote_build_count=0;	//通讯建立计数
	remote_build();			//调用通讯建立程序
//init_remote

     key_scan=1;

    old_dis_number=38;
    dis_number=38;
   first_enter=0;
   fault_first_enter=0;
   TripLogState=0;

   p25=1;
   LcdDelay=1;
   LcdTime=0;


//      power_init();

/*-------------主程序初始化结束-- ----------*/

     while(1)
    {
      if(ms20s==1)
      {
        ms20s=0;
        if(alone_user==1)//单机模式定时检查设备连接
          {remote_build();}
        if(program_state)
        {
          CLK=0;
          if(s05s==1)
          {
          	s05s=0;
          	clr_fullscreen();
            lcdwrite_chineseN(2,40,3,bianchen);
          }
          program_state=0;
        }
       else
      {
        control();
        if(WaitTime>200)
        {
         WaitTime=0;
         //GetState();
         OperateStateCheck();

         }

         key_check();
         if(key==0x07)
         {
         	if(SuperUser==0)
         	{
         		SuperUser=1;
         		key=0;
         	}
         	else
         	{
         	  SuperUser=0;
         	  key=0;
         	}
         }
         if(key==0x01||key==0x02||key==0x04||key==0x08||key==0x06)
         {
           display();
           key=0x00;
           display();

         }
         else
         {

           if(s05s==1)
           {
             s05s=0;
             LEDFault^=PLEDFault;
             display();
              //p25^=1;
             if((LcdDelay)&&(LcdTime<0xf0))
               {p25=1;LcdTime++;}
             else
             {
               p25=0;
               LcdDelay=0;
               LcdTime=0;
             }

           }
         }
      }
    }
  }





}



/*----------------------------------    主程序及主程序初始化结束    -------------------------------------*/

/*---------------------------------------    界面显示程序开始    ----------------------------------------*/
void    display()
{

   switch(dis_number)
   {

    //----------djz--------------
    case 0:stop_show();break;
    case 3: motor_run_show();break;
    case 8: power_run_show();break;
    case 10: Stopped_Reason();break;   //(上次)停车原因
    case 11: Stopping_display();break;   //正在停车(断开)

    case 12:
    case 13:
    case 14:
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
    case 24:
    case 25:
    case 26:
    case 27:
    case 28:
    case 29:
    case 30:
    case 188:
    case 189:
    case 190:
    case 191:
    case 192:
    case 193:
    case 194:
    case 195:
                     OperationControl();
                     break;
	case 32:     ComunicationFault();
	             break;
	case 33:
	             menu_main_control();
	             break;
	case 34:
	case 35:
	case 36:
	case 37:     menu_measure();
	             break;
	case 38:     menu_program();
	             break;
	case 53:
        case 52:
        case 51:
        case 49:
        case 46:
	case 43:
	case 41:
	case 39:
	case 187:     //debug
	             menu_adjust();
	             break;
	case 186:
	             menu_caozuo();
	             break;
//-----------chenjw-------s----

	case 95:     alarm_message1();break;
	case 97:     alarm_message2();break;
	case 98:     alarm_message3();break;

	case 100:    trip_alarm_dis1();break;
	case 105:    trip_alarm_dis1();break;

	case 110:    notrip_alarm_dis();break;

	case 113:
	case 115:
	case 117:
	case 119:
	case 121:
	case 163:
	case 165:    fault_message_dis();break;

	case 124:
	case 127:
	case 130:
	case 133:
	case 136:
	case 139:
	case 142:
	case 145:
	case 148:
	case 151:
	case 154:
	case 157:
	case 167:
	case 160:    fault_dis();break;
	case 185:    menu_guzhangjl_zero();break;

  case 9:      //添加允许分断电流的特殊处理
  case 54:
  case 55:
  case 56:
  case 57:
  case 58:
  case 59:
  case 60:
  case 61:
  case 62:
  case 63:
  case 64:
  case 65:
  case 66:
  case 67:
  case 68:
  case 69:
  case 70:
  case 71:
  case 72:
  case 73:
  case 74:
  case 75:
  case 76:
  case 77:
  case 78:
  case 79:
  case 80:
  case 81:
  case 82:
  case 83:
  case 84:
  case 85:
  case 86:
  case 87:
  case 89:
  case 31:
  case 88:    set_set_dis();break;
  case 90:    protect_set_dis();break;
//------------------chenjw ----------e---------

//-----------------jyj
    case 170:    io_set();  break;

	case 173:    io_state();break;
   	case 174:    di_display();break;
   	case 175:    do_display();break;
   	case 176:
   	case 178:     parameter_set();break;

   	case 250:     alone_dis1();break;



	default:             break;
     }
}

/*---------------------------------------    界面显示程序结束    ----------------------------------------*/


/*---------------------------------------    通讯控制程序开始    ----------------------------------------*/



/********************************************************************
*
* 名称: remote_build
* 说明: 试用不同波特率,发送特殊报文取设备动态地址.
* 功能: 通讯建立
* 调用: 1,由通讯初始化程序;
		2,通讯失败10次后由接收中断程序
* 输入: 无
* 返回值: remote_type_address=1;
***********************************************************************/
void remote_build(void)
{//通讯建立程序
	remote_type_address=1;
	remote_sign_built=0;
 while(remote_sign_built==0)
 {    //单机/首次工作模式执行一次;联机工作模式则始终搜索设备
   if(program_state==1)  return;

   //22.1184MHz
   if((PCON&0x80)==0)
   {  //不加倍
     if(TH1==0xf4){TH1=0xfa;TL1=0xfa;}             //4.8K->9.6K
     else if(TH1==0xfa){TH1=0xfd;TL1=0xfd;}        //9.6K->19.2K
     else {PCON|=0x80;TH1=0xfd;TL1=0xfd;}          //19.2K->38.4K
   }
   else
   {PCON&=0x7f;TH1=0xf4;TL1=0xf4;}                 //38.4K->4.8K

//12MHz                                            //for debug




						//通讯故障,显示通讯故障
	trbuf[0]=0x68;
	trbuf[1]=0x00;
	trbuf[2]=0x00;
	trbuf[3]=0x68;
	trbuf[4]=0xd0;				//特殊报文校验码
	read_trbuf_p=trbuf;			//指向发送缓存
	TxdLength=5;	//发送缓存使用长度
	receive_byte_number=5;		//接收字节数
	Txded_Number=0;			//发送缓存读计数清零
	REN=0;
     Current_Message_End=1;
	CLK=1;
	SBUF=*read_trbuf_p;			//起动发送

   WaitTime=0;
   while((remote_sign_built!=1)&&(WaitTime<200))
     WD_SDA=~WD_SDA;
   if(alone_user==1){remote_sign_built=1;}//单机模式,建立通讯只执行一次
   //remote_sign_built=1;//for debug
 }
}//remote_build

void GetData(void)
{
 unsigned char i;
 unsigned char j;
 value_message_count=0;
 for(i=0;i< message_count[dis_number];i++)
 {
  again:
  if(program_state==1)  return;
  if(value_message_count==0)
  {	//于首条报文
    value_message_p = &dis_message_tab[0][0] + dis_number * long_dis_message;	//发送报文的首地址
    write_rebuf_p=union_vlaue.revalue_buf;//指向其接收缓存
    RxdPointBak=write_rebuf_p;
  }
  trbuf[0]=address_device;
  trbuf[1]=0x03;
  for(j=0;j<4;j++) //取报文数据
     trbuf[j+2]=*(value_message_p+value_message_count*4+j);	//[行][列]*(p+i*long_dis_message+j)

     receive_byte_number=5+(*(read_trbuf_p+5))*2;	//计算条报文接收字节数(支持到256)
     RemoteTypeBak=3;

    /*debug*/                 if(receive_byte_number>37)   //接收长度出错可能导致系统有问题.
 	return;

 //---------故障记录区读取的特殊处理--s-------
  if((trbuf[3]!=0xb3)&&(TripLogState==1)) //非接地类型地址,地址偏移,0xb3为接地保护方式
  {
		trbuf[3]+=0x8e;   //(570h-454h)/2=8e.
  }
 //---------故障记录区读取的特殊处理--s-------                                  receive_byte_number=37;


   TxdLength=6;//实际发送缓存有效长度
   crc_account();						//crc计算
   Txded_Number=0;    //发送缓存读计数清零,接收缓存清零在发送结束时清零.													//发送缓存读计数清零
   Current_Message_End=1;
   REN=0;		      //启动发送							//起动输出
   CLK=1;
   RI=0;
   RxdPointBak=write_rebuf_p;//
   SBUF=trbuf[0];
   WaitTime=0;
   //Current_Message_End=0;//for debug
   while((Current_Message_End!=0)&&(WaitTime<150))
     WD_SDA=~WD_SDA;
   //Current_Message_End=0;//for debug
   if(Current_Message_End!=0)

⌨️ 快捷键说明

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