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

📄 demo.c

📁 可以从计算机向WINBOND516直接下载程序的源码
💻 C
字号:
/*------------------------------------------------------------------------
DEMO.C

Fireware for XYYQ demo board

Copyright 2000 Xingyuan Instrument and equipment Co.,Ltd
-------------------------------------------------------------------------*/
#include  <reg51.h>
#include  "demo.h"

struct _Userdate  Userdate; 
BYTE Flag_rs232=0,recbyte[3];

//========================================================================
//           INIT
//========================================================================
void init(void)
{
	ScreenEnable = 0;      //SYNC ON
	LoadEEPROM0();         //read user date from eeprom
	
	//init7219
	setMAXICmode(XF,0);    //LED normal operation
	setMAXICmode(X9,0);    //No decode for digits 7-0
	setMAXICmode(XA,X5);   //LED display brightness
	setMAXICmode(XB,X5);   //display digits 012345
	setMAXICmode(XC,1);    //normal operation
	
}
//========================================================================
//display picture
//=======================================================================
void showPictureOnLCD(void)
{
	write3106();
	write3500();
	write2111();
    AdjustPow( Userdate.value4.items.m_pow);	
    LoadEEPROM0();         //read user date from eeprom
	write3500AddrByte(0x02,Userdate.value4.items.moveRightorLeft);
    write3500AddrByte(0x03,Userdate.value4.items.moveUporDown);
    init_M62393();//add by chwh 2002/7/22      
}

 /**********add RS232 interrupt*****************/
 

