/* Ҫڳʹô˴,ڳעʹSTCϼ            */
/*************  ˵    **************
̻STC32GΪоƬʵбдԡ
ʹKeil C251Memory ModelƼXSmallģʽĬ϶edataʱӴȡٶȿ졣
edata鱣1Kջʹãռ䲻ʱɽ顢ñxdataؼֶ嵽xdataռ䡣
ʱ, ѡʱ 11.0592MHz ******************************************/


#include "comm\STC32G.h" //STCٷļû޸õSTC32GLQFP32 32ŵоƬ

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




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

/*LCDʾ÷ܽ
ΪʲôҪLCDʾ      ʡ  0.5-2Ԫ 
Ϊʲôѡ      úõ
ΪʲôѡTM1621D  qsop24  ٸС ʡ ʡǮá רҵоƬڴʾLCD  Աë
ΪʲôSTC32G  Ϊһļ㶨 ģ
202411õ°򵥵Ķ׷¼һ¡ϣԺ˱ôʱ䣡
ڳõTM1621DĹٷӸĵġ߼ǲõP2ͨſڡ
ǿõĳ

̫̳CSDNϵ£û˵õ51ƬTM1621DʾLCD  ΪʲôҲǾ˵һ°ɡ
ڵƬͲ˵˾STC32G   8K64  12K128 32Ϊ˺ֹӡP2Ϊ׼˫ڷݡP3M0 |= 0x30; P3M1 &= ~0x30;   //34  35  ڸ

TM1621D ĹڰٶһҾͿҵ
TM1621D SSOP24 пϿ
4COMӦϵCOMڡ

SEG9-SEG22  ʱЩдʱͲЩȻԼӦ

ĻҪѡLCDľٱ˵ 1/3ƫѹ 4  ԡ

ڳһͿˡҪĴ

//	WriteOneData(0x09,0x04);	 //˼дseg09   COMд0001   0010   0100  1000   Ӧ0x 01  02  04   08ʾһʻ


ҲȹĿ
1 ûõҵĶԵֵ
2 COMϴ
3 ͨŽûи
4 ͨŽûIO
5 רҵ˲Ǯ˼Ҳûҵĵط
6 ĳߴ翴PCB׾໭
7 û濴TM1621DĹ顣ֱ20Ժ
8 ʲûʲôá
9 TM1621D2013ûϸע
10 һҪҪҪԵĹ顣
11 ʾʾCOMˡ
12 VCCVLCD֮俴˵ҪӸɵҪʡټӸ10Kĵ
13 ʵ֪
14 ֮ǰʾ˺ܾò߼֮ǰҲˡ
15 ֤ǶԵ֮ſȷԲԡѾ޸ʹͨŲθȶ
16 ΪԺ˺ҶԿĴ롣õעͷƘ
17 Ϊʲôûдʾ0123456789Ĵ  Ϊİ岻һдһ
*/
unsigned int xxbl=0;


/*LCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D*/
#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    //Ź
/*ڲLCDƫѹҲʾʾLCD ؿŹ ʺ//1/3ƫѹ 4  */

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

/********************˵ûõTM1621Dٷ*************************/
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ƫѹ
}

/*************TM16211621DӦȫղǶԵ*****************/
void Clear1621()
{
uchar i;
for(i=0;i<32;i++) //9-21
{
WriteOneData(i, 0x00);
}
}
/*************TM1621ȫ ûȫʾвԵĵطҪӵ*****************/
void quanping1621()
{
uchar i;
for(i=9;i<22;i++) //9-21
{
WriteOneData(i, 0x0f);
}
}
/*LCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D*/

/**
ʾxxbl_lcd
*/
static void lcd_1(unsigned long xsbl_lcd)//1λλ(λ)
{
				 if(xsbl_lcd / 100 == 0)
    {
        WriteOneData(0x09,0x0b);	WriteOneData(0x0e,0x0e);  	            // 0
    }
    else if(xsbl_lcd / 100== 1)
    {
        WriteOneData(0x09,0x00);	WriteOneData(0x0e,0x06);  	            // 1
    }
    else if(xsbl_lcd / 100== 2)
    {
        WriteOneData(0x09,0x07);	WriteOneData(0x0e,0x0c);  	            // 2
    }   
    else if(xsbl_lcd / 100== 3)
    {
        WriteOneData(0x09,0x05);	WriteOneData(0x0e,0x0e);  	            // 3
    } 
    else if(xsbl_lcd / 100== 4)
    {
        WriteOneData(0x09,0x0c);	WriteOneData(0x0e,0x06);  	            // 4
    }
    else if(xsbl_lcd / 100== 5)
    {
        WriteOneData(0x09,0x0d);	WriteOneData(0x0e,0x0a);  	            // 5
    }
    else if(xsbl_lcd / 100== 6)
    {
        WriteOneData(0x09,0x0f);	WriteOneData(0x0e,0x0a);  	            // 6
    }
    else if(xsbl_lcd / 100== 7)
    {
        WriteOneData(0x09,0x00);	WriteOneData(0x0e,0x0e);                // 7
    }
    else if(xsbl_lcd / 100== 8)
    {
        WriteOneData(0x09,0x0f);	WriteOneData(0x0e,0x0e);  	            // 8
    }
    else if(xsbl_lcd / 100== 9)
    {
				WriteOneData(0x09,0x0d);	WriteOneData(0x0e,0x0e); 	      	      // 9
    }
}

