/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.STCMCUDATA.com  ---------------------------------------*/
/* --- QQ:  800003751 -------------------------------------------------*/
/* Ҫڳʹô˴,ڳעʹSTCϼ            */
/*---------------------------------------------------------------------*/

/*************  ˵    **************

̻STC32GΪоƬʵбдԡ

ʹKeil C251Memory ModelƼXSmallģʽĬ϶edataʱӴȡٶȿ졣

edata鱣1Kջʹãռ䲻ʱɽ顢ñxdataؼֶ嵽xdataռ䡣

1ȫ˫жϷʽշͨѶ

ͨPCMCU, MCUյͨ1յԭ.

öʱʷʹ1Tģʽ(ǵͲ12T)ѡɱʱƵʣ߾ȡ

ʱ, ѡʱ 22.1184MHz (û޸Ƶ).

******************************************/

#include "comm\STC32G.h"

#include "stdio.h"
#include "intrins.h"




#define uchar unsigned char                                 //ͺ궨
#define uint unsigned int                                 //ͺ궨

#define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //궨


/******************TM1621Dģ*********************/
#define SYSDIS   0x00         //ϵͳLCDƫѹ        
#define SYSEN    0x02    //ϵͳ        

#define LCDOFF   0x04     //LCDƫѹ
#define LCDON    0x06     //LCDƫѹ
                                                         
#define RC       0x30     //ڲRC        

#define BIAS     0x52     //1/3ƫѹ 4       

#define WDTDIS   0x0a     //ֹŹ
#define WDTEN    0x0e     //Ź

/********************ƶ˿**********************/
sbit CS=P2^0;
sbit WRITE=P2^1;
sbit DATA=P2^2;

