精华内容
下载资源
问答
  • ISSC 创杰 拨动开关原理图 2010, 已经批量放心使用。
  • 电源开关轻触开关拨动开关集成库原理图库PCB库AD封装库器件库2D3D库合集(AD集成库IntLib格式文件), 拆分后文件为PcbLib+SchLib格式,Altium Designer的原理图库+ 2D3D PCB封装库,3D视图库,AD库,均经测试,可以...
  • DIP开关

    2020-11-23 02:13:27
    DIP开关它的原理与跳线很类似,只是在通断的控制上是以小型的拨动开关来替代了Jumper(跳线)。图是种8位的DIP开关,DP开关的左上角(或右上角)通常有"ON"标识,表明当开关拨向上部时为接通"ON"状态,向下则为断开"0FF...
  • (2)把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;4.程序设计内容(1)开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的...
  • 4,带一个LED显示器,多路拨动开关,一个复位健。 5,晶振源兼容5种封装,其中一种是支持9v、5W高精度恒温晶振。 6,fpga内部2个PLL相互连接可以实现0-200MHz内任意频率输出。 LED显示器 , 拨动开关 , 恒温晶振 , ...
  • 该电路是由约翰·伦德格伦改编自“拨动开关去抖的按钮”。需要从一个位置接通和从另一个位置关掉负载,这个电路是有用的。任何数量的瞬间(N / O)开关或按钮可并行连接。 在原理图上的左侧的组合(10K,10uF和...
  • 该电路是由约翰·伦德格伦改编自“拨动开关去抖的按钮”。需要从一个位置接通和从另一个位置关掉负载,这个电路是有用的。任何数量的瞬间(N/O)开关或按钮可并行连接。 在原理图上的左侧的组合(10K,10uF和...
  • PC口接8个拨动开关K0-K7,PB口接4个发光二极管LED0-LED3,从C口获取开关K0-K7接到GND的位置信息(当K0-K7中任何一个接到+5V时读入逻辑‘1’,接到GND时读入逻辑‘0’),并将该开关位置以16进制数据的方式点亮和熄灭...
  • 该电路是由约翰·伦德格伦改编自“拨动开关去抖的按钮”。需要从一个位置接通和从另一个位置 关掉负载,这个电路是有用的。任何数量的瞬间(N / O)开关或按钮可并行连接。 在原理图上的左侧的组合(10K,10uF和...

    该电路是由约翰·伦德格伦改编自“拨动开关去抖的按钮”。需要从一个位置接通和从另一个位置
    关掉负载,这个电路是有用的。任何数量的瞬间(N / O)开关或按钮可并行连接。

    在原理图上的左侧的组合(10K,10uF和二极管)保证了电路接通电源时保持负载断开状态。

    在这里插入图片描述
    如果初始上电状态不是一个问题,这些组件可以被省略。

    当开关按下时,1uF电容被连接到220欧姆和33K电阻连接点,NPN晶体管截止,场效应管导通开启负
    载。释放按钮后,1uF电容通过1M电阻充电。第二次按下开关,1uF电容充电后的电压被加载到NPN
    晶体管基极,晶体管导通,场效应管关闭,负载断电。

    当开关按下时,1uF电容被连接到220欧姆和33K电阻连接点,NPN晶体管截止,场效应管导通开
    启负载。释放按钮后,1uF电容通过1M电阻充电。第二次按下开关,1uF电容充电后的电压被加载到
    NPN晶体管基极,晶体管导通,场效应管关闭,负载断电。

    在晶体管的基极加入0.1uF电容,拦截噪声可能造成的误触发,如果开关位于远离电路。使用12伏,25瓦特汽车灯,和IRFZ44的电路进行了测试。其他的MOSFET大概可以使用。

    KIA半导体MOS管具备挺大的核心竞争力,是开关电源生产厂家的最好的选择。KIA半导体 MOS管厂
    家主要研发、生产、经营:场效应管(MOS管)、COOL MOS(超结场效应管)、三端稳压管、快恢复二极管;广泛应用于逆变器、锂电池保护板、电动车控制器、HID车灯、LED灯、无刷电机、矿机电源、工业电源、适配器、3D打印机等领域;可申请样品及报价和有技术支持,有什么问题有技术
    员帮忙解决问题!有需要或想了解下的可以加扣扣2880195519

    展开全文
  • 该设计开源无线手柄采用NRF24L01模块...2个拨动开关 4个LED 1路串口输出 1路程序下载SW接口 NRF24L01无线手柄实物展示: 无线手柄原理图、PCB截图: 实物购买链接:https://item.taobao.com/item.htm?spm=a1z10.1-c.w40...
  • 1、8255基本输入输出 ...能够在自行设计的接口开发板上,实现拨动开关控制LED的亮灭。 DATA SEGMENT DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV DX,0606H MOV AL,10000010B OUT DX,AL

    1、8255基本输入输出

    能够在自行设计的接口开发板上,实现拨动开关控制LED的亮灭。

    DATA SEGMENT
    DATA ENDS
    
    CODE SEGMENT
             ASSUME DS:DATA,CS:CODE
    
    START:
               MOV DX,0606H
               MOV AL,10000010B
               OUT DX,AL
    
    NEXT:
             MOV DX,0602H
             IN AL,DX
             MOV DX,0600H
             OUT DX,AL
             JMP NEXT
    
             MOV AH,4CH
             INT 21H
    
    CODE ENDS
             END START
    2、数码管应用

        能够在自行设计的接口开发板上,数码管显示0到7,实现拨动不同开关,数码管显示该开关位置值(1-8);若同时拨动两个以上开关,则数码管显示"E"



    DATA SEGMENT
            NUM DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,79H
    DATA ENDS
    CODE SEGMENT
             ASSUME DS:DATA,CS:CODE
    START:
               MOV AX,DATA
               MOV DS,AX
     
               MOV DX,0606H
               MOV AL,10010000B
               OUT DX,AL
    
    LOOP2:
                MOV DX,0600H
                IN AL,DX
    
                CMP AL,00000000B
                MOV SI,OFFSET NUM
                JZ NEXT
                MOV BL,AL
                SUB BL,1
                AND BL,AL
                CMP BL,00000000B
                MOV SI,OFFSET NUM+9
                JNZ NEXT
                MOV SI,OFFSET NUM+1
    
    LOOP1:
                CMP AL,00000001B
                 JZ NEXT
                 SHR AL,1
                 INC SI
                 JMP LOOP1
    
    NEXT:
              MOV AL,[SI]
              MOV DX,0602H
              OUT DX,AL
              JMP LOOP2
              MOV AH,4CH
              INT 21H
    
    CODE ENDS
             END START

    3、汽车速度控制系统



    IOY0         EQU   0600H          ;片选IOY0对应的端口始地址
    MY8255_A     EQU    IOY0+00H*2     ;8255的A口地址
    MY8255_B     EQU   IOY0+01H*2     ;8255的B口地址
    MY8255_C     EQU   IOY0+02H*2     ;8255的C口地址
    MY8255_MODE  EQU   IOY0+03H*2     ;8255的控制寄存器地址
    
    SSTACK	SEGMENT STACK
    		DW 32 DUP(?)
    SSTACK	ENDS
    DATA SEGMENT
    	NUMS DB 3FH,06H,5BH,4FH,66h,6dh,7dh,07h,7fh,6fh,79H
    	REAL DB 0,0,4,0,0,0
    	TARGET DB 0,0,0,0,0,0
    	WHICH DB 0
    	CLOCKER DB 0
    DATA ENDS
    CODE	SEGMENT
    		ASSUME CS:CODE
    START:	MOV DX, MY8255_MODE
    
    		MOV AL, 81H
    		OUT DX, AL
    		MOV BX, 8001H
    		
    		MOV DX,MY8255_B
    		MOV AL,0H
    		OUT DX,AL
    		
    CTRL:	
    		MOV SI,DATA
    		MOV DS,SI
    		MOV DX, MY8255_C
    		IN  AL, DX
    		TEST AL,8H
    		JNZ	DANG_4
    		TEST AL,4H
    		JNZ DANG_3
    		TEST AL,2H
    		JNZ DANG_2
    		TEST AL,1H
    		JNZ DANG_1
    		JMP DANG_0
    
    DANG_0:
    	MOV AL,0
    	
    	MOV DI,OFFSET TARGET
    	ADD DI,2H
    	MOV DS:[DI],AL
    	SAL AL,4
    	OUT DX,AL
    	JMP STARTP	
    DANG_1:
    	MOV AL,1
    	
    	MOV DI,OFFSET TARGET
    	ADD DI,2H
    	MOV DS:[DI],AL
    	SAL AL,4
    	OUT DX,AL
    	JMP STARTP
    DANG_2:
    	MOV AL,2
    	
    	MOV DI,OFFSET TARGET
    	ADD DI,2H
    	MOV DS:[DI],AL
    	SAL AL,4
    	OUT DX,AL
    	JMP STARTP
    DANG_3:
    	MOV AL,4
    	
    	MOV DI,OFFSET TARGET
    	ADD DI,2H
    	MOV DS:[DI],AL
    	SAL AL,4
    	OUT DX,AL
    	JMP STARTP
    DANG_4:
    	MOV AL,8
    	
    	MOV DI,OFFSET TARGET
    	ADD DI,2H
    	MOV DS:[DI],AL
    	SAL AL,4
    	OUT DX,AL
    
    STARTP:
    		MOV DI,OFFSET CLOCKER
    		MOV AX,DS:[DI]
    		CMP AX,0055H
    		JZ CTINC
    		
    		INC AX
    		MOV DS:[DI],AX
    		
    		CALL PRINTALL
    		;CALL DELAY
    		JMP CTRL
    		
    CTINC:
    		MOV AX,0
    		MOV DS:[DI],AX
    		CALL COMPARE
    		CMP AX,1H
    		JZ	CTRDEC
    		CMP AX,2H
    		JZ CTRINC
    		
    		
    		JMP CTRL
    CTRINC:
    		CALL INCREMENT
    		JMP CTRL
    CTRDEC:
    		CALL DECREMENT
    J_END:
    		JMP CTRL
    
    ;CALL
    DELAY:	
    		MOV CX, 00fFH
    AA2:	
    		LOOP AA2
    		RET
    		
    INCREMENT:;AL is current bit
    		MOV SI,DATA
    		MOV DS,SI
    		MOV AL,0
    		MOV AH,0
    		MOV DI,OFFSET REAL
    		ADD DI,AX
    		
    		MOV AH,DS:[DI]
    		INC AH
    		MOV DS:[DI],AH		;increment lowest bit
    		
    TOHIGH:
    		;AH is the value of current bit
    		CMP AH,0AH
    		JNZ INCEND
    		
    		
    		MOV AH,0
    		MOV DS:[DI],AH		;set current bit 0
    	
    		MOV BL,6
    		DEC BL
    		CMP AL,BL	;whether is the highest bit
    		JZ	INCEND	
    
    		INC AL
    		MOV BX,AX
    		MOV DI,OFFSET REAL
    		ADD DI,BX
    		MOV AH,DS:[DI]
    		INC AH
    		MOV DS:[DI],AH	;;make higher bit inc
    		
    		JMP TOHIGH
    INCEND:
    		RET
    		
    DECREMENT:
    		MOV SI,DATA
    		MOV DS,SI
    		MOV AL,0
    		MOV AH,0
    		MOV DI,OFFSET REAL
    		ADD DI,AX
    		
    		MOV AH,DS:[DI]
    		DEC AH
    		MOV DS:[DI],AH		;increment lowest bit
    		
    TODLOW:
    		;AH is the value of current bit
    		CMP AH,00FFH
    		JNZ DECEND
    		
    		
    		MOV AH,9H
    		MOV DS:[DI],AH		;set current bit 9
    	
    		MOV BL,6
    		DEC BL
    		CMP AL,BL	;whether is the highest bit
    		JZ	DECEND	
    
    		INC AL
    		MOV AH,0
    		MOV BX,AX
    		MOV DI,OFFSET REAL
    		ADD DI,BX
    		MOV AH,DS:[DI]
    		DEC AH
    		MOV DS:[DI],AH	;make higher bit inc
    		
    		JMP TODLOW
    DECEND:
    		RET
    		
    		
    ;AX 1 bigger 2 smaller 0 equall
    COMPARE:
    		MOV SI,DATA
    		MOV DS,SI
    		MOV BX,05H
    
    CMPSTART:
    		CMP BX,00FFFFH
    		JZ CMPEQUALLEND
    		
    		MOV DI,OFFSET REAL
    		ADD DI,BX
    		MOV AL,DS:[DI]
    		
    		MOV DI,OFFSET TARGET
    		ADD DI,BX
    		MOV AH,DS:[DI]
    		
    		CMP AL,AH
    		JNLE CMPBIGEND
    		JNGE CMPSMALLEND
    		
    		DEC BX
    		JMP CMPSTART
    CMPBIGEND:
    		MOV AX,1H
    		RET
    CMPSMALLEND:
    		MOV AX,2H
    		RET
    CMPEQUALLEND:
    		MOV AX,0H
    		RET
    		
    PRINTALL:
    		MOV SI,DATA
    		MOV DS,SI
    		MOV BX,00H
    		MOV AL,11011111B
    		MOV DI,OFFSET WHICH
    		MOV DS:[DI],AL
    PASTART:
    		CMP BX,3H
    		JZ PAEND
    		
    		MOV DX,MY8255_B
    		MOV AL,11111111B
    		OUT DX,AL
    		
    		MOV AH,0H
    		MOV DI,OFFSET REAL
    		ADD DI,BX
    		MOV AL,DS:[DI]
    		
    		
    		MOV SI,DATA
    		MOV DI,OFFSET NUMS
    		ADD DI,AX
    		MOV DS,SI
    		MOV AL,DS:[DI]
    		
    		MOV DX,MY8255_A
    		OUT DX,AL
    		
    		MOV DX,MY8255_B
    		MOV DI,OFFSET WHICH
    		MOV AL,DS:[DI]
    		OUT DX,AL
    		ROR AL,1
    		MOV DS:[DI],AL
    		
    		INC BX
    		JMP PASTART
    PAEND:
    		RET
    		
    CODE	ENDS
    		END  START
    

















    展开全文
  • 本系统由STC89C52单片机电路+1路按键点火模拟电路+路黄色指示灯电路+HX711称重传感器电路+1位拨动开关电路+1路绿色指示灯电路+1路红灯指示电路+语音模块ISD1820电路+电源电路。 具体功能: 1、点火按键按下后,黄色...

    硬件设计

    (末尾附文件)

    本系统由STC89C52单片机电路+1路按键点火模拟电路+路黄色指示灯电路+HX711称重传感器电路+1位拨动开关电路+1路绿色指示灯电路+1路红灯指示电路+语音模块ISD1820电路+电源电路。
    具体功能:
    1、点火按键按下后,黄色指示灯亮,表示点火;再按一次,黄色指示灯灭,表示熄火。
    2、点火后,如果压力传感器没检测到压力,无任何操作;
    3、点火后,如果检测到压力超过一定值,且拨动开关关上(系好了安全带),这时绿色指示灯闪烁。
    如果开关拨下(没系好了安全带),这时红色指示灯闪烁报警,同时语音提示:“请系好安全带”。直到安全带系好后,语音停止同时红色指示灯灭,绿色指示灯闪烁。
    4、不点火,上述功能无响应,必须点火有效。

    原理图:
    在这里插入图片描述

    程序设计

    #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
    #include<stdio.h>
    #include "delay.h"
    #include "hx711.h"
    #include "1602.h"
    
    sbit key_dh=P1^0; 		//接口定义
    sbit LED_R=P1^1;
    sbit LED_Y=P1^2;
    sbit LED_G=P1^3;
    sbit CTRL_YY=P1^4;
    sbit Key_aq=P1^5;
    
    unsigned long time_20ms=0; 	//	系统定时计数
    unsigned char Error1Num;				//重量异常计数
    unsigned char ReadFlag = 0;				//读取标志
    unsigned char WeithFlag = 0;		  //称重标志
    unsigned char rekey_dh = 0;			  //按键防止重复
    unsigned char blankFlag = 0; 	//指示灯是否闪烁
    unsigned char reportYy = 0;		 //语音上报
    bit startFlag =0;			   //点火标志
    xdata long Weight_Shiwu=0;		//实际重量
    xdata unsigned long Weight_Maopi=0;	 //毛坯重量
    
    void Init_Timer0(void);			//函数声明
    
    void main (void)
    {     
    	Init_Timer0();        //定时器0初始化
    
    	LCD_Init();           //初始化液晶
    	DelayMs(20);          //延时有助于稳定
    	LCD_Clear();          //清屏
    
    	
    
    	DelayMs(250);          //延时有助于稳定
    	Weight_Maopi = HX711_Read();  	//读取去皮重量
    	DelayMs(20);
    	Weight_Maopi = HX711_Read();
    	DelayMs(250);
    
    	LED_Y = 1;			 //初始化完成关闭灯
    	LED_G = 1;
    	LED_R = 1 ;
    	startFlag =0;
    	LCD_Write_String(0,0,"My Designer ");//显示
    	LCD_Write_String(0,1,"Fasten Seatbelt!");//显示
    	while (1)         //主循环
    	{
    		if(key_dh == 0)				//点火
    		{
    			if(rekey_dh == 0)	  //点火防止重复
    			{
    				DelayMs(10);
    				
    			}		
    		}
    		else
    		{rekey_dh = 0;}
    
    		if(ReadFlag==1)	 //读取称
    		{
    			ReadFlag=0;
    			Weight_Shiwu = HX711_Read();	 		//读取实物重量
    			
    
    			if(Weight_Shiwu > 0)	//称重大于零清空		
    			{	
    				Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/430); 	//g计算实物的实际重量
    				
    				else
    				{
    				  	Error1Num++;
    					if(Error1Num>=2)		   //有人坐下
    					{
    					  	WeithFlag=1;
    						if(startFlag==1)	   //点火后
    						{
    							if(Key_aq == 0)	 //安全带未系上
    							{
    								blankFlag = 1 ;	   reportYy =0;	 CTRL_YY =1 ; //红灯闪烁标志
    								LCD_Write_String(0,1,"Sit Ok !        ");//显示
    							}
    							else
    							{
    								blankFlag = 2 ;	   //绿灯闪烁只是
    								LCD_Write_String(0,1,"Fasten Seatbelt!");//显示
    								reportYy = 1;															
    							}						
    						}
    						else
    						{
    						 	blankFlag =0 ;	   //灯不闪烁
    							reportYy =0;		 //关闭语音
    							CTRL_YY =1 ;
    						}
    
    					}
    				}													
    			}
    			else
    			{Error1Num=0;}		 //清空异常计数
    		}
    	}
    }
    
    
    void Init_Timer0(void)
    {
    	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
    	TH0=(65536-20000)/256;		  //重新赋值 20ms
    	TL0=(65536-20000)%256;
    	EA=1;            //总中断打开
    	ET0=1;           //定时器中断打开
    	TR0=1;           //定时器开关打开
    }
    
    void Timer0_isr(void) interrupt 1 
    {
    	TH0=(65536-20000)/256;		  //重新赋值 20ms
    	TL0=(65536-20000)%256;
    
    	time_20ms++;
    	if(time_20ms%10==0)
    	{
    	 	ReadFlag=1;
    		if(blankFlag == 1)				//绿灯闪烁 红灯熄灭
    		{LED_G =  !LED_G;LED_R = 1;}
    		else if(blankFlag == 2)			 //红灯闪烁 绿灯熄灭
    		{LED_R = !LED_R;LED_G = 1; CTRL_YY =!CTRL_YY;}
    		else
    

    .

    文件仅供参考:
    链接:https://pan.baidu.com/s/1AqFk5gsMtW0Xf5shs_FLOw
    提取码:styd

    .

    展开全文
  • 效果图预览 ...5. 圆环开关控制按钮的波动范围处理 2. 实现原理 1. 绘制文字这个简单 2. 绘制刻度圆环 分等份 用canvas.drawArc画若干圆环 3. 绘制渐变圆环,需要用到Paint的setShader方法...

    效果图预览
    这里写图片描述

    1. 分析

    1. 绘制中间数字
    2. 绘制带刻度的圆环  考虑分成若干等份
    3. 绘制渐变圆环 需要用到渐变相关属性
    4. 动画处理的同时需要考虑时时计算角度
    5. 圆环开关控制按钮的波动范围处理
    

    2. 实现原理

    1. 绘制文字这个简单
    2. 绘制刻度圆环 分等份 用canvas.drawArc画若干圆环
    3. 绘制渐变圆环,需要用到Paint的setShader方法设置渐变颜色
    4. 属性动画处理
    

    3. 初始化一些东西 初始化一般我放在onSizeChanged方法中

     @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    
        mCenterX = w / 2;
        mCenterY = h / 2;
    
        int[] colors = {Color.RED,Color.GREEN,Color.YELLOW};
        mSweepGradient = new SweepGradient(mCenterX,mCenterY, colors,null);
    
        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ring_dot);
        mBitmap = conversionBitmap(mBitmap,dp2px(30),dp2px(30));
        mMinValidateTouchArcRadius = (int) (mCircleRadius - mBitmap.getWidth() / 2 * 1.5);
        mMaxValidateTouchArcRadius = (int) mCircleRadius;
    }
    

    4. 绘制中间数字和带刻度线的圆环

     /**
     * 画带刻度线的圆环
     */
    private void drawScaleRing(Canvas canvas) {
        float margin = mRingRadius - dp20;
        float left = mCenterX - margin;
        float top = mCenterY - margin;
        float right = left + 2 * margin;
        float bottom = top + 2 * margin;
        mScaleReacF.set(left,top,right,bottom);
        // 等分成360 / 6 = 60份 保证间距一样的
        for (int i = 0; i < sweepAngle / 6; i++) {
            canvas.drawArc(mScaleReacF, startAngle + i * 6, 1f, false, mScaleRingPaint);
        }
    }
    
    /**
     * 画中间的数字
     */
    private void drawMidNum(Canvas canvas) {
        String value = String.valueOf(mStepNum);
        //测量文字的宽高
        mTextPaint.getTextBounds(value, 0, value.length(), mTextRect);
        int width = mTextRect.width();//文字宽
        int height = mTextRect.height();//文字高
        canvas.drawText(value, mCenterX - width / 2, mCenterY + height / 2, mTextPaint);
    }
    

    5. 绘制带渐变色的进度圆环

     /**
     * 画进度圆环
     */
    private void drawRingProgress(Canvas canvas) {
        canvas.save();
        //canvas.rotate(-90);
        float left = mCenterX - mRingRadius;
        float top = mCenterY - mRingRadius;
        float right = left + 2 * mRingRadius;
        float bottom = top + 2 * mRingRadius;
        mProgressReacF.set(left,top,right,bottom);
        //设置渐变颜色
        mProgressPaint.setShader(mSweepGradient);
        float sweepAngle = mCurrentAngle;
        //绘制圆环 startAngle开始角度 sweepAngle扫瞄的角度
        canvas.drawArc(mProgressReacF, startAngle, sweepAngle, false, mProgressPaint);
        canvas.restore();
    }
    

    6. 进度条动画和数字处理

    //加载进度条动画
    public void setProgressAnimation(float last, float currentProgress, long duration) {
        mCurrentAngle = (currentProgress / mMaxProgress) * sweepAngle;
        ValueAnimator progressAnimator = ValueAnimator.ofFloat(last, mCurrentAngle);
        progressAnimator.setDuration(duration);
        progressAnimator.setTarget(mCurrentAngle);
        progressAnimator.setInterpolator(new AccelerateInterpolator());
        progressAnimator.start();
        progressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                /**每次要绘制的圆弧角度**/
                mCurrentAngle = (float) animation.getAnimatedValue();
                //根据当前进度和总进度计算当前步数
                mStepNum = (int) (mCurrentAngle / sweepAngle * mMaxStepNum);
                postInvalidate();
            }
        });
    }
    

    7. 触摸事件处理

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        if (mIsShowControlIcon && (event.getAction() == MotionEvent.ACTION_MOVE || isTouchArc(x, y))) {
            // 通过当前触摸点搞到cos角度值
            float cos = computeCos(x, y);
            // 通过反三角函数获得角度值
            double angle;
            if (x < mCenterX) { // 滑动超过180度
                angle = Math.PI * RADIAN + Math.acos(cos) * RADIAN;
            } else { // 没有超过180度
                angle = Math.PI * RADIAN - Math.acos(cos) * RADIAN;
            }
            if (mCurrentAngle > 270 && angle < 90) {
                mCurrentAngle = 360;
                cos = -1;
            } else if (mCurrentAngle < 90 && angle > 270) {
                mCurrentAngle = 0;
                cos = -1;
            } else {
                mCurrentAngle = (float) angle;
            }
            mCurrentProgress = getSelectedValue();
            invalidate();
            return true;
        } else {
            return super.onTouchEvent(event);
        }
    }
    
    private int getSelectedValue() {
        return Math.round(mMaxProgress * (mCurrentAngle / sweepAngle));
    }
    
    /**
     * 按下时判断按下的点是否按在圆边范围内
     * @param x
     * @param y
     */
    private boolean isTouchArc(int x, int y) {
        double d = getTouchRadius(x, y);
        return d >= mMinValidateTouchArcRadius && d <= mMaxValidateTouchArcRadius;
    }
    
    /**
     * 计算某点到圆点的距离
     * @param x
     * @param y
     */
    private double getTouchRadius(int x, int y) {
        int cx = x - mCenterX;
        int cy = y - mCenterY;
        return Math.hypot(cx, cy);
    }
    
    /**
     * 拿到倾斜的cos值
     */
    private float computeCos(float x, float y) {
        float width = x - mCenterX;
        float height = y - mCenterY;
        float slope = (float) Math.sqrt(width * width + height * height);
        return height / slope;
    }
    

    7. 项目源代码下载

    后面统一提供源代码下载链接
    

    8. 联系方式

    QQ:1509815887
    
    展开全文
  • 【容斥原理

    2017-07-03 17:22:57
    3.每次操作他都选一个质数x,将编号为x和x的整数倍的灯泡的开关拨动一下(如果灯为亮,那么拨动以后灯为不亮,如果灯不亮,拨动以后变为亮) 求最后亮着的灯的数量; 输入: 输入T表示T组测试数据(1 接下来T组...
  • 加速控制:拨动对应的档位再拨动加速开关,数码管显示速度递增至99(加速要与档位匹配,若不匹配则,加速失效);减速控制:拨动减速开关,速度减至0。 二、设计方案 1. 器件需求 1.开关控制速度加速、减速,4个档位...
  • 本设计由STC89C52单片机+光照检测电路(光敏电阻)+超声波HC-SR04模块电路+4位高亮白色LED灯+黄绿LED指示灯电路+拨动开关电路+电源电路组成。 1、通过光敏电阻模块检测光照强度,正常情况下,白天灯不亮,晚上的时候...
  • ESP8266_CH340G串口自动下载固件库原理

    千次阅读 2020-08-03 09:09:04
    ** 手头有两块ESP8266的开发板,一块是大家比较熟悉的NodeMCU , 另外一块是espressif 官方的开发板,两块开发板在下载程序的时候,有很大的区别,espressif 官方开发板需要手动以拨动开关的方式去reset 相关引脚,...
  • 计算机组成原理——数据通路实验

    万次阅读 2018-06-27 23:15:40
    实验电路如下: 数据通路实验:为程序控制方式 数据通路实验:为独立控制方式第1步:将...【操作模式1110】,拨动编程开关到正常位置。第2步:开关与控制信号之间的接线图: 第3步:实验的具体步骤和信号: ...
  • 编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。 2. 流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。 1....
  • 电灯泡 (容斥原理

    2018-10-29 10:44:47
    3.每次操作他都选一个质数x,将编号为x和x的整数倍的灯泡的开关拨动一下(如果灯为亮,那么拨动以后灯为不亮,如果灯不亮,拨动以后变为亮) 求最后亮着的灯的数量 Input 输入T表示T组测试数据(1&lt;=T&.....
  • T^TOJ2332 电灯泡(容斥... 每次操作他都选一个质数x,将编号为x和x的整数倍的灯泡的开关拨动一下(如果灯为亮,那么拨动以后灯为不亮,如果灯不亮,拨动以后变为亮) 求最后亮着的灯的数量   【解题思路】...
  • 微机原理实验二之8259A中断控制器

    千次阅读 2017-06-07 22:57:52
    本次实验的过程是实验一:在本次实验中,我们通过步骤一步一步的实现实验的要求,通过运行程序,上下拨动单脉冲开关,当拨动至凸电平时。我们可以清晰的发现试验箱中的显示器会+1,反复拨动,计数会不断的加一。实验...
  • ⑷控制器的有机结合,只需拨动选择开关,就可实现微程序或组合逻辑控制的切换。 ⑸提供多种工作方式,支持手动、脱机、联机。 ⑹提供三总线接口和锁紧插座,支持I/O扩展。 ⑺提供多种指令系统,支持基本模型机.
  • 本设计由STC89C52单片机电路+太阳能电池板电路+风机发电电路+锂电池充电保护电路+升压电路+稳压电路+光敏电阻电路+4位高亮LED灯电路+2档拨动开关电路+电源电路设计而成。 1、采用风机和太阳能电池板给锂电池充电,...
  • XC5VLX115T-110T XILINX FPGA开发板 PROTEL设计原理图+PCB布局封装文件,RPOTEL版原理图及PCB器件封装,pcb网表已经导出,与...● 提供6路拨动开关接口 ● 提供ISO7816接口 硬件已在项目中使用,可以做为你的设计参考。
  • 1.任务及要求 1.1任务: 按照音符来设定频率和8253定时/计数器的延时...1.2.2 以8253控制扬声器,拨动不同的开关,发出相应的音阶。 1.2.3扩展功能:1、录音:记录所弹奏曲目 2、放录音:任意时刻重放最新记录曲目
  • ③ 程序运行前必须对微地址清零,拨动实验仪右下角清零开关CLR(1->0->1) ④ 用单步微指令运行程序,单击该系统第三行的“单步微指令”图标即可。 ⑤ 观察和记录程序运行过程的数据及结果。
  • 选择为 1HZ,使拨动开关 K1 置为高电平(使拨动开关向上),四位 LED 会按照实验 原理中依次被点亮,当加法器加到 9 时,LED12(进位信号)被点亮。当复位键(按 键开关的 S1 键)按下后,计数被清零。如果拨动开关 ...
  • 泛海微筋膜枪PCBA控制板功能要求 1、驱动 DC无刷电机,可以线性调速; 2、供电方式采用2-3-4串 18650 锂电池...5、泛海微设置两段拨动开关 ON,OFF,不管开关置于 ON 或 OFF 都能正常充电;开关置于 ON, 触摸电源键,能
  • BUTTON_DIP3 拨动开关SS-12F44 C-0402-SMD C-0603-SMD C-0805-SMD C-CAP-SMD-220uF/10V D-1N4148 Header-2*2-2.54mm 双排针-2.54mm Header-2*3-2.54mm 双排针-2.54mm Header-2*9-2.54mm 双排针-2.54mm IR-LED ...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

拨动开关原理