找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6506|回复: 5
收起左侧

求大佬解决syntax error near 'void'

[复制链接]
ID:689942 发表于 2020-2-17 12:52 | 显示全部楼层 |阅读模式
10黑币
void Key_0_()
{   Charge=~Charge;
    if(Charge)
        {
        CCAP1L =CCAP1H =100; SD_1=1; hz_dis(2,7,"放");
        }     //hz_lcdDis(1,14,"Bo");
    else {SD_1=0; hz_dis(2,7,"充");}    //hz_lcdDis(1,14," ");
    delay(50);
}

void Key_1_()
{
   if(K) {SD_1=0; lock=1; CCAP1L =CCAP1H =128; hz_dis(3,7,"关"); }// hz_lcdDis(0,14,"oF");
   else {SD_1=1; lock=0; hz_dis(3,7,"开");LED=1; }//hz_lcdDis(0,14,"oN");
   K=~K;
   delay(50);
}

void Key_2_()
{
    OUT_Current=OUT_Current+6;
    if(OUT_Current>630)OUT_Current=630;
}

void Key_3_()
{
    OUT_Current=OUT_Current-6;
    if(OUT_Current<270)OUT_Current=270;
}
/**********************************************************
函数说明: 主函数
**********************************************************/

        void main(void)

DC.jpg

最佳答案

查看完整内容

无错误,无警告,编译通过。
回复

使用道具 举报

ID:213173 发表于 2020-2-17 12:52 | 显示全部楼层