/*************for RS232 init**********************/
void myinit(void)
{ TMOD=0x21;//T1 is mode 1
   TL1=0xfa; //set buad rate is 4800
   TH1=0xfa;
   SCON=0x50;   //set rs232 is mode 1 and enable receive
   TR1=1;  //start count T1;
   IP=0x02;
   
   EA=1;    //enable cpu interrupt
   ES=1;    //ebable rs232
   ET0=1;  //ENABLE to interrupt
  TR0=1;
}
/************************************/

  
/*****************do the event rs232********************/
void do_RS232(void)
{
    if(recbyte[0]==0xfb)
          { SBUF=0xfb;
			while(TI==0);TI=0;
            Isp_64K_4K(); 
           } 
       
   while(RI==0);  RI=0; 
   recbyte[1]=SBUF; 
    
   while(RI==0);  RI=0; 
   recbyte[2]=SBUF;
     
  switch(recbyte[0])
       { 
	    case 0x11:   SBUF=recbyte[0];while(TI==0);TI=0;
                       break;//detect the rs232
        case 0x28:   Set_M62393(recbyte[1],recbyte[2]);
		             switch(recbyte[1])
					 {  
						 case 0x01:Userdate.value3.items.m393_clplev =recbyte[2];break;
						 case 0x02:Userdate.value3.items.m393_gain =recbyte[2];break;
						 case 0x03:Userdate.value3.items.m393_bias =recbyte[2];break;
					     case 0x04:Userdate.value3.items.m393_prglev =recbyte[2];break;
						 case 0x05:Userdate.value3.items.m393_sidlev =recbyte[2];break;
					     case 0x06:Userdate.value3.items.m393_dlcyr =recbyte[2];break;
						 case 0x07:Userdate.value3.items.m393_dlcyg =recbyte[2];break;
						 case 0x08:Userdate.value3.items.m393_dlcyb =recbyte[2];break;
					 }
                       break;//set m62393
		 case 0x29:	    //send 9 bytes data
		             
					  SBUF=Userdate.value3.items.m393_clplev;
		              while(TI==0);TI=0;
					  SBUF=Userdate.value3.items.m393_gain;
		              while(TI==0);TI=0;
		              SBUF=Userdate.value3.items.m393_bias;
		              while(TI==0);TI=0;
					  SBUF=Userdate.value3.items.m393_prglev;
		              while(TI==0);TI=0;
					  SBUF=Userdate.value3.items.m393_sidlev;
		              while(TI==0);TI=0;
		              ////////////////////////
		              SBUF=Userdate.value3.items.m393_dlcyr;
		              while(TI==0);TI=0;
					  SBUF=Userdate.value3.items.m393_dlcyg;
		              while(TI==0);TI=0;
					  SBUF=Userdate.value3.items.m393_dlcyb;
		              while(TI==0);TI=0;
					  SBUF=0x29;
		              while(TI==0);TI=0;
					  
		           break;
        case 0x2A: REST_M62393=~REST_M62393;
		           break; 
     	 case 0x2c: 
		        if(recbyte[2]==0xdd)
				{
				SBUF=read24c16(recbyte[1]);
				 while(!TI);TI=0;
				 SBUF=0X11;
				 while(!TI);TI=0;
			     }
				else
				 {
		          SBUF=Userdate.value2.items.minute ;
				 while(!TI);TI=0;
								  
				SBUF=(BYTE)(Userdate.value2.items.hour>>8);
				while(!TI);TI=0;
				SBUF=(BYTE)(Userdate.value2.items.hour);
				while(!TI);TI=0;
					              
				SBUF=read24c16(50);
				while(!TI);TI=0;
				SBUF=read24c16(51); //height hour
				while(!TI);TI=0;
				SBUF=read24c16(52);  //low hour
				while(!TI);TI=0;
				}
				break;
		 case 0x2d:
				if( recbyte[1]==10)
				{	  Userdate.value2.items.minute=recbyte[2];
					   write24c16(50,Userdate.value2.items.minute);
				}
				 else if( recbyte[1]==11)
			    {	   Userdate.value2.bytes[3]=recbyte[2];  //hour height
				      write24c16(51,Userdate.value2.bytes[3]);

				 }
			   else if( recbyte[1]==12)
			   {    Userdate.value2.bytes[4]=recbyte[2]; 
			  	 write24c16(52, Userdate.value2.bytes[4]); //hour low 
			   }
			 else
			 write24c16(recbyte[1],recbyte[2]);
			 break;
        case 0xaa:UILevel=recbyte[1];
                  //SBUF=recbyte[0];while(TI==0);TI=0;
                  ButtonEnterUp();break;     //EnterUp  key
		case 0xb0:seutity();break;  //set secuity
		case 0xb1:reset_CPU();break;
		 case 0xb5: 
				  readlock();
				   break;
	    case 0xb6: 
		          setlock();
			      break; 
   	     case 0xb7:  readboardinfo();

		           break;
		 case 0xb8: setboardinfo();
		           break;
        case 0xbb:UILevel=recbyte[1];
                  //SBUF=recbyte[0];while(TI==0);TI=0;
                  ButtonEnterDown();break;   //EnterDown key
        case 0xcc:UILevel=recbyte[1];
                  //SBUF=recbyte[0];while(TI==0);TI=0;
                  if(UILevel!=0)
                  ButtonMns();
                  else DefaultOnLED();
                  
                  break;        //Mns key
        case 0xdd:UILevel=recbyte[1];
                  //SBUF=recbyte[0];while(TI==0);TI=0;
                  ButtonPlus();break;       //Plus key
        case 0xee://UILevel=recbyte[1];
                  //SBUF=recbyte[0];while(TI==0);TI=0;
                  ButtonSave();
                  break;        //Save key
            
       case 0xff:sendparamtopc(); break;   
        case 0xfc: ScreenEnable = 0;      //SYNC ON
		   
        	   mywrite3106();
	  	  
                  write2111();	
      		
		DefaultOnLED();        //default date display on LED(0 0 H H H H)
                  break;//use pc to modify 3106
         case 0xfe:   
                      if(recbyte[1]==0x09)Userdate.value4.items.m_address9=recbyte[2];
                      else if(recbyte[1]==0x02)Userdate.value4.items.moveRightorLeft=recbyte[2];
                      else if(recbyte[1]==0x03)Userdate.value4.items.moveUporDown=recbyte[2]; 
                   write3500AddrByte(recbyte[1],recbyte[2]);
                  break;//use pc modfily 3500 param     
        
       
        }
    Flag_rs232=0;
    ES=1;
    IP=0X02;
    EA=1;
}
/*************up is new add to test!*********************/
/////////////////////////////////////////////////////////////////////////
//
//                        Main  Function
//
/////////////////////////////////////////////////////////////////////////
BYTE UILevel = 0,LEDdate;      //button status and  display date of LED
void main(void)
{
  WORD idata TimeFlag=0;
	BYTE idata ssecond=0;  
    myinit(); //init rs232
    init();        //init LED register and load eeprom
    showPictureOnLCD();  //display picture
	DefaultOnLED();        //default date display on LED(0 0 H H H H)
	while(1)
	{    if(Flag_rs232)do_RS232();  //if is the pc control
		scanButton();
		
    	if(TimeFlag !=( InterruptCount / 1000))
		{//光源寿命计算
			TimeFlag = InterruptCount / 1000; 
			P35=~P35; // toggle LED 
			 ssecond++;
			if(ssecond>59)
			{
				ssecond = 0;
				Userdate.value2.items.minute++;
				if(Userdate.value2.items.minute>59)
				{
					Userdate.value2.items.minute = 0;
					Userdate.value2.items.hour++;
				}
				//SaveEEPROM0();    //change by chwh 2002/7/19
				
				write24c16(50,Userdate.value2.items.minute);
				write24c16(51,(BYTE)(Userdate.value2.bytes[3]));
				write24c16(52,(BYTE)Userdate.value2.bytes[4]);
			
			}   
			
			
		}
	}
}
       












⌨️ 快捷键说明

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