数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5229|回复: 16

[PIC] 废物利用做了几个简单usb测试仪,带简单诱骗器

[复制链接]
发表于 2021-7-29 17:32:12 | 显示全部楼层 |阅读模式
废物利用做了几个简单测试仪,带简单诱骗器。可惜PIC16F690单片机ROM太小了有些东西用不了。
main.c,有需要的可参考一下
  1. #include <pic.h>//绿屏版
  2. __CONFIG(0X3BE4);
  3. //关闭看门狗,选择高速晶振,上电延时复位,掉电复位使能,代码保护
  4. //#include "tab1.h"
  5. #include "tab2.h"
  6. #include "dianzhen12864.h"
  7. #include "AD.h"
  8. unsigned char ReadEE(unsigned char addr);
  9. void WriteEE(unsigned char addr,unsigned char data);        //写EEPROM
  10. void get_AD();

  11. uchar hour=0; //时分秒
  12. uchar min=0;  
  13. uchar sec=0;
  14. uint mah;//容量 mah表示
  15. uint mahYS;//容量 mah表示
  16. uchar valL;
  17. uchar valH;
  18. unsigned long int mas=0;//ma秒,3600mas=1mah
  19. bit GL=0;

  20. #define  YX      RA2
  21. #define  SET      RB4
  22. #define  CC     RB5//CC
  23. #define  BG    RA5
  24. uchar ad1,ad2,ad3,ad4;
  25. uchar i1,i2,i3,i4,i5,i6,i7;
  26. void delay(uint x);

  27. void init();  

  28. void timer1_init();
  29. uchar counter=0;//计数器


  30. void timer1_init()
  31. {
  32.         GIE=1;
  33.         PEIE=1;
  34.         PIE1=1;
  35.         T1CON=0B00110101;
  36. //        T1CKPS0=1;T1CKPS1=1;                //1:8
  37. //        TMR1CS=0;
  38.    TMR1IE=1;
  39.         TMR1ON=1;
  40.         TMR1H=0xfb;
  41.         TMR1L=0x1e;

  42. }
  43. /***************************/

  44.                 //如果充电电流小于10ma,则认为充电停止
  45.       

  46.                


  47. /*****************************/
  48.    void interrupt ISR(void)
  49.   {
  50.          
  51.         if(TMR1IF==1)
  52.         {
  53.                
  54.                 TMR1IF=0;
  55.                 TMR1H=0xfb;
  56.                 TMR1L=0x1e;
  57.                         if(++counter>=99)
  58.                            {
  59.                                 counter=0;
  60.                                  YX=~YX;
  61.                                 GL=1;
  62.                               
  63.                                 }
  64.                         }
  65.         }


  66. /**********main***********/
  67. void main()
  68. {               


  69.                
  70.                 delay(100);
  71.                    init();
  72.                 delay(100);
  73.                          InitLCD();
  74.                         delay(100);
  75.                     clear_screen();
  76. /*               
  77. DisplayString1608(1, 20,"-" );
  78. DisplayString1608(5, 28,"U" );
  79. DisplayString1608(5, 36,"S" );
  80. DisplayString1608(5, 44,"B" );
  81. DisplayString1608(5, 52,"t" );
  82. DisplayString1608(5, 60,"e" );
  83. DisplayString1608(5, 68,"s" );
  84. DisplayString1608(5, 76,"t" );
  85. //DisplayString1608(1, 84,"-" );
  86. */



  87. timer1_init();   
  88.                 YX=0;
  89.                 delay(10);
  90.                 YX=1;
  91.                 delay(1000);
  92.                
  93.                   YX=0;
  94.       
  95.                 delay(100);
  96.                         valL=ReadEE(0x02);
  97.                         delay(10);
  98.                         valH=ReadEE(0x03);
  99.                         delay(10);
  100.                         mah=valL+valH*256;      
  101.                         delay(10);
  102.                         mahYS=mah;
  103.                         sec=ReadEE(0x04);
  104.                         delay(10);
  105.                           min=ReadEE(0x05);
  106.                         delay(10);
  107.                         hour=ReadEE(0x06);
  108.                         delay(10);
  109.                 DisplayString1608(7, 36,"V" );
  110.                 DisplayString1608(7, 96,"m" );
  111.                 DisplayString1608(7, 104,"A" );
  112.                 DisplayString1608(7, 112,"h" );
  113.                          DisplayString1608(1, 36,"A" );
  114.                         DisplayString1608(1, 104,"W" );
  115.                 DisplayString1608(1, 112,"h" );
  116.            while(1)
  117.           {

  118.                
  119.                         get_AD();
  120.                         i1=hour/100;
  121.                         i2=hour%100/10;
  122.                         i3=hour%10;
  123.                         i4=min/10;
  124.                         i5=min%10;
  125.                         i6=sec/10;
  126.                         i7=sec%10 ;
  127.                 WriteEE(0x04,sec);
  128.                 WriteEE(0x05,min);
  129.                 WriteEE(0x06,hour);
  130.                 DisplayNumber1608(3, 0,i1);
  131.                 DisplayNumber1608(3, 8,i2 );
  132.                 DisplayNumber1608(3, 16,i3 );
  133.                 DisplayString1608(3, 24,":");
  134.                 DisplayNumber1608(3, 28,i4 );
  135.                 DisplayNumber1608(3, 36,i5 );
  136.                 DisplayString1608(3, 44,":" );
  137.                 DisplayNumber1608(3, 48,i6 );
  138.                 DisplayNumber1608(3, 56,i7 );
  139.                

  140.                                                 if((SET==0)&&(CC==1))
  141.                                                         {
  142.                                                         delay(600);
  143.                                                         if(SET==0)      
  144.                                                         {BG=~BG;}
  145.                                                         }
  146.       

  147.         }
  148.       
  149. }
  150. /*************************************/
  151. void delay(unsigned int x)
  152. {
  153. uchar a,b;
  154. for(a=x;a>0;a--)
  155.       for(b=110;b>0;b--);
  156.   }
  157.                  
  158.                 void init()
  159.                 {
  160.                                  ANSEL=0X30; //AN4-5
  161.                                  ANSELH=0X00; //AN10-AN11
  162.                                         delay(10);
  163.                                 TRISB=0x30;
  164.                                 PORTB=0XFF;
  165.                                         TRISA=0x00;
  166.                                 PORTA=0x00;
  167.                                 delay(10);
  168.                          TRISC=0x03;
  169.                                   PORTC=0x00;
  170.                                 ADCInit();
  171.                         
  172.                
  173.                 }
  174.                

  175. void get_AD()
  176. {
  177.                  float temp;
  178.                 uint wh;
  179.                 uint temp2;
  180.                 uint k,j;
  181.                 uchar t1,t2,t3,t4,t5;
  182.                 k=ADCAve(AN4,100);
  183.                 delay(10);
  184.          
  185.         temp=k*0.0195;      
  186.       
  187.         //ad4=(int)temp/10;                                //暂存A/D转换结果
  188.         ad1=(int)temp;                                                                //个位
  189.         ad2=((int)(temp*10)-ad1*10)        ;                                //小数点第一位
  190.         ad3=((int)(temp*100)-ad1*100-ad2*10);                //小数点第二位



  191.                         if(ad1>=10)
  192.                
  193.                   {DisplayNumber1608(7, 0, 1);}
  194.                                 else{DisplayNumber1608(7, 0, 0);}
  195.         //        delay(10);
  196.                  DisplayNumber1608(7, 8, ad1);
  197.                 //delay(100);
  198.                 DisplayString1608(7,16,".");
  199.                 DisplayNumber1608(7, 20,ad2 );

  200.                 DisplayNumber1608(7,28,ad3 );
  201.          
  202.                        
  203.                 delay(50);
  204.                  j=ADCAve(AN5,120);
  205.                 delay(30);
  206.         //temp=j*0.018;      
  207.         temp2=(j*13);      
  208.                 temp2=temp2-26;                                //暂存A/D转换结果
  209.         ad1=temp2/1000;                                                                //个位
  210.         ad2=temp2%1000/100;                                //小数点第一位
  211.     ad3=temp2%100/10;                //小数点第二位
  212.         ad4=temp2%10;                        //小数点第三位
  213. /**************************/
  214.                                         if(SET==0)
  215.                                                         {
  216.                                                                 delay(300);      
  217.                                                                 if(CC==0)      
  218.                                                                 {        mah=0;
  219.                                                                         mahYS=0;
  220.                                                                 }
  221.                                                                         delay(800);
  222.                                                                         if(CC==0)
  223.                                                                 {      
  224.                                                                                 sec=0;
  225.                                                                                 min=0;
  226.                                                                                 hour=0;
  227.                                                                                 mas=0;
  228.                                                                 }
  229.                                                       
  230.                               
  231.                                                         }

  232.                                                         valL=mah%256;
  233.                                                 valH=mah/256;
  234.                                         //mah=mahYS;
  235.                                         WriteEE(0x02,valL);
  236.                                         delay(1);
  237.                                         WriteEE(0x03,valH);

  238. /****************************/
  239.         if(temp2>30)
  240.         {
  241.                 if(GL==1)
  242.                         {      

  243.                        
  244.                                         GL=0;               
  245.                                         mas+=temp2;
  246.                                         mah=mas/3600+mahYS;
  247.                                 //        mahYS=0;
  248.                               
  249.                                                                
  250.                                                         sec++;
  251.                                                
  252.                                         if(sec==60)
  253.                                                 {
  254.                                                         sec=0;
  255.                                                         min++;
  256.                                                
  257.                                                         if(min==60)
  258.                                                         {
  259.                                                                 min=0;
  260.                                                                 hour++;
  261.                                                                
  262.                                                         }
  263.                                        

  264.                                                 }
  265.                                         }      
  266.                                 }
  267.                                        
  268.                                        
  269.         /*
  270.                        
  271.                                 //        mahYS=0;      
  272.                                                 valL=mah%256;
  273.                                                 valH=mah/256;
  274.                                         //mah=mahYS;
  275.                                         WriteEE(0x02,valL);
  276.                                         delay(1);
  277.                                         WriteEE(0x03,valH);
  278.                                         delay(1);
  279.                 */                       
  280.       
  281.                 t5=mah/10000;
  282.                 t4=mah%10000/1000;
  283.                 t3=mah%1000/100;
  284.                 t2=mah%100/10 ;
  285.                 t1=mah%10;      

  286.                 DisplayNumber1608(7, 56,t5);
  287.                 DisplayNumber1608(7, 64,t4 );
  288.                 DisplayNumber1608(7, 72,t3 );
  289.                 DisplayNumber1608(7, 80,t2);
  290.                 DisplayNumber1608(7, 88,t1 );
  291.         /******************Wh**********************/

  292.                 wh=temp*mah;
  293.                 t5=wh/10000;
  294.                 t4=wh%10000/1000;
  295.                 t3=wh%1000/100;
  296.                 t2=wh%100/10 ;
  297.                 //t1=wh%10;

  298.                 DisplayNumber1608(1, 64,t5 );
  299.                 DisplayNumber1608(1, 72,t4 );
  300.                 DisplayString1608(1,80,".");
  301.                 DisplayNumber1608(1, 84,t3);
  302.                 DisplayNumber1608(1, 92,t2 );
  303.                 //DisplayNumber1608(1, 96,t1);
  304.         /************************************************/
  305. //        DisplayString1608(5, 0, "0");
  306. DisplayNumber1608(1, 0, ad1);
  307.                 delay(10);
  308.         DisplayString1608(1,8,".");
  309.          DisplayNumber1608(1, 12, ad2);


  310.                 DisplayNumber1608(1, 20,ad3 );
  311.       
  312.                 DisplayNumber1608(1,28,ad4 );
  313.                 //delay(100);
  314.         //        delay(10);
  315.       






  316. }

  317. //读EEPROM
  318. unsigned char ReadEE(unsigned char addr)                //读EEPROM
  319.   {
  320.     unsigned char num;
  321.   while(RD==1);                        //上一次读操作是否完成
  322.     EEADR=addr;  //0x01                  //EEPROM地址为00H
  323.     EEPGD=0;                             //指向EEPROM数据储存器
  324.     RD=1;  
  325. do{;}                              //开始读
  326.     while(RD==1);                        //等待读操作完成
  327.     num=EEDATA;
  328.                         //读出
  329.     return(num);                         //返回读出的数
  330.   }
  331. //写EEPROM
  332. void WriteEE(unsigned char addr,unsigned char data)        //写EEPROM
  333.   {

  334. while(WR==1);                         //上一次写操作是否完成
  335.    EEADR=addr;//0X02                     //EEPROM地址
  336.    EEDATA=data; //0X05                   //准备写入EEPROM的数据
  337.    EEPGD=0;                              //指向EEPROM数据储存器
  338.    WREN=1;                               //使能写操作
  339.    GIE=0;                                //禁止中断                              
  340.    EECON2=0x55;                          //设置通用参数
  341.    EECON2=0xAA;                          //设置通用参数
  342.    WR=1;
  343.    GIE=1;
  344.         do{;}                                //开始写
  345.    while(WR==1);                         //等待写操作完成
  346.    if(EEIF==1)
  347.      {
  348.        EEIF=0;
  349.      }                    
  350.    WREN=0;                               //禁止写操作

  351.   }