无错误,无警告,编译通过。
  1. #include <STC12C5A60S2.H>
  2. #include <intrins.h>            /*use _nop_() function*/
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define ADC_FLAG 0X10
  6. /*****************************************
  7. 端口功能设定
  8. *****************************************/
  9. sbit PWM_1 = P1^4;   //PWM1_Boost/Buck
  10. sbit SD_1 = P1^5;    //SD1_Boost_Buck
  11. sbit LED = P0^0;     //SD1_Boost_Buck
  12. uint ADC_value;
  13. uchar PWM_temp=2;
  14. uchar last_key;      //按键变量
  15. uchar channel=0;     //第一通道
  16. uchar Caes=0;         //菜单
  17. uint OUT_Current=300;
  18. uint Battery_voltage;        //输入电压
  19. uint Boost_voltage;         //Boost电压
  20. uint Boost_Buck_current;    //Buck_Boost电流8位
  21. uint O_current;             //输出电流
  22. uint A_value=90;
  23. bit lock=0;                 //PWM输出锁定
  24. bit ADC_ready=0;            //ADC完毕
  25. bit K=0;                             
  26. bit Charge=0;
  27. void delay(uchar);
  28. void Key_0_();
  29. void Key_1_();
  30. void Key_2_();
  31. void Key_3_();
  32. void init_pca();
  33. void init_timer();
  34. /**********************************************************
  35. 函数说明: 延时程序
  36. **********************************************************/
  37. void delay(uchar t)
  38. {
  39.         uint j;
  40.         uchar i;
  41.         for(i=0;i<t;i++)
  42.         for(j=0;j<1000;j++);
  43. }
  44. /**********************************************************
  45. 函数说明: PWM初始化
  46. **********************************************************/
  47. void init_pwm()
  48. {
  49.     CCON = 0;
  50.     CL = 0;
  51.     CH = 0;
  52.     CMOD = 0X08; //0X08:43KHZ // 0X02,22KHZ // 0X0A,10KHZ //
  53.     CCAPM1 =0x42;//8位PWM输出,无中断
  54.     CCAP1L =CCAP1H =250;//初始化spwm输出的占空比
  55.     CR=1;
  56. }
  57. /**********************************************************
  58. 函数说明: 中断 始化函数
  59. **********************************************************/
  60. void InitADC()
  61. {
  62.     P1M1=0x87;
  63.     P1M0=0x00;
  64.     P1ASF=0X87; //选择ADC通道0127
  65.     ADC_RES=0;
  66.     ADC_CONTR=0X88; //1110 0000 E8 开电源,最高速
  67.     EA=1;
  68.     EADC=1;
  69. }
  70. /**************************************
  71. 12864液晶
  72. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
  73. vss vdd vo rs r/w en d0 d1 d2 d3 d4 d5 d6 d7 psb nc rst vee led+ led-
  74. **************************************/
  75. #define dataPort P2 //数据口
  76. sbit rs = P0^4; //寄存器选择输入
  77. sbit rw = P0^3; //液晶读/写控制
  78. sbit en = P0^2; //液晶使能控制
  79. sbit psb = P0^7; //串/并方式控制
  80. sbit LCD_RST = P0^5; //液晶复位端口
  81. /**************************************
  82. 短延时
  83. **************************************/
  84. /*
  85. void delay5ms()
  86. {
  87.     uchar i,v,k;
  88.     for(i=1;i>0;i--)
  89.     for(v=168;v>0;v--)
  90.         for(k=22;k>0;k--);
  91. }*/

  92. void delayms(unsigned int n)
  93. {
  94.     unsigned char i;
  95.     for(;n>0;n--)
  96.     for(i=0;i<100;i++);
  97. }


  98. void checkBusy(void)
  99. {
  100.     rs=0;
  101.     rw=1;
  102.     en=1;
  103.     dataPort=0xff;
  104.     while(dataPort & 0x80);
  105.     en=0;
  106. }

  107. void writeCommand(unsigned char cmd)
  108. {
  109.     checkBusy();
  110.     rs=0;
  111.     rw=0;
  112.     en=1;
  113.     dataPort=cmd;
  114.     _nop_();
  115.     en=0;
  116. }

  117. void writeData(unsigned char adata)
  118. {
  119.     checkBusy();
  120.     rs=1;
  121.     rw=0;
  122.     en=1;
  123.     dataPort=adata;
  124.     _nop_();
  125.     en=0;
  126. }
  127. /*
  128. unsigned char readData(void)
  129. {
  130.     unsigned char RData;
  131.     dataPort=0xff;
  132.     checkBusy();
  133.     rs=1;
  134.     rw=1;
  135.     en=0;
  136.     en=1;
  137.     RData=dataPort;
  138.     en=0;
  139.     return RData;
  140. }*/
  141. /***********************************************************
  142. 函 数 名:ClrGDRAM
  143. 函数说明:
  144. 传入参数:无
  145. 传出参数:无
  146. 返 回 值:无
  147. **********************************************************/

  148. void ClrGDRAM(void)
  149. {
  150.         unsigned char x,y;
  151.         for(y=0;y<64;y++)
  152.         for(x=0;x<16;x++)
  153.         {
  154.                 writeCommand(0x34);
  155.                 writeCommand(y+0x80); //行地址
  156.                 writeCommand(x+0x80); //列地址
  157.                 writeCommand(0x30);
  158.                 writeData(0x00);
  159.                 writeData(0x00);
  160.         }
  161.         //writeCommand(0x30);
  162. }

  163. /***********************************************************
  164. 函 数 名:LcmInit
  165. 函数说明:液晶初始化
  166. 传入参数:无
  167. 传出参数:无
  168. 返 回 值:无
  169. **********************************************************/

  170. void LcmInit(void)
  171. {
  172.     writeCommand(0x30);
  173.     delayms(50);
  174.     writeCommand(0x01);
  175.     delayms(50);
  176.     writeCommand(0x06);
  177.     delayms(50);
  178.     writeCommand(0x0c);
  179.     ClrGDRAM();
  180.     psb=1;
  181. }
  182. /***********************************************************
  183. 函 数 名:clr_screen
  184. 函数说明:清屏
  185. 传入参数:无
  186. 传出参数:无
  187. 返 回 值:无
  188. **********************************************************/
  189. /*
  190. void clr_screen(void)
  191. {
  192.     writeCommand(0x34); //扩充指令操作
  193.     delayms(1);
  194.     writeCommand(0x30); //基本指令操作
  195.     delayms(1);
  196.     writeCommand(0x01); //清屏
  197.     delayms(1);
  198. }*/
  199. /***********************************************************
  200. 函 数 名:address_w
  201. 函数说明:写入数据位置
  202. 传入参数:无
  203. 传出参数:无
  204. 返 回 值:无
  205. **********************************************************/

  206. void address_w(unsigned char x,unsigned char y)
  207. {
  208.         /***设定显示位置 ******/
  209.         unsigned char address;
  210.         switch (y)
  211.         {
  212.                 case 0:address=0x80+x;break;
  213.                 case 1:address=0x90+x;break;
  214.                 case 2:address=0x88+x;break;
  215.                 case 3:address=0x98+x;break;
  216.                 default:break;
  217.         }
  218.         writeCommand(address);
  219. }
  220. /***********************************************************
  221. 函 数 名:LcmPrint
  222. 函数说明:在坐标(x,y)处显示字符串
  223. 传入参数:x,y,*adata
  224. 传出参数:无
  225. 返 回 值:无
  226. **********************************************************/

  227. void hz_dis(unsigned char x,unsigned char y,unsigned char *adata)
  228. {
  229.         unsigned char i=0;
  230.         address_w(y,x);
  231.         while(*(adata+i))
  232.         {
  233.                 writeData(*(adata+i));
  234.                 i++;
  235.         }
  236.         delay(3);
  237. }

  238. /***********************************************************
  239. 函 数 名:num_dis
  240. 函数说明:在坐标(x,y)处显示数字
  241. 传入参数:x,y,num,n
  242. 传出参数:无
  243. 返 回 值:无
  244. **********************************************************/

  245. unsigned char num_buffer[10];
  246. void num_dis(unsigned char x,unsigned char y,unsigned int num,unsigned char n)//数字显示 X为行,Y为列 num为显示数据 n为显示位数
  247. {
  248.         unsigned char i=0;
  249.         address_w(y,x);
  250.         for(i=0;i<n;i++)
  251.         {
  252.                 num_buffer[n-1-i]=num%10+0x30;
  253.                 num/=10;
  254.         }
  255.         for(i=0;i<n;i++) writeData(num_buffer[i]);
  256.         delay(3);
  257. }

  258. /**********************************************************
  259. 函数说明: 平均滤波函数
  260. **********************************************************/

  261. #define N 50
  262. uint Filter(uint adc_data)
  263. {
  264.         uint value=0;
  265.         uchar count,count_ADC;
  266.         for(count=0;count<N;count++)
  267.         {
  268.                 for(count_ADC=0;count_ADC<3;count_ADC++)
  269.                 {
  270.                         while(!ADC_ready){}
  271.                         ADC_ready=0;
  272.                 }
  273.                 value+=adc_data;
  274.         }
  275.         return (value);
  276. }
  277. /**********************************************************
  278. 函数说明:按键延时防抖动
  279. P3^5 Key_1
  280. P3^6 Key_2
  281. P3^7 Key_3
  282. **********************************************************/

  283. void key_scan()
  284. {
  285.         uchar temp;
  286.         temp = P3&0xF0;
  287.         if(temp != 0xF0)
  288.         {
  289.                 delay(10);
  290.                 temp = P3&0xF0;
  291.                 if(temp!= 0xF0)
  292.                 {
  293.                         switch(temp)
  294.                         {
  295.                                 case 0xE0: Key_0_(); break; //20
  296.                                 case 0xD0: Key_1_(); break; //21
  297.                                 case 0xB0: Key_2_(); break; //22
  298.                                 case 0x70: Key_3_(); break; //23
  299.                                 default:break;
  300.                         }
  301.                 }
  302.         }// last_key = temp;
  303. }

  304. /**********************************************************
  305.            函数说明: 按键程序
  306. **********************************************************/
  307. void Key_0_()
  308. {
  309.         Charge=~Charge;
  310.         if(Charge) {CCAP1L =CCAP1H =100; SD_1=1; hz_dis(2,7,"放");} //hz_lcdDis(1,14,"Bo");
  311.         else {SD_1=0; hz_dis(2,7,"充");} //hz_lcdDis(1,14," ");
  312.         delay(50);
  313. }

  314. void Key_1_()
  315. {
  316.         if(K) {SD_1=0; lock=1; CCAP1L =CCAP1H =128; hz_dis(3,7,"关"); }// hz_lcdDis(0,14,"oF");
  317.         else {SD_1=1; lock=0; hz_dis(3,7,"开");LED=1; }//hz_lcdDis(0,14,"oN");
  318.         K=~K;
  319.         delay(50);
  320. }

  321. void Key_2_()
  322. {
  323.         OUT_Current=OUT_Current+6;
  324.         if(OUT_Current>630)OUT_Current=630;
  325. }

  326. void Key_3_()
  327. {
  328.         OUT_Current=OUT_Current-6;
  329.         if(OUT_Current<270)OUT_Current=270;
  330. }
  331. /**********************************************************
  332. 函数说明: 主函数
  333. **********************************************************/

  334. void main(void)
  335. {
  336.         uint U1,U2,I1,S;
  337.         SD_1=0;LED=1;
  338.         LcmInit();
  339.         ClrGDRAM();
  340.         hz_dis(0,0,"输入电压 . V");
  341.         hz_dis(1,0,"输出电压 . V");
  342.         hz_dis(2,0,"设定电流 . A 充");
  343.         hz_dis(3,0,"输出电流 . A 关");
  344.         init_pwm();
  345.         InitADC();
  346.         delay(50);
  347.         EA=1;//开总中断
  348.         while(1)//主循环
  349.         {
  350.                 U1=Filter(Boost_voltage)/92;    //输入电压 1:10采样电阻 93,
  351.                 U2=Filter(Battery_voltage)/92;     //输出电压 1:10采样电阻 93
  352.                 I1=Filter(O_current)/150; //输出电流
  353.                 // if(I1>30) I1=I1+7;//输出电流显示校准
  354.                 if(U2>242)
  355.                 {
  356.                         SD_1=0; lock=1; CCAP1L =CCAP1H=128;
  357.                         hz_dis(3,7,"保"); LED=0;
  358.                 }//hz_lcdDis(0,14,"Pt");
  359.                 num_dis(0,4,U1/10,3);
  360.                 num_dis(0,6,U1%10,1);
  361.                 num_dis(1,4,U2/10,3);
  362.                 num_dis(1,6,U2%10,1);
  363.                 S=OUT_Current/3;
  364.                 num_dis(2,4,S/100,1);
  365.                 num_dis(2,5,S%100,2);
  366.                 num_dis(3,4,I1/100,1);
  367.                 num_dis(3,5,I1%100,2);
  368.                 // num_lcdDis(0,2,U1/10,2);
  369.                 // num_lcdDis(0,5,U1%10,1);
  370.                 // num_lcdDis(0,8,U2/10,2);
  371.                 // num_lcdDis(0,11,U2%10,1);
  372.                 // num_lcdDis(1,2,S/100,1);
  373.                 // num_lcdDis(1,4,S%100,2);
  374.                 // num_lcdDis(1,8,I1/100,1);
  375.                 // num_lcdDis(1,10,I1%100,2);
  376.                 // if((u2-u1)<40) hz_lcdDis(0,10,"Error!");
  377.                 // else hz_lcdDis(0,10,"OK ");
  378.                 key_scan();
  379.         }
  380. }
  381. /****************************************************************
  382. 函数说明: ADC中断
  383. 实现功能:执行ADC采集并做电压和电流的调整。
  384. ****************************************************************/

  385. void ADC_interrupt()interrupt 5 //ADC转换完后ADC_FLAG由硬件自动置位,须由软件清零
  386. {
  387.         uint ADC_value; //ADC转换结果 10位
  388.         ADC_CONTR&=!ADC_FLAG; //clear ADCflag
  389.         ADC_value=(ADC_RES<<2)+ADC_RESL; //
  390.         ADC_value=(ADC_RES<<2)+ADC_RESL;
  391.         switch(channel)       
  392.         {
  393.                 case 0:    Boost_voltage=ADC_value;
  394.                 channel=1;
  395.                 break;
  396.                 case 1:    Boost_Buck_current=ADC_value;
  397.                 if(!Charge)
  398.                 {
  399.                         if(!lock)
  400.                         {
  401.                                 if((Battery_voltage<480)&&(Boost_Buck_current<OUT_Current)) //442
  402.                                 {
  403.                                         PWM_temp--;
  404.                                         if(PWM_temp<1) PWM_temp=1;
  405.                                 }
  406.                                 else
  407.                                 {
  408.                                         PWM_temp++;
  409.                                         if(PWM_temp>250) PWM_temp=250;
  410.                                 }
  411.                                 CCAP1H = CCAP1L =PWM_temp;
  412.                         }
  413.                 }
  414.                 else
  415.                 {
  416.                         if(Boost_voltage<542)
  417.                         {
  418.                                 PWM_temp++;
  419.                                 if(PWM_temp>250) PWM_temp=250;
  420.                         }
  421.                         else
  422.                         {
  423.                                 PWM_temp--;
  424.                                 if(PWM_temp<1) PWM_temp=1;
  425.                         }
  426.                         CCAP1H = CCAP1L =PWM_temp;
  427.                 }
  428.                 channel=2;
  429.                 break;
  430.                 case 2:Battery_voltage=ADC_value;
  431.                 channel=7;
  432.                 break;
  433.                 case 7:O_current=ADC_value;
  434.                 channel=0;
  435.                 break;
  436.                 default:break;
  437.         }
  438.         ADC_CONTR=0xE8|channel;
  439.         ADC_ready=1;
  440. }
复制代码
回复

使用道具 举报

ID:235200 发表于 2020-2-17 14:01 | 显示全部楼层
看似void错误,实际上是前面错误引起,所以调试时一定要先解决第一行的错误,如本例是ADC_FLAG在多处定义导致
回复

使用道具 举报

ID:168996 发表于 2020-2-17 14:25 | 显示全部楼层
看看第二个错误所在行(323)前面是不是少个";"或者""
第一个错误重复定义,估计是头文件重复包含了吧
建议贴上所有代码
回复

使用道具 举报

ID:689942 发表于 2020-2-17 16:05 | 显示全部楼层
csmyldl 发表于 2020-2-17 14:01
看似void错误,实际上是前面错误引起,所以调试时一定要先解决第一行的错误,如本例是ADC_FLAG在多处定义导致

这第一个怎么解决呢ADC-FLAG怎么解决呢
回复

使用道具 举报

ID:689942 发表于 2020-2-17 16:12 | 显示全部楼层
banalsheep 发表于 2020-2-17 14:25
看看第二个错误所在行(323)前面是不是少个";"或者""
第一个错误重复定义,估计是头文件重复包含了吧
建 ...

全部代码

DCDC第二段.docx

19.4 KB, 下载次数: 7

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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