Пример #1
0
void low_init()
{
	#if (__AVR_ATmega128__)  //for MRTP_4
        DDRE|=0x10;//живлення для регістрів ввода/вивода
        PORTE&=~0x10;
        set_data_low(0x00,CS0);//выдача МТ[0]
        set_data_low(0x00,CS2);//выдача МТ[1]
	#endif
	#if (__AVR_ATmega1280__) //for MK_035
        DDRJ=0xff;
        PORTJ=0xff;
        DDRF=0xff;
        PORTG&=~_BV(PG5);
        set_data_low(0x00,CS0);//выдача МТ[0]
	#endif//for MK_035
}
Пример #2
0
void LPD8806_send_byte(uint8_t the_byte){
  for(uint8_t i = 0; i < 8; i++){
    uint8_t bit = the_byte & (1 << (7 - i));
    if(bit == 0) set_data_low();
    else set_data_high();
    clock_strobe();
  }
}
Пример #3
0
//extern uint8_t TestMsk;
void low_drv()
{
	uint8_t i,temp;
	#if (__AVR_ATmega128__)  //for MRTP_4
        DDRE|=0x10;
        PORTE&=~0x10;
        set_data_low(MT[0],CS0);//выдача МТ[0]
        OS_MT[0]=read_data_low(CS1);//чтение ОС[0]
        set_data_low(MT[1],CS2);//выдача МТ[1]
        OS_MT[1]=read_data_low(CS3);//чтение ОС[1]

    //	MSK[cur_msk_selector]=read_data_low(CS5);//считывание текущего МСК
        temp=read_data_low(CS5);//считывание текущего МСК, затем фильтрация
        //TestMSK=temp;
        #if 1
        //побитная фильтрация МСК
        for(i=0;i<8;i++)
        {
            if(temp&(1<<i)) //МСК не нажат
            {
                if(!(MSK[cur_msk_selector]&(1<<i))) //при ненажатом МСК отфильтрованом
                {
                    MSK_FLT_TMP[cur_msk_selector*8+i]=0;
                }
                else //отфильтрованый МСК был нажат
                {
                    MSK_FLT_TMP[cur_msk_selector*8+i]++;
                    if(MSK_FLT_TMP[cur_msk_selector*8+i]>MSK_FLT)//если истекло время фильтрации
                    {
                        MSK[cur_msk_selector]&=~(1<<i);//отпустить МСК
                        MSK_FLT_TMP[cur_msk_selector*8+i]=0;//очистить фильтр
                    }
                }
            }
            else //если МСК нажат
            {
                if(!(MSK[cur_msk_selector]&(1<<i))) //при ненажатом МСК отфильтрованом
                {
                    MSK_FLT_TMP[cur_msk_selector*8+i]++;
                    if(MSK_FLT_TMP[cur_msk_selector*8+i]>MSK_FLT)//если истекло время фильтрации
                    {
                        MSK[cur_msk_selector]|=(1<<i);//отпустить МСК
                        //tech_fl|=SOUND_KEY;
                        MSK_FLT_TMP[cur_msk_selector*8+i]=0;//очистить фильтр
                    }
                }
                else //отфильтрованая кнопка не была нажата
                {
                    MSK_FLT_TMP[cur_msk_selector*8+i]=0;
                }
            }
        }
    #endif
    //	TestMSK=0x00;
    //	switch (cur_msk_selector)
    //	{
    //		case 0:
    //			TestMSK=0x01;
    //		break;
    //		case 1:
    //			TestMSK=0x04;
    //		break;
    //		case 2:
    //			TestMSK=0x10;
    //		break;
    //		case 3:
    //			TestMSK=0x40;
    //		break;
    //		case 4:
    //			TestMSK=0x02;
    //		break;
    //		case 5:
    //			TestMSK=0x08;
    //		break;
    //		case 6:
    //			TestMSK=0x20;
    //		break;
    //		case 7:
    //			TestMSK=0x80;
    //		break;
    //	}
        //if (cur_msk_selector%2) {
        //	TestMSK|=(1<<(cur_msk_selector%2+4));
        //}
        //else {
        //	TestMSK|=(1<<(cur_msk_selector/2));
        //}
    //	if (TestMSK==temp) TestMSKResult|=(1<<cur_msk_selector); else TestMSKResult&=~(1<<cur_msk_selector);
        ////for (i=0;i<8;i++) {
        ////	if (cur_msk_selector%2) {
        //		TestMsk|=(1<<())
        //	}
        //	else {
        //
        //	}
        //}

        cur_msk_selector++;//инкремент текущего МСК

        if(cur_msk_selector>7)
        {
            cur_msk_selector=0;         // Условие обнуления счетчика выбора МСК.
        }
        set_data_low(1<<cur_msk_selector,CS4);//засвечивание следующего столбца МСК
    #endif

    #if (__AVR_ATmega1280__) //for MK_035
        uint8_t temp2;

		temp=read_data_low(CS3);//считывание текущего МСК
		temp2=read_data_low(CS1);//считывание текущего МСК

		if (!(cur_msk_selector%2)){
			for (i=0;i<4;i++) {
				if (!(temp&(1<<i))) MSK[cur_msk_selector/2]|=(1<<i); else MSK[cur_msk_selector/2]&=~(1<<i);
				if (!(temp&(1<<i+4))) MSK[cur_msk_selector/2+2]|=(1<<i); else MSK[cur_msk_selector/2+2]&=~(1<<i);

				if (!(temp2&(1<<i))) MSK[cur_msk_selector/2+4]|=(1<<i); else MSK[cur_msk_selector/2+4]&=~(1<<i);
				if (!(temp2&(1<<i+4))) MSK[cur_msk_selector/2+2+4]|=(1<<i); else MSK[cur_msk_selector/2+2+4]&=~(1<<i);
			}
		}
		else {
			for (i=0;i<4;i++) {
				if (!(temp&(1<<i))) MSK[cur_msk_selector/2]|=(1<<i+4); else MSK[cur_msk_selector/2]&=~(1<<i+4);
				if (!(temp&(1<<i+4))) MSK[cur_msk_selector/2+2]|=(1<<i+4); else MSK[cur_msk_selector/2+2]&=~(1<<i+4);


				if (!(temp2&(1<<i))) MSK[cur_msk_selector/2+4]|=(1<<i+4); else MSK[cur_msk_selector/2+4]&=~(1<<i+4);
				if (!(temp2&(1<<i+4))) MSK[cur_msk_selector/2+2+4]|=(1<<i+4); else MSK[cur_msk_selector/2+2+4]&=~(1<<i+4);
			}
		}




		//MSK[cur_msk_selector]=read_data_low(CS3);//считывание текущего МСК

//		temp=read_data_low(CS3);//считывание текущего МСК, затем фильтрация


		#if 0
			//побитная фильтрация МСК
			for(i=0;i<8;i++)
			{
				//if (i%2) {
					if(temp&(1<<i)) //МСК не нажат
					{
						if(!(MSK[cur_msk_selector]&(1<<i))) //при ненажатом МСК отфильтрованом
						{
							MSK_FLT_TMP[cur_msk_selector*8+i]=0;
						}
						else //отфильтрованый МСК был нажат
						{
							MSK_FLT_TMP[cur_msk_selector*8+i]++;
							if(MSK_FLT_TMP[cur_msk_selector*8+i]>MSK_FLT)//если истекло время фильтрации
							{

								MSK[cur_msk_selector]&=~(1<<i);//отпустить МСК
								MSK_FLT_TMP[cur_msk_selector*8+i]=0;//очистить фильтр
							}
						}
					}
					else //если МСК нажат
					{
						if(!(MSK[cur_msk_selector]&(1<<i))) //при ненажатом МСК отфильтрованом
						{
							MSK_FLT_TMP[cur_msk_selector*8+i]++;
							if(MSK_FLT_TMP[cur_msk_selector*8+i]>MSK_FLT)//если истекло время фильтрации
							{
								//MSK[cur_msk_selector]|=(1<<i);//отпустить МСК
								MSK[cur_msk_selector]|=(1<<i+4);//отпустить МСК
								MSK_FLT_TMP[cur_msk_selector*8+i]=0;//очистить фильтр
							}
						}
						else //отфильтрованая кнопка не была нажата
						{
							MSK_FLT_TMP[cur_msk_selector*8+i+4]=0;
						}
					}
				//}
				//else {
				//	if(temp&(1<<i+4)) //МСК не нажат
				//	{
				//		if(!(MSK[cur_msk_selector]&(1<<i+4))) //при ненажатом МСК отфильтрованом
				//		{
				//			MSK_FLT_TMP[cur_msk_selector*8+i+4]=0;
				//		}
				//		else //отфильтрованый МСК был нажат
				//		{
				//			MSK_FLT_TMP[cur_msk_selector*8+i+4]++;
				//			if(MSK_FLT_TMP[cur_msk_selector*8+i+4]>MSK_FLT)//если истекло время фильтрации
				//			{
				//
				//				MSK[cur_msk_selector]&=~(1<<(i+4));//отпустить МСК
				//				MSK_FLT_TMP[cur_msk_selector*8+i+4]=0;//очистить фильтр
				//			}
				//		}
				//	}
				//	else //если МСК нажат
				//	{
				//		if(!(MSK[cur_msk_selector]&(1<<(i+4)))) //при ненажатом МСК отфильтрованом
				//		{
				//			MSK_FLT_TMP[cur_msk_selector*8+i+4]++;
				//			if(MSK_FLT_TMP[cur_msk_selector*8+i]>MSK_FLT)//если истекло время фильтрации
				//			{
				//				//MSK[cur_msk_selector]|=(1<<i);//отпустить МСК
				//				MSK[cur_msk_selector]|=(1<<(i+4));//отпустить МСК
				//				MSK_FLT_TMP[cur_msk_selector*8+i+4]=0;//очистить фильтр
				//			}
				//		}
				//		else //отфильтрованая кнопка не была нажата
				//		{
				//			MSK_FLT_TMP[cur_msk_selector*8+i+4]=0;
				//		}
				//	}
				//}


			}

		#endif	//Кінець фільтрації МСК

		cur_msk_selector++;//инкремент текущего МСК
		if(cur_msk_selector>3)
		{
			cur_msk_selector=0;         // Условие обнуления счетчика выбора МСК.
		}


		set_data_low((0x11<<cur_msk_selector),CS2);//засвечивание следующего столбца МСК
		set_data_low((0x11<<cur_msk_selector),CS0);//засвечивание следующего столбца МСК
		//#if X2_MSK
		//	#if X3_MSK
		//		set_data_low((0x01<<cur_msk_selector),CS2);//засвечивание следующего столбца МСК
		//	#else
		//		set_data_low((1<<cur_msk_selector),CS2);	//засвечивание следующего столбца МСК
		//	#endif
		//#else
		//	#if X3_MSK
		//		set_data_low((1<<cur_msk_selector+4),CS2);	//засвечивание следующего столбца МСК
		//	#endif
		//#endif
		//
		//#if X4_MSK
		//set_data_low((1<<cur_msk_selector),CS0);//засвечивание следующего столбца МСК
		//#endif
		//#if X5_MSK
		////set_data_low((1<<cur_msk_selector+4),CS0);//засвечивание следующего столбца МСК
		//#endif

		//set_data_low((1<<(cur_msk_selector+1),CS1);

	#endif//for MK_035
}