复制代码








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 2家元 +140 收起 理由
玛德陛下 + 20 謝謝分享
家睦 + 120

查看全部打赏

发表于 2021-7-30 09:31:51 | 显示全部楼层
这个总成本多少POS啊?:doubt::doubt::doubt:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-30 09:39:59 | 显示全部楼层
long2012 发表于 2021-7-30 09:31
这个总成本多少POS啊?

拆机单片机,新的淘宝也几块钱吧,运放LM321,0.3元,电源ME6209,0.35元,电阻电容2元差不多。屏幕刷卡POS机拆机。电路板嘉立创免费包邮。对我来讲基本都是废东西拼装。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-7-30 09:49:28 | 显示全部楼层
  知识点:好不容易找到 mas=mA /s(秒)//**电流数值每秒,mAh=mas /3600//***毫安时;Wh=mAh/1000*U(当前电压)//瓦时

回复 支持 反对

使用道具 举报

发表于 2021-7-30 11:26:39 | 显示全部楼层
屏幕刷卡POS机?哪里还有得搞?:lol::lol::lol::lol:
回复 支持 反对

使用道具 举报

发表于 2021-7-30 12:19:19 来自手机浏览器 | 显示全部楼层
诱骗是PD还是QC???看不懂怎么弄啊。
回复 支持 反对