/*********************************************/
uchar code Smg[16]={0x05,0xff,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};  //0~F
uchar code Tab0[16]={0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //


/********************ʱ*************************/
void delay_nms(uint n)
{
   uint i;
   while(n--)
     for(i=0;i<500;i++);
}

/********************Ӹλд*************************/
void Write_Data_H(uchar Data, uchar Cnt)           //DataĸcntλдTM1621Dλǰ
{
uchar i;
for(i=0;i<Cnt;i++)
{
  WRITE=0;
	
  if(Data&0x80)                                   //λ
    DATA=1;               
  else
    DATA=0;
  nop;

  WRITE=1;
  nop;
  Data<<=1;
}
WRITE=0;
DATA=0;
}

/********************ӵλд*************************/
void Write_Data_L(uchar Data,uchar Cnt) //Data ĵcntλдTM1621Dλǰ
{
unsigned char i;
for(i=0;i<Cnt;i++)
{
   WRITE=0;
	        nop;
   if(Data&0x01)                                 //ӵλ
     DATA=1;  
   else
     DATA=0;
        nop;

        WRITE=1;
	         nop;
        Data>>=1;
}
  WRITE=0;
  DATA=0;  
}

/********************д*************************/
void WriteCmd(uchar Cmd)
{
CS=0;
nop;
Write_Data_H(0x80,4);     //д־100
Write_Data_H(Cmd,8);      //д
CS=1;
nop;
}

/*********ַָдݣʵд4λ************/
void WriteOneData(uchar Addr, uchar Data)
{
	
Addr=Addr<<2;
CS=0;
nop;
Write_Data_H(0xa0,3);     //дݱ־101
	
Write_Data_H(Addr,6);  //дַ
Write_Data_L(Data,4);     //д
nop;	
CS=1;
nop;
}

/*********д뷽ʽÿΪ8λд************/
void WriteAllData(uchar Addr,uchar *p,uchar cnt)
{
uchar i;
CS=0;
Write_Data_H(0xa0,3);          //дݱ־101
Write_Data_H(Addr<<2,6);        //дַ
for(i=0;i<cnt;i++)                //д
{
   Write_Data_L(*p,8);            
   p++;
}
CS=1;
nop;
}

/*******************TM1621Dʼ**********************/
void TM1621D_init()
{
CS=1;
WRITE=1;
DATA=1;
nop;
delay_nms(1);                        
WriteCmd(BIAS);                 //1/3ƫѹ 4
WriteCmd(RC);                         //ڲRC	
WriteCmd(SYSDIS);                 //ϵͳLCDƫѹ
WriteCmd(WDTDIS);								 //ֹŹ
WriteCmd(SYSEN);                 //ϵͳ
WriteCmd(LCDON);                 //LCDƫѹ

}





/*************TM1621*****************/
void Clear1621()
{
uchar i;
for(i=0;i<32;i++) //9-21
{
WriteOneData(i, 0x00);
}
}

void Delay500ms(void)	//@11.0592MHz
{
	unsigned char data i, j, k;

	_nop_();
	_nop_();
	i = 22;
	j = 3;
	k = 227;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}




/*************TM1621ȫ*****************/
void ping1621()
{
uchar i;
for(i=9;i<22;i++) //9-21
{
WriteOneData(i, 0x0f);
}
}



void main()
{				 P3M0 |= 0x30; P3M1 &= ~0x30;   //34  35

	        P2M0 &= ~0x07; P2M1 &= ~0x07; 
  P34=0;
	P35=1;

TM1621D_init();                //ʼ
delay_nms(1);
//WriteAllData(0,Tab0,16);         //LCDԴ
	
	//WriteOneData(0x0e, 0x06);		
	
	
	Clear1621();
	
//ping1621();
	
while(1)
{	TM1621D_init();                //ʼ
/*
	WriteOneData(0x01,0x00);   	
	WriteOneData(0x02,0x00);   	
	WriteOneData(0x03,0x00);   	
	WriteOneData(0x04,0x00);   	
	WriteOneData(0x05,0x00);   	
	WriteOneData(0x06,0x00);   	
	WriteOneData(0x07,0x00);   	
	WriteOneData(0x08,0x00);   	
	WriteOneData(0x09,0x00); 
*/
	//һλʾ8
	WriteOneData(0x09,0x0f);
	WriteOneData(0x0e,0x0e);
	//ڶλʾ5
	
	WriteOneData(0x0c,0x0A);
	WriteOneData(0x0d,0x0d);
	
	
	
		//λʾ2
	
	WriteOneData(0x0A,0x0c);
	WriteOneData(0x0B,0x07);
	
	//WriteOneData(0x15,0x0f);
	
	
	
	//WriteOneData(0x12,0x0f);   //G2   9  3
	         
	
	
	//WriteOneData(0x0b,0x01);   //G3   7  1
	         
	//WriteOneData(0x0b,0x02);   //c2   8  2
	
	//WriteOneData(0x0b,0x04);   //D2   9  1  
	
	
	//WriteOneData(0x0b,0x08);   //c1   10  2

//WriteOneData(0x0b,0x01);   //D2   7  1    


/*
WriteOneData(0x0c,0x01);   //E3   7  2    
WriteOneData(0x0c,0x02);   //G2   9  3
WriteOneData(0x0c,0x04);   //G2   9  3
WriteOneData(0x0c,0x08);   //G3   7  3



WriteOneData(0x0d,0x01);   //f3   7  4
WriteOneData(0x0d,0x02);   //b2   8  3
WriteOneData(0x0d,0x04);   //f2   9  4
WriteOneData(0x0d,0x08);   //b1   10  3



*/







	
	//ڶλʾ
	/*
 WriteOneData(0x0e,0x03); 
 WriteOneData(0x0f,0x07); 
WriteOneData(0x10,0x03);   
*/

	
	/*
	
	WriteOneData(0x01,0x00);   	
	WriteOneData(0x02,0x00);   	
	WriteOneData(0x03,0x00);   	
	WriteOneData(0x04,0x00);   	
	WriteOneData(0x05,0x00);   	
	WriteOneData(0x06,0x00);   	
	WriteOneData(0x07,0x00);   	
	WriteOneData(0x08,0x00);   	
	WriteOneData(0x09,0x00);   	
	WriteOneData(0x0a,0x00); 
	
	
	
	
	
	

	WriteOneData(0x11,0x00);   	
	WriteOneData(0x12,0x00);   	
	WriteOneData(0x13,0x00);   	
	WriteOneData(0x14,0x00);   	
	WriteOneData(0x15,0x00);   	
	WriteOneData(0x16,0x00);   	
	WriteOneData(0x17,0x00);   	
	WriteOneData(0x18,0x00);   	
	WriteOneData(0x19,0x00);   	
	WriteOneData(0x1a,0x00);   	
	WriteOneData(0x1b,0x00);   	
	WriteOneData(0x1c,0x00);   	
	WriteOneData(0x1d,0x00);   	
	WriteOneData(0x1e,0x00);   	
	WriteOneData(0x1f,0x00);   	
	WriteOneData(0x20,0x00);   	
	WriteOneData(0x21,0x00);   	
	WriteOneData(0x22,0x00);   	
	WriteOneData(0x23,0x00);   	
	WriteOneData(0x24,0x00);   	
	WriteOneData(0x25,0x00);   	
	WriteOneData(0x26,0x00);   	
	
	
	*/
}
}




/*


	//101  001110   0001 1100
	 //WriteOneData(0x0a,0x0d);
	
	//WriteOneData(0x0d,0x0f);
	

//	WriteOneData(0x10,0x02);          //LCD SEG10SEG21ʾ0~5
	
	
	// WriteOneData(0x0b,0x00); 
	// WriteOneData(0x0c,0x08); 
	
	
//	 WriteOneData(0x0d,0x00); 
//	 WriteOneData(0x0e,0x0a); 
	

	//WriteOneData(0x0b, 0x00);
	//WriteOneData(0x0A, 0x05);
	//WriteOneData(0x0b, 0x0b);
			//WriteOneData(0x0f, 0x04);
	//WriteOneData(0x09, 0x01);
	//	WriteOneData(0x09, 0x0b);														
												
	//	WriteOneData(0x0b, 0x0b);														
	//	WriteOneData(0x0c, 0x0b);														

//WriteOneData(0x09, 0x0d);		
	//WriteOneData(0x0f, 0x02);	
	
	//ping1621();
	 //

	
	
	
	
	
	
//WriteOneData(0x0e, 0x02);		
//WriteOneData(0x0e, 0x04);		
//WriteOneData(0x09, 0x0d);		


//WriteAllData(0x09,Smg,1);         //LCDԴ

	
	//Clear1621();
	
			//WriteOneData(0x0f,0x08);
//	WriteOneData(0x09, 0x05);
	
*/





