Пример #1
0
uint16_t ADC_Converter(void)
{
    uint32_t i;              	//用于12位数字的计数 
	uint16_t result = 0;
	
	//时序图参见文档的12页。
	CONV_H();				   	
	Delay_nop(SHORT_DELAY);							
	CONV_L();				   	// CONV下降沿表示转换启动。
	Delay_nop(SHORT_DELAY);
	CLK_H();					// 先连续两个时钟脉冲,满足时序要求
	Delay_nop(SHORT_DELAY);
	CLK_L();
	Delay_nop(SHORT_DELAY);
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();

	for(i=0;i<12;i++)	   		// 第三个脉冲开始读取12位的转换内容。
	{
		CLK_H(); 
		Delay_nop(SHORT_DELAY);
		if( DAT_READ() )
			result |= 0x0001;		
		else
			result &= 0xfffe;
		CLK_L();
		Delay_nop(SHORT_DELAY);

		result <<= 1;				
	}
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();				 	// 最后发两个脉冲满足16位的时钟对齐。
	Delay_nop(SHORT_DELAY);
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();
	Delay_nop(SHORT_DELAY);
	CONV_H();				  	// 表示转换结束。

    return(result);        		//返回值    	
}
Пример #2
0
u8 SPI_write_byte(u8 byte)
{
	u8 i;
   	for(i=0;i<8;i++) 
   	{
		if(byte & 0x80)
			 MOSI_H();
		else 
     		 MOSI_L();			
		byte = (byte << 1);           
		CLK_H();                      
		byte |= READ_MISO;       		  
		CLK_L();           		  
   	}
    return(byte);           		  
}
Пример #3
0
static void write_TM1616(u8 data)
{
	u8 data_temp = data;
	u8 i;
	for(i=0;i<8;i++)
	{
		if((data_temp&0x01)!=0)   //send from lower bit
		{
			DIN_H();
		}
		else
		{
			DIN_L();
		}
		CLK_L();        //TM1616 read data as clk positive edge 
		ndelay(1);
		CLK_H();
		ndelay(1);
		data_temp = data_temp>>1;
	}	
}
Пример #4
0
static void show_4_num(u8 data1,u8 data2,u8 data3,u8 data4)
{
	DIN_H();
	CLK_H();
	STB_H();
	ndelay(1);
	write_TM1616_command(0x00);
#ifdef LOCK_ADDR
	write_TM1616_command(0x44);
	write_TM1616_data_mod0(0xc0,NUM[data1]);
	write_TM1616_data_mod0(0xc2,NUM[data2]);
	write_TM1616_data_mod0(0xc4,NUM[data3]);
	write_TM1616_data_mod0(0xc6,NUM[data4]);
#endif

#ifdef INC_ADDR
	write_TM1616_command(0x40);
	write_TM1616_data_mod1(0xc0,NUM[data1],NUM[data2],NUM[data3],NUM[data4]);
#endif

	sunxi_d7s_display_on();
}