使用道具 举报

发表于 2021-7-30 12:21:07 来自手机浏览器 | 显示全部楼层
你这电流如何测准确?运放不是有失调电压,我看你用的是0.025电阻采样,放大十倍左右。失调电压的存在。你这最低测量电流是多少?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-30 12:50:33 | 显示全部楼层
1065307738 发表于 2021-7-30 12:21
你这电流如何测准确?运放不是有失调电压,我看你用的是0.025电阻采样,放大十倍左右。失调电压的存在。你 ...

使用QC3.0快充头0.2V步进调压down是减小UP增加,差分放大,失调电压换算成电流26mA,显示时减去26mA。
回复 支持 反对

使用道具 举报

发表于 2021-7-31 09:11:32 | 显示全部楼层
D+和D-接到哪里了?没看出来怎么诱骗的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-31 09:19:31 来自手机浏览器 | 显示全部楼层
mousebat04 发表于 2021-7-31 09:11
D+和D-接到哪里了?没看出来怎么诱骗的。

借鉴网友的原理图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2021-8-1 08:34:10 | 显示全部楼层
楼主的想法太好了,值得学校
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-4 11:26:07 | 显示全部楼层
使用发现有个漏洞,当时思路计算电能时用当前电压U乘以累加mAh,基本和买的USB测试仪结果差不多。实际使用过程里突然改变当前电压就会出现电能Wh数值有较大波动。举例:Wh=5V X 300mAh=1.5Wh ,如果我调高当前电压结果就会变成Wh=6V X 300mAh=1.8Wh。应该想实现之前1.5Wh不变,额外累加6V X  xxmAh。暂时没想出来怎么实现。
回复 支持 1 反对 0

使用道具 举报

发表于 2021-9-2 16:00:18 | 显示全部楼层
qwer1415926 发表于 2021-8-4 11:26
使用发现有个漏洞,当时思路计算电能时用当前电压U乘以累加mAh,基本和买的USB测试仪结果差不多。实际使用 ...

用库仑计,计算每秒的功率,然后累加
回复 支持 反对

使用道具 举报

发表于 2021-9-2 22:49:48 | 显示全部楼层
动手能力太强了,表示看不懂!
还要继续学习!
回复 支持 反对

使用道具 举报

发表于 2021-9-29 08:39:31 来自手机浏览器 | 显示全部楼层
说是简单,做起来不简单,
回复 支持 反对

使用道具 举报

发表于 2021-9-29 08:40:40 来自手机浏览器 | 显示全部楼层
这刷卡POS有两个,没有利用
回复 支持 反对

使用道具 举报

发表于 2021-9-29 20:37:47 | 显示全部楼层
大神能玩玩FUSB302诱骗PD么,我一直调不通,试了三个PD电源只有一个成功诱骗
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-20 04:08 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表