找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2117|回复: 1
打印 上一主题 下一主题
收起左侧

stc12c5a60s2单片机锂电池放电装置源码参考(实测可用无电路图)

[复制链接]
跳转到指定楼层
楼主
ID:163513 发表于 2018-7-7 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题所示,附件压缩包有oled屏幕程序以及菜单的例程

单片机源程序如下:
  1. //////////////////////////////////////////////////////////////////////////////////         
  2. //  @文 件 名   : main.c
  3. //  @版 本 号   : v1.0
  4. //  @功能描述   : 放电器主函数
  5. //  @author     :Mr.Z
  6. //  @QQ         :
  7. //  @说明       :
  8. //              ----------------------------------------------------------------
  9. //              GND    电源地
  10. //              VCC  接5V或3.3v电源
  11. //              D0   P3^5(SCL)
  12. //              D1   P3^7(SDA)
  13. //              RES  接P12
  14. //              DC   接P13
  15. //              CS   接P14               
  16. //              ----------------------------------------------------------------
  17. //  @注意                                :版权所有,如用作任何商业用途,须和本人联系
  18. //******************************************************************************/
  19. #include "REG51.h"
  20. #include "oled.h"
  21. //#include "bmp.h"
  22. #include <intrins.h>
  23. #include "51_UART_RECEIVE.h"
  24. //#include <math.h>
  25. #define Dot_Size 2                  // ??????
  26. //#define uint unsigned int
  27. //#define uchar unsigned char
  28. #define U8 unsigned char
  29. #define U16 unsigned int
  30. #define uchar unsigned char
  31. #define uint  unsigned int
  32.         
  33. float Voltage1=4.2;
  34. float Voltage2;
  35. float ad0,ad1;
  36. char String[5];
  37. int time,key;
  38. char temp,menu,t,sbuf0;
  39. char pwm=0x40;
  40. char pwm1;

  41. extern char uart_receive_number;


  42. //sbit ad1=P1^0;
  43. //sbit ad2=P1^1;                                                 //
  44. sbit int1=P1^2;
  45. sbit int2=P1^3;
  46. sbit int3=P1^4;
  47. sbit int4=P1^5;

  48. sbit LF=P3^4;
  49. sbit L1=P3^2;
  50. sbit F1=P0^5;
  51. sbit F2=P0^7;
  52. void hanshutiaodong(menu);
  53. void keyscan();


  54. /********************************************************************
  55.                              初始化设置
  56. *********************************************************************/
  57. sfr ADC_CONTR   =   0xBC;           //ADC 控制寄存器
  58. sfr ADC_RES     =   0xBD;           //ADC 转换结果寄存器
  59. sfr ADC_LOW2    =   0xBE;           //ADC 低2位结果寄存器
  60. sfr P1ASF       =   0x9D;           //Pl口模拟功能控制寄存器

  61. /********************************************************************

  62. /********************************************************************
  63.                              延时函数
  64. *********************************************************************/
  65. void Delay(U16 n)
  66. {
  67.     U16 x;
  68.     while (n--)
  69.     {
  70.         x = 5000;
  71.         while (x--);
  72.     }
  73. }

  74. void delay(void)
  75. {
  76.         unsigned char i,j;
  77.         for(i = 0; i < 255; i++)
  78.                 {
  79.                         for(j = 0; j < 200; j++);
  80.                 }

  81. }
  82. void delaykey(uchar z)
  83. {
  84.         uchar x,y;
  85.         for(x=z;x>0;x--)
  86.                 for(y=110;y>0;y--);
  87. }

  88. void delaydianya(uchar zzz)
  89. {
  90.         uchar xxx,yyy;
  91.         for(xxx=zzz;xxx>0;xxx--)
  92.                 for(yyy=110;yyy>0;yyy--)
  93.                                 keyscan();
  94. }

  95. /********************************************************************
  96.                               ADC 数据转换函数
  97. *********************************************************************/

  98. #define ADC_POWER   0x80            //ADC 电源控制位
  99. #define ADC_FLAG    0x10            //ADC 转换结束标志位
  100. #define ADC_START   0x08            //ADC 开始转换控制位
  101. #define ADC_SPEEDLL 0x00            //420 个时钟周期转换一次
  102. #define ADC_SPEEDL  0x20            //280 个时钟周期转换一次
  103. #define ADC_SPEEDH  0x40            //140 个时钟周期转换一次
  104. #define ADC_SPEEDHH 0x60            //70 个时钟周期转换一次

  105. /********************************************************************
  106.                               ADC 初始化
  107. *********************************************************************/
  108. void InitADC()
  109. {
  110.     P1ASF = 0x05;                                    //设置P1口为开漏模式,使用AD功能(0000 0101)
  111.     ADC_RES = 0;                                     //AD数据寄存器清空
  112.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;  //打开AD电源,转换周期420
  113.     Delay(2);                                      //延时
  114. }
  115. /*********************************************************************
  116.                                中断初始化
  117. **********************************************************************/
  118. void initzhongduan()
  119. {        
  120.         time=0;
  121.         temp=0xfe;
  122.         TMOD=0x01;
  123.         TH0=(65536-50000)/256;
  124.         TL0=(65536-50000)%256;
  125.         EA=1;
  126.         ET0=1;
  127.         TR0=1;        
  128. }
  129. /********************************************************************
  130.                               ADC 数据转换函数
  131. *********************************************************************/
  132. U8 GetADCResult(U8 ch)
  133. {
  134.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//开始转换
  135.     _nop_();                        //延时一个机器周期
  136.     _nop_();                                                //延时一个机器周期
  137.     _nop_();                                                //延时一个机器周期
  138.     _nop_();                                                //延时一个机器周期
  139.     while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
  140.     ADC_CONTR &= ~ADC_FLAG;         //关闭AD转换

  141.     return ADC_RES;                 //返回数据
  142. }


  143. /********************************************************************
  144.                              初始化定义函数
  145. *********************************************************************/

  146. sfr CCON     = 0xD8; //PCA控制寄存器
  147. sfr CMOD     = 0xD9; //PCA模式寄存器
  148. sfr CCAPM0   = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)   
  149. sfr CCAPM1   = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
  150. sfr CL       = 0xE9; //PCA 定时寄存器 低位
  151. sfr CH       = 0xF9; //PCA 定时寄存器 高位
  152. sfr CCAP0L   = 0xEA; //PCA模块0的 捕获寄存器 低位
  153. sfr CCAP0H   = 0xFA; //PCA模块0的 捕获寄存器 高位
  154. sfr CCAP1L   = 0xEB; //PCA模块1的 捕获寄存器 低位
  155. sfr CCAP1H   = 0xFB; //PCA模块1的 捕获寄存器 高位
  156. sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
  157. sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
  158. sbit CF   = 0xDF;    //PCA计数溢出标志位
  159. sbit CR   = 0xDE;    //PCA计数器 运行控制位
  160. sbit CCF1 = 0xD9;    //PCA模块1中断标志
  161. sbit CCF0 = 0xD8;    //PCA模块0中断标志

  162. //* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
  163. //* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
  164. //* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%
  165. /********************************************************************
  166.                               PWN时钟函数
  167. *********************************************************************/
  168. void PWM_clock(U8 clock)
  169. {
  170. CMOD |= (clock<<1);
  171. CL = 0x00;           //定时寄存器低位
  172. CH = 0x00;           //定时寄存器高位
  173. }
  174. /********************************************************************
  175.                               PWM输出函数函数
  176. *********************************************************************/
  177. void PWM_start(a)
  178. {
  179. /********************设置PWM信号输出值*******************************/
  180.         //n=m=0x40;
  181.         //CCAPM0 = 0X42;
  182.         a=0x00;
  183.         CCAPM1 =a;
  184.         //CCAP0H = CCAP0L = 0X40; //模块0输出 占空因数为75%
  185.         CCAP1H = CCAP1L = 0X40; //模块1输出 占空因数为75%
  186.   CR=1; //PCA计数器开始计数
  187. }
  188. /********************************************************************
  189.                               定时器函数
  190. *********************************************************************/
  191. void PCA_Intrrpt(void) interrupt 7
  192. {
  193. if(CCF0) CCF0=0;
  194. if(CCF1) CCF1=0;   //软件清零
  195. if(CF)   CF=0;    //软件清零
  196. }
  197. void yichu()
  198. {
  199.   TMOD|=0x02;     /* timer 0 mode 2: 8-Bit reload */
  200.   TH0=0xff;
  201.   TR0=1;     
  202.   PWM_clock(2);   // PCA/PWM时钟源为 定时器0的溢出        
  203. }
  204. void PWM(U8 m,U8 n)
  205. {               
  206.         CCAP0L =m;
  207.         CCAP0H =m;
  208.               CCAP1L = n;
  209.         CCAP1H = n;
  210.                
  211. }

  212. /*------------------*浮点型转字符串*------------------*/
  213. char Float_To_String(float Float_Num)
  214. // Dot_Size??????????
  215. // ???????
  216. {
  217.   //char String[5];
  218.         char Num_Length=0;
  219.   int Temp_i=0;
  220.   char *Point_p=String;                //????????
  221.   char *Point_s=String;
  222.   char Negative_Flag=0;
  223.   long Predot_Num;
  224.   long Afterdot_Num;
  225.   float Afterdot_Float;
  226.   
  227.   if(Float_Num<0)
  228.   {
  229.     Negative_Flag=1;
  230.     Float_Num=0-Float_Num;
  231.   }
  232.   
  233.   Predot_Num=(long)Float_Num;          //????????????
  234.   Afterdot_Float=Float_Num-Predot_Num;        //???????????
  235.   for(Temp_i=Dot_Size;Temp_i>0;Temp_i--)
  236.   {
  237.     Afterdot_Float=Afterdot_Float*10;
  238.   }
  239.   Afterdot_Num=(long)Afterdot_Float;
  240.   
  241.   Temp_i=Dot_Size;
  242.   
  243.   while(Afterdot_Num>0|Temp_i>0)
  244.   {
  245.     Temp_i--;
  246.     String[Num_Length++]=Afterdot_Num%10+'0';
  247.     Afterdot_Num=Afterdot_Num/10;
  248.   }
  249.   String[Num_Length++]='.';
  250.   
  251.   if(Predot_Num==0)                           //???????0???
  252.     String[Num_Length++]='0';
  253.   
  254.   while(Predot_Num>0)
  255.   {
  256.     String[Num_Length++]=Predot_Num%10+'0';
  257.     Predot_Num=Predot_Num/10;
  258.   }
  259.   
  260.   if(Negative_Flag==1)
  261.     String[Num_Length++]='-';
  262.   String[Num_Length]='\0';                    //?????????
  263.   
  264.   Point_p=String+Num_Length-1;                //?P?????????????
  265.   
  266.   for(;Point_p-Point_s>0;Point_p--,Point_s++) //???????????   
  267.   {   
  268.     *Point_s^=*Point_p;   
  269.     *Point_p^=*Point_s;   
  270.     *Point_s^=*Point_p;   
  271.   }   
  272.   
  273.   return(String);
  274. }



  275. /*********************************************************
  276.                      AD键盘扫描函数
  277. *********************************************************/
  278. void keyscan()
  279. {
  280.                
  281.                 ad1=GetADCResult(2);
  282.           key=ad1;
  283.                 if(key<250)
  284.                         {
  285.                                 delaykey(5);
  286.                                 key=ad1;
  287.                                 if(key<=250)
  288.                                 {
  289.                                         switch(key)
  290.                                         {
  291.                                                 case 0:            //确认键
  292.                                                 {
  293.                                                         switch(menu)                         //不同的页数,菜单不同的作用选择
  294.                                                         {
  295.                                                                 case 1://第一页
  296.                                                                 {
  297.                                                                         switch(t)
  298.                                                                         {
  299.                                                                                 case 3:
  300.                                                                                 {
  301.                                                                                         hanshutiaodong(3);
  302.                                                                                         break;
  303.                                                                                 }
  304.                                                                                 case 6:
  305.                                                                                 {
  306.                                                                                         hanshutiaodong(4);
  307.                                                                                         break;
  308.                                                                                 }
  309.                                                                         }
  310.                                                                 }
  311.                                                                 case 2://第二页
  312.                                                                 {
  313.                                                                         switch(t)
  314.                                                                         {
  315.                                                                                 case 3:
  316.                                                                                 {
  317.                                                                                         hanshutiaodong(5);
  318.                                                                                         break;
  319.                                                                                 }
  320.                                                                         }
  321.                                                                         break;
  322.                                                                 }
  323.                                                                 case 3://第三页
  324.                                                                 {
  325.                                                                         break;
  326.                                                                 }
  327.                                                                 case 4://第四页
  328.                                                                 {
  329.                                                                         
  330.                                                                         break;
  331.                                                                 }
  332.                                                         }
  333.                                                         while(key<=250)//松开按键扫
  334.                                                                 {
  335.                                                                         ad1=GetADCResult(2);
  336.                                                                         key=ad1;
  337.                                                                 }
  338.                                                         break;
  339.                                                 }
  340.                                                         
  341.                                                 case 127:                                                       //加↑
  342.                                                 {
  343.                                                         switch(menu)
  344.                                                         {
  345.                                                                 case 1:
  346.                                                                 {
  347.                                                                         OLED_ShowString(6,t," ",16);
  348.                                                                         t+=3;
  349.                                                                         menu=(t+3)/6;
  350.                                                                         if(t>=7)
  351.                                                                         {
  352.                                                                                 hanshutiaodong(menu);
  353.                                                                                 t=t%6;
  354.                                                                         }
  355.                                                                         OLED_ShowString(6,t,"&",16);
  356.                                                                         while(key<=250)//松开按键扫
  357.                                                                         {
  358.                                                                                 ad1=GetADCResult(2);
  359.                                                                                 key=ad1;
  360.                                                                         }
  361.                                                                         break;
  362.                                                                 }
  363.                                                                 case 2:
  364.                                                                 {
  365.                                                                         OLED_ShowString(6,t," ",16);
  366.                                                                         if(t>=7)
  367.                                                                         {
  368.                                                                                 t=0;
  369.                                                                         }
  370.                                                                         t+=3;
  371.                                                                         if(t>=6)
  372.                                                                         {
  373.                                                                                 t=6;
  374.                                                                         }
  375.                                                                         OLED_ShowString(6,t,"&",16);
  376.                                                                         while(key<=250)//松开按键扫
  377.                                                                         {
  378.                                                                                 ad1=GetADCResult(2);
  379.                                                                                 key=ad1;
  380.                                                                         }
  381.                                                                         break;
  382.                                                                 }
  383.                                                                 case 4:                                         //电压设定的加减值
  384.                                                                 {
  385.                                                                         Voltage1+=0.05;
  386.                                                                         Float_To_String(Voltage1);     //电压的设定值
  387.                                                                         OLED_ShowString(80,3,String,16);
  388.                                                                         while(key<=250)//松开按键扫
  389.                                                                         {
  390.                                                                                 ad1=GetADCResult(2);
  391.                                                                                 key=ad1;
  392.                                                                         }
  393.                                                                         break;
  394.                                                                 }
  395.                                                                 case 5:
  396.                                                                 {
  397.                                                                         pwm+=5;
  398.                                                                         OLED_ShowNum(40,6,pwm1,16);//变量显示
  399.                                                                         while(key<=250)//松开按键扫
  400.                                                                         {
  401.                                                                                 ad1=GetADCResult(2);
  402.                                                                                 key=ad1;
  403.                                                                         }
  404.                                                                         break;
  405.                                                                 }
  406.                                                                 case 6:
  407.                                                                 {
  408.                                                                         break;
  409.                                                                 }
  410.                                                                 case 7:
  411.                                                                 {
  412.                                                                         break;
  413.                                                                 }
  414.                                                         }
  415.                                                         break;
  416.                                                 }
  417.                                                 
  418.                                                 case 170:             //减↓
  419.                                                 {
  420.                                                         switch(menu)
  421.                                                         {
  422.                                                                 case 1:
  423.                                                                 {
  424.                                                                         OLED_ShowString(6,t," ",16);
  425.                                                                         t-=3;
  426.                                                                         if(t<=3)
  427.                                                                         {
  428.                                                                                 t=3;
  429.                                                                         }
  430.                                                                         OLED_ShowString(6,t,"&",16);
  431.                                                                         while(key<=250)//松开按键扫
  432.                                                                         {
  433.                                                                                 ad1=GetADCResult(2);
  434.                                                                                 key=ad1;
  435.                                                                         }
  436.                                                                         break;
  437.                                                                 }
  438.                                                                 case 2:
  439.                                                                 {
  440.                                                                         OLED_ShowString(6,t," ",16);
  441.                                                                         t-=3;
  442.                                                                         if(t<3)
  443.                                                                         {
  444.                                                                                 t=6;
  445.                                                                                 menu=1;
  446.                                                                                 hanshutiaodong(menu);
  447.                                                                         }
  448.                                                                         OLED_ShowString(6,t,"&",16);
  449.                                                                         while(key<=250)//松开按键扫
  450.                                                                         {
  451.                                                                                 ad1=GetADCResult(2);
  452.                                                                                 key=ad1;
  453.                                                                         }
  454.                                                                         break;
  455.                                                                 }
  456.                                                                 case 4:                                         //电压设定的加减值
  457.                                                                 {
  458.                                                                         Voltage1-=0.05;
  459.                                                                         Float_To_String(Voltage1);     //电压的设定值
  460.                                                                         OLED_ShowString(80,3,String,16);
  461.                                                                         while(key<=250)//松开按键扫
  462.                                                                         {
  463.                                                                                 ad1=GetADCResult(2);
  464.                                                                                 key=ad1;
  465.                                                                         }
  466.                                                                         break;
  467.                                                                 }
  468.                                                                 case 5:
  469.                                                                 {
  470.                                                                         pwm-=5;
  471.                                                                         OLED_ShowNum(40,6,pwm1,16);//变量显示
  472.                                                                         while(key<=250)//松开按键扫
  473.                                                                         {
  474.                                                                                 ad1=GetADCResult(2);
  475.                                                                                 key=ad1;
  476.                                                                         }
  477.                                                                         break;
  478.                                                                 }
  479.                                                         }
  480.                                                         break;
  481.                                                 }

  482.                                                 
  483.                                                 
  484.                                                 case 191:              //返回首页
  485.                                                 {
  486.                                                         
  487.                                                         t=3;
  488.                                                         hanshutiaodong(1);
  489.                                                         while(key>=250)//松开按键扫
  490.                                                                 {
  491.                                                                         key=ad1;
  492.                                                                 }
  493.                                                         break;
  494.                                                 }
  495.                                                 case 192:              //返回首页
  496.                                                 {
  497.                                                         TR1 = 0;  //关闭定时器1
  498.                                                         ES = 0;  //关闭串口中断
  499.                                                         t=3;
  500.                                                         hanshutiaodong(1);
  501.                                                         while(key<=250)//松开按键扫
  502.                                                                 {
  503.                                                                         ad1=GetADCResult(2);
  504.                                                                         key=ad1;
  505.                                                                 }
  506.                                                         break;
  507.                                                 }
  508.                                         }
  509.                                 }
  510.                         }
  511.                
  512. }





  513. /**************************************************************************
  514.                                 OLED函数
  515. ***************************************************************************/
  516.         void oled(void)
  517. {        
  518.                 menu=0;
  519.           OLED_Init();                        //初始化OLED  
  520.                 OLED_Clear();
  521.                 OLED_ShowCHinese(0,0,0);//
  522.                 OLED_ShowCHinese(18,0,1);//
  523.                 OLED_ShowCHinese(36,0,2);//
  524.                 OLED_ShowCHinese(54,0,3);//
  525.                 OLED_ShowCHinese(72,0,4);//
  526.                 OLED_ShowCHinese(91,0,5);//科
  527.                 OLED_ShowCHinese(108,0,6);//技
  528.                 OLED_ShowString(6,3,"Ver3.0 XD-One",16);
  529.                 OLED_ShowString(6,6,"TRRANS FORCE",16);        
  530.                 delay_ms(1000);         
  531.         }         

  532.         int oledxuanxiang1(void)
  533. {        
  534.           menu=1;
  535.           OLED_Init();                        //初始化OLED  
  536.                 OLED_Clear();
  537.                 OLED_ShowCHinese(6,0,13);//模式选择
  538.                 OLED_ShowCHinese(38,0,14);//
  539.                 OLED_ShowCHinese(70,0,11);//
  540.           OLED_ShowCHinese(102,0,12);//
  541.           OLED_ShowString(6,t,"&",16);
  542.          
  543.           OLED_ShowCHinese(26,3,15);//蓝牙模式
  544.           OLED_ShowCHinese(44,3,16);//
  545.           OLED_ShowCHinese(62,3,13);//
  546.                 OLED_ShowCHinese(80,3,14);//
  547.          
  548.           OLED_ShowCHinese(26,6,17);//放电模式
  549.           OLED_ShowCHinese(44,6,18);//
  550.           OLED_ShowCHinese(62,6,13);//
  551.                 OLED_ShowCHinese(80,6,14);//
  552.           while(1)
  553.                 {
  554.                         keyscan();
  555.                 }
  556.         }

  557.         void oledxuanxiang2(void)
  558. {        
  559.                 menu=2;
  560.           OLED_Init();                        //初始化OLED  
  561.                 OLED_Clear();
  562.                 OLED_ShowCHinese(6,0,13);//模式选择
  563.                 OLED_ShowCHinese(38,0,14);//
  564.                 OLED_ShowCHinese(70,0,11);//
  565.           OLED_ShowCHinese(102,0,12);//
  566.           OLED_ShowString(6,3,"&",16);
  567.          
  568.           OLED_ShowString(26,3,"PWM",16);
  569.           OLED_ShowCHinese(56,3,13);//模
  570.                 OLED_ShowCHinese(80,3,14);//式
  571.          
  572.           OLED_ShowCHinese(26,6,39);//数字时钟
  573.           OLED_ShowCHinese(44,6,40);//
  574.           OLED_ShowCHinese(62,6,41);//
  575.                 OLED_ShowCHinese(80,6,42);//
  576.         }
  577.         
  578. void oled_lanya(void)
  579. {        
  580.                 menu=3;
  581.           OLED_Init();                        //初始化OLED  
  582.                 OLED_Clear();
  583.                 OLED_ShowCHinese(6,0,15);//蓝牙模式
  584.           OLED_ShowCHinese(38,0,16);//
  585.           OLED_ShowCHinese(70,0,13);//
  586.                 OLED_ShowCHinese(102,0,14);//
  587.          
  588.           OLED_ShowCHinese(45,3,15);//蓝牙
  589.           OLED_ShowCHinese(65,3,16);//
  590.           OLED_ShowCHinese(28,6,24);//未连接
  591.           OLED_ShowCHinese(53,6,22);//
  592.           OLED_ShowCHinese(78,6,23);//     

  593.                 while(1)
  594.                 {
  595.                         keyscan();
  596.                         receive();
  597.                         if(uart_receive_number)
  598.                         {
  599.                                 //OLED_ShowNum(20,3,sbuf0,16);//变量显示
  600.                                 switch(sbuf0)
  601.                                 {
  602.                                         case 1:
  603.                                         {
  604.                                                 L1=0;
  605.                                                 OLED_ShowCHinese(45,3,46);//照明
  606.                                                 OLED_ShowCHinese(65,3,47);//
  607.                                                 OLED_ShowCHinese(28,6,21);//已打开
  608.                                                 OLED_ShowCHinese(53,6,50);//
  609.                                                 OLED_ShowCHinese(78,6,43);//
  610.                                                 break;
  611.                                         }
  612.                                         case 2:
  613.                                         {
  614.                                                 L1=1;
  615.                                                 OLED_ShowCHinese(45,3,46);//照明
  616.                                                 OLED_ShowCHinese(65,3,47);//
  617.                                                 OLED_ShowCHinese(28,6,21);//已关闭
  618.                                                 OLED_ShowCHinese(53,6,44);//
  619.                                                 OLED_ShowCHinese(78,6,50);//
  620.                                                 break;
  621.                                         }
  622.                                         /*case 3:
  623.                                         {
  624.                                                 OLED_Clear();
  625.                                                 OLED_ShowCHinese(6,0,15);//蓝牙模式
  626.                                                 OLED_ShowCHinese(38,0,16);//
  627.                                                 OLED_ShowCHinese(70,0,13);//
  628.                                                 OLED_ShowCHinese(102,0,14);//
  629.          
  630.                                                 OLED_ShowCHinese(45,3,15);//蓝牙
  631.                                                 OLED_ShowCHinese(65,3,16);//
  632.                                                 OLED_ShowCHinese(28,6,21);//已连接
  633.                                                 OLED_ShowCHinese(53,6,22);//
  634.                                                 OLED_ShowCHinese(78,6,23);//   
  635.                                                 L1=0;
  636.                                                 L2=0;
  637.                                                 break;
  638.                                         }*/
  639.                                 }
  640.                                 //delaydianya(200);
  641.                         }        
  642.                 }
  643. }
  644.         
  645.         
  646.         int oled_fangdian(void)
  647. {        
  648.                 menu=4;
  649.           OLED_Init();                        //初始化OLED  
  650.                 OLED_Clear();
  651.           OLED_ShowCHinese(6,0,17);//放电模式
  652.           OLED_ShowCHinese(38,0,18);//
  653.           OLED_ShowCHinese(70,0,13);//
  654.                 OLED_ShowCHinese(102,0,14);//
  655.          
  656.           OLED_ShowCHinese(0,3,37);//设定电压
  657.                 OLED_ShowCHinese(18,3,38);//  
  658.                 OLED_ShowCHinese(36,3,18);//
  659.           OLED_ShowCHinese(54,3,36);//
  660.           OLED_ShowString(72,3,":",16);
  661.           OLED_ShowString(115,3,"V",16);
  662.           Float_To_String(Voltage1);     //电压的设定值
  663.           OLED_ShowString(80,3,String,16);
  664.          
  665.           OLED_ShowCHinese(0,6,34);//实际电压
  666.                 OLED_ShowCHinese(18,6,35);//
  667.                 OLED_ShowCHinese(36,6,18);//
  668.           OLED_ShowCHinese(54,6,36);//
  669.                 OLED_ShowString(72,6,":",16);
  670.                 OLED_ShowString(115,6,"V",16);
  671.                 while(1)
  672.                 {
  673.                         ad0=GetADCResult(0);            //ad采集
  674.                         Voltage2=ad0*2/256*5;
  675.                         Float_To_String(Voltage2);      //浮点型转字符型
  676.             OLED_ShowString(80,6,String,16);//字符型变量显示
  677.                         //keyscan();               
  678.                         if(Voltage2>=Voltage1)
  679.                         {
  680.                                 LF=0;
  681.                                 delaydianya(500);
  682.                         }
  683.                         else
  684.                         {
  685.                                 LF=1;
  686.                                 delaydianya(500);
  687.                         }
  688.                         delaydianya(50);
  689.                 }
  690.          
  691.         }
  692.         
  693.         void oled_PWM(void)
  694. {        
  695.                 pwm1=pwm/256*100;
  696.                 menu=5;
  697.           OLED_Init();                        //初始化OLED  
  698.                 OLED_Clear();
  699.           OLED_ShowString(26,0,"PWM",16);
  700.           OLED_ShowCHinese(56,0,15);//模
  701.                 OLED_ShowCHinese(80,0,16);//式
  702.          
  703.           OLED_ShowCHinese(26,3,28);//占空比:     %
  704.           OLED_ShowCHinese(44,3,29);//
  705.           OLED_ShowCHinese(62,3,30);//
  706.                 OLED_ShowString(100,3,"%",16);
  707.                 while(1)
  708.                 {
  709.                         keyscan();
  710.                 }
  711.                
  712.          
  713.         }
  714.         
  715.         void oled_shizhong(void)
  716. {        
  717.                 menu=6;
  718.           OLED_Init();                        //初始化OLED  
  719.                 OLED_Clear();
  720.                 OLED_ShowCHinese(6,0,15);//模式选择
  721.                 OLED_ShowCHinese(38,0,16);
  722.                 OLED_ShowCHinese(70,0,13);
  723.           OLED_ShowCHinese(102,0,14);
  724.          
  725.           OLED_ShowString(26,3,"PWM",16);
  726.           OLED_ShowCHinese(56,3,15);//模
  727.                 OLED_ShowCHinese(80,3,16);//式
  728.          
  729.           OLED_ShowCHinese(26,6,41);//放电模式
  730.           OLED_ShowCHinese(44,6,42);
  731.           OLED_ShowCHinese(62,6,43);
  732.                 OLED_ShowCHinese(80,6,44);
  733.          
  734.         }
  735.         
  736.         
  737.         
  738.         
  739.         void hanshutiaodong(menu)
  740. {
  741.         switch(menu)
  742.                 {
  743.                         case 0:
  744.                                 oled();
  745.                                 break;
  746.                         case 1:
  747.                                 oledxuanxiang1();
  748.                                 break;
  749.                         case 2:
  750.                                 oledxuanxiang2();
  751.                                 break;
  752.                         case 3:
  753.                                 oled_lanya();
  754.                                 break;
  755.                         case 4:
  756.                                 oled_fangdian();
  757.                                 break;
  758.                         case 5:
  759.                                 oled_PWM();
  760.                                 break;
  761.                         case 6:
  762.                                 oled_shizhong();
  763.                                 break;
  764.                         case 7:
  765.                                 break;
  766.                         case 8:
  767.                                 break;
  768.                         case 9:
  769.                                 break;
  770.                         case 10:
  771.                                 break;
  772.                 }
  773.                
  774.         
  775.         
  776.         
  777.         
  778. }

  779.         
  780.         /********************************************************************
  781.                              主函数
  782. *********************************************************************/

  783. void main()
  784. {
  785.                 L1=0;
  786.                 LF=0;
  787.                 InitADC();
  788.                 t=3;
  789.                 oled();
  790.                 oledxuanxiang1();
  791.                 //oledxuanxiang2();
  792.           //oled_lanya();
  793.           //oled_fangdian();
  794.           //PWM_start();
  795. }        


复制代码

所有资料51hei提供下载:
放电.zip (180.13 KB, 下载次数: 16)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:328014 发表于 2018-7-8 00:04 | 只看该作者
这个无电路图真的无法用,楼主能简单的介绍一下电路连接吗?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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