static void lcd_2(unsigned long xsbl_lcd)//2λʮλ(λ)
{
				 if(xsbl_lcd % 100/10== 0)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0b);  	            // 0
    }
    else if(xsbl_lcd % 100/10== 1)
    {
        WriteOneData(0x0c,0x06);	WriteOneData(0x0d,0x00);  	            // 1
    }
    else if(xsbl_lcd % 100/10== 2)
    {
        WriteOneData(0x0c,0x0c);	WriteOneData(0x0d,0x07);  	            // 2
    }   
    else if(xsbl_lcd % 100/10== 3)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x05);  	            // 3
    } 
    else if(xsbl_lcd % 100/10== 4)
    {
        WriteOneData(0x0c,0x06);	WriteOneData(0x0d,0x0c);  	            // 4
    }
    else if(xsbl_lcd % 100/10== 5)
    {
        WriteOneData(0x0c,0x0a);	WriteOneData(0x0d,0x0d);  	            // 5
    }
    else if(xsbl_lcd % 100/10== 6)
    {
        WriteOneData(0x0c,0x0a);	WriteOneData(0x0d,0x0f);  	            // 6
    }
    else if(xsbl_lcd % 100/10== 7)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x00);  	            // 7
    }
    else if(xsbl_lcd % 100/10== 8)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0f);  	            // 8
    }
    else if(xsbl_lcd % 100/10== 9)
    {
        WriteOneData(0x0c,0x0e);	WriteOneData(0x0d,0x0d);  	            // 0
    }
}

static void lcd_3(unsigned long xsbl_lcd)//3λλ(λ)
{
    if(xsbl_lcd % 10 == 0)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0b);  	            // 0
    }
    else if(xsbl_lcd % 10 == 1)
    {
        WriteOneData(0x0a,0x06);	WriteOneData(0x0b,0x00);  	            // 1
    }
    else if(xsbl_lcd % 10 == 2)
    {
        WriteOneData(0x0a,0x0c);	WriteOneData(0x0b,0x07);  	            // 2
    }   
    else if(xsbl_lcd % 10 == 3)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x05);  	            // 3
    } 
    else if(xsbl_lcd % 10 == 4)
    {
        WriteOneData(0x0a,0x06);	WriteOneData(0x0b,0x0c);  	            // 4
    }
    else if(xsbl_lcd % 10 == 5)
    {
        WriteOneData(0x0a,0x0a);	WriteOneData(0x0b,0x0d);  	            // 5
    }
    else if(xsbl_lcd % 10 == 6)
    {
        WriteOneData(0x0a,0x0a);	WriteOneData(0x0b,0x0f);  	            // 6
    }
    else if(xsbl_lcd % 10 == 7)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x00);  	            // 7
    }
    else if(xsbl_lcd % 10 == 8)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0f);  	            // 8
    }
    else if(xsbl_lcd % 10 == 9)
    {
        WriteOneData(0x0a,0x0e);	WriteOneData(0x0b,0x0d);  	            // 0
    }
}
/**
ʾxxbl_lcd
*/

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

	_nop_();
	_nop_();
	i = 13;
	j = 156;
	k = 83;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}




void main()
{	
/*LCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D*/
	P3M0 |= 0x30; P3M1 &= ~0x30;   //34  35
  P2M0 &= ~0x07; P2M1 &= ~0x07; 
  P34=0;
	P35=1;
/*LCDʾ-޹صLCDʾܵŻвP20 21 22  P34 35 ڸTM1621D 1621D*/
TM1621D_init();                //ʼظʹѭҪĻ
delay_nms(1);
//WriteAllData(0,Tab0,16);         //LCDԴ
	
	//WriteOneData(0x0e, 0x06);		
	
	
	Clear1621();//LCDԴ
	
//quanping1621();  //ӦÿȫʾŶ
	
while(1)
{	
	Delay1000ms();
		



	xxbl=xxbl+1;
	
	if (xxbl>=999)
		xxbl=0;
lcd_1(xxbl);
lcd_2(xxbl);
lcd_3(xxbl);
	
	
}
}

	




//	WriteOneData(0x09,0x04);	 //˼дseg09   COMд0001   0010   0100  1000   Ӧ0x 01  02  04   08ʾһʻ
//com0 1 2 3Ӧ16 17 18 19     1234  
//SEG 5 6 7 8 9 10	9 a b c d e   SEG9-14

	
	
	
/*						
0	0000
1	0001
2	0010
3	0011
4	0100
5	0101
6	0110
7 0111
8	1000
9 1001
a 1010
b 1011
c 1100
d 1101
e 1110
f 1111

	
	
																9   A   B   c   d    e
					1			2			3			4		5		6		7		8		9		 10
com0		com0										D1      D3      D2   
com1					com1							E1  c3  e3  c2  e2   c1   
com2								 com2				g1	B3  G3  B2  G2   B1
com3											com3	f1  A3  F3  A2  F2   A1 						
	
	
	*/
	
	/*
	//һλʾ8
	WriteOneData(0x09,0x0f);
	WriteOneData(0x0e,0x0e);
	//ڶλʾ5
	
	WriteOneData(0x0c,0x0A);
	WriteOneData(0x0d,0x0d);
	
	
	
		//λʾ2
	
	WriteOneData(0x0A,0x0c);
	WriteOneData(0x0B,0x07);
	
	*/
