标题: 1602自编.C(51): error C129: missing ';' before 'main'求大神拯救 [打印本页]

作者: 三贤人    时间: 2020-2-16 00:09
标题: 1602自编.C(51): error C129: missing ';' before 'main'求大神拯救
程序源码如下 报错位置在主函数main附近 看啦2小时不知错在哪里 跪求大神指点迷境


#include<reg52.h>
sbit  LCD1602_RS=P2^4;
sbit  LCD1602_RW=P2^5;
sbit  LCD1602_EN=P2^6;
sbit  LCD1602_DB=P0;
unsigned int i;
unsigned char code shuzu1[]="1234567890123456";
unsigned char code shuzu2[]="9876543210987654";
void Read_Busy()           //忙检测函数,判断bit7是0,允许执行;1禁止
{
    unsigned char sta;      //
    LCD1602_DB = 0xff;
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    do
    {
        LCD1602_EN = 1;
        sta = LCD1602_DB;
        LCD1602_EN = 0;    //使能,用完就拉低,释放总线
    }while(sta & 0x80);
}

void Lcd1602_Write_Cmd(unsigned char cmd)     //写命令
{
    Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
    LCD1602_RS = 0;//RS数据命令选择RS=1数据 RS=0命令
    LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
    LCD1602_DB = cmd;//命令放到P0(假设)上
    LCD1602_EN = 1;//*****************使能信号 =1开始工作
    LCD1602_EN = 0; //*****************使能信号 =1开始工作   
}
void Lcd1602_Write_Data(unsigned char dat)   //写数据
{
      Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
      LCD1602_RS = 1;//RS数据命令选择RS=1数据 RS=0命令
      LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
      LCD1602_DB = dat;//数据放到P0(假设)上
      LCD1602_EN = 1;//使能开
      LCD1602_EN = 0;//使能关
}
void InitLcd1602()              //1602初始化 共5组初始化寄存器
{
    Lcd1602_Write_Cmd(0x38);    //打开,5*8,8位数据   00111000
    Lcd1602_Write_Cmd(0x0c);    //00001100后三位表示 开显示 不显光标 光标不闪烁
    Lcd1602_Write_Cmd(0x06);    //00000110   //写一个字符后地址指针加一
    Lcd1602_Write_Cmd(0x01);    //清屏   
}
viod main()
     {
      InitLcd1602();
      for(i = 0; i < 16; i++);
        {
         Lcd1602_Write_Data(shuzu1[i]);
         }
      void Lcd1602_Write_Cmd(0x80+0x40);
      for(i = 0; i < 16; i++);
           {
            Lcd1602_Write_Data(shuzu2[i]);
            }
            while(1);
       }

作者: 三贤人    时间: 2020-2-16 01:27
不好意思 大半夜献丑了 字母拼错了
作者: csmyldl    时间: 2020-2-16 01:55
main前面的单词改为void  倒数第7行的void去掉
作者: gd2051    时间: 2020-2-16 02:15
程序到这个地方有问题!!!

      viod main()         改成=》 void main()  

    主函数里面
      void Lcd1602_Write_Cmd(0x80+0x40);         去掉  void  =》Lcd1602_Write_Cmd(0x80+0x40);

   祝你成功!!!!!


作者: 钟志伟    时间: 2020-2-16 02:46
我觉得主函数那里发数据有误,楼主可以参考一下我用过的驱动程序!
  1. #include <reg52.h>
  2. #include  <string.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define LCD1602_data P0
  6. sbit LCD1602_RS=P2^6;
  7. sbit LCD1602_RW=P2^5;
  8. sbit LCD1602_EN= P2^7;
  9. void LCD1602_Init();
  10. void LCD1602_Write_cmd(uchar cmd);
  11. void LCD1602_Write_data(uchar dat);
  12. void LCD1602_display();
  13. uchar code table0[]="STC";
  14. uchar code table1[]="ARM";

  15. void delay(uint a)
  16. {
  17.     uint i,j;
  18.                 for (i=a;i>0;i--)
  19.     for (j=110;j>0;j--);
  20. }

  21. void LCD1602_Write_cmd(uchar cmd)//写指令函数
  22. {
  23.           LCD1602_RS=0;//写指令
  24.                 LCD1602_RW=0;//写操作
  25.     LCD1602_data=cmd;
  26.           delay(5);
  27.           LCD1602_EN=1;
  28.            LCD1602_EN=0;
  29. }

  30. void LCD1602_Write_data(uchar dat)//写数据函数
  31. {
  32.          LCD1602_RS=1;//写数据
  33.          LCD1602_RW=0;//写操作
  34.    LCD1602_data=dat;
  35.    delay(5);
  36.          LCD1602_EN=1;
  37.    LCD1602_EN=0;
  38. }

  39. void LCD1602_Init()
  40. {
  41.   LCD1602_Write_cmd(0x38);//8位数据,双列,5X7字形
  42.   LCD1602_Write_cmd(0x0c);//开启显示屏,关光标,光标不闪烁
  43.   LCD1602_Write_cmd(0x06);//显示地址递增,即写一个数据后,显示位置右移一位
  44.   LCD1602_Write_cmd(0x01);//清屏
  45. }

  46. void LCD1602_display(void)//显示函数
  47. {
  48.   uchar a,b;
  49.         LCD1602_Init();
  50.         LCD1602_Write_cmd(0x80);
  51.         for(a=0;a<3;a++)
  52.         {
  53.                 LCD1602_Write_data(table0[a]);
  54.                 delay(200);
  55.         }
  56.         LCD1602_Write_cmd(0x80+0x40);
  57.         for(b=0;b<3;b++)
  58.         {
  59.                 LCD1602_Write_data(table1[b]);
  60.                 delay(200);
  61.         }
  62. }

  63. void main()
  64. {
  65.         LCD1602_Init();
  66.   LCD1602_display();
  67.         while(1);
  68. }
复制代码



作者: wulin    时间: 2020-2-16 05:44
楼主错得不是一两处,抄的不认真,你对比一下就明白。


  1. #include<reg52.h>
  2. sbit  LCD1602_RS=P2^4;
  3. sbit  LCD1602_RW=P2^5;
  4. sbit  LCD1602_EN=P2^6;
  5. //sbit  LCD1602_DB=P0;
  6. <font color="#ff0000">#define LCD1602_DB P0</font>
  7. unsigned int i;
  8. unsigned char code shuzu1[]="1234567890123456";
  9. unsigned char code shuzu2[]="9876543210987654";

  10. void Read_Busy()           //忙检测函数,判断bit7是0,允许执行;1禁止
  11. {
  12.         unsigned char sta;      //
  13.         LCD1602_DB = 0xff;
  14.         LCD1602_RS = 0;
  15.         LCD1602_RW = 1;
  16.         do
  17.         {
  18.                 LCD1602_EN = 1;
  19.                 sta = LCD1602_DB;
  20.                 LCD1602_EN = 0;    //使能,用完就拉低,释放总线
  21.         }while(sta & 0x80);
  22. }

  23. void Lcd1602_Write_Cmd(unsigned char cmd)     //写命令
  24. {
  25.         Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
  26.         LCD1602_RS = 0;//RS数据命令选择RS=1数据 RS=0命令
  27.         LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
  28.         LCD1602_DB = cmd;//命令放到P0(假设)上
  29.         LCD1602_EN = 1;//*****************使能信号 =1开始工作
  30.         LCD1602_EN = 0; //*****************使能信号 =1开始工作   
  31. }
  32. void Lcd1602_Write_Data(unsigned char dat)   //写数据
  33. {
  34.         Read_Busy();//忙检测函数,判断bit7是0,允许执行;1禁止
  35.         LCD1602_RS = 1;//RS数据命令选择RS=1数据 RS=0命令
  36.         LCD1602_RW = 0;//读写选择 RW=1读取 RW=0写
  37.         LCD1602_DB = dat;//数据放到P0(假设)上
  38.         LCD1602_EN = 1;//使能开
  39.         LCD1602_EN = 0;//使能关
  40. }
  41. void InitLcd1602()              //1602初始化 共5组初始化寄存器
  42. {
  43.         Lcd1602_Write_Cmd(0x38);    //打开,5*8,8位数据   00111000
  44.         Lcd1602_Write_Cmd(0x0c);    //00001100后三位表示 开显示 不显光标 光标不闪烁
  45.         Lcd1602_Write_Cmd(0x06);    //00000110   //写一个字符后地址指针加一
  46.         Lcd1602_Write_Cmd(0x01);    //清屏   
  47. }
  48. //viod main()
  49. <font color="#ff0000">void main()</font>
  50. {
  51.         InitLcd1602();
  52. <font color="#ff0000">        Lcd1602_Write_Cmd(0x80);</font>
  53. //        for(i = 0; i < 16; i++);
  54. <font color="#ff0000">        for(i = 0; i < 16; i++)</font>
  55.         {
  56.                 Lcd1602_Write_Data(shuzu1[i]);
  57.         }
  58. //        void Lcd1602_Write_Cmd(0x80+0x40);
  59. <font color="#ff0000">        Lcd1602_Write_Cmd(0x80+0x40);</font>
  60. //        for(i = 0; i < 16; i++);
  61. <font color="#ff0000">        for(i = 0; i < 16; i++)</font>
  62.         {
  63.                 Lcd1602_Write_Data(shuzu2[i]);
  64.         }
  65.         while(1);
  66. }
复制代码




作者: angmall    时间: 2020-2-16 07:39
这里错了
viod main()
改成这样 void main()


作者: ankangyu    时间: 2020-2-16 07:40
把for循环 小括号 后面的 ; 去掉试试,两个都要去掉
作者: xusheng656    时间: 2020-2-16 08:29
viod main()
     {
      InitLcd1602();
      for(i = 0; i < 16;   void写反了
作者: banalsheep    时间: 2020-2-16 09:57
不像自编的。。。
作者: 紫红君的盛夏    时间: 2020-2-16 13:37
void main
作者: lyl44    时间: 2020-2-16 18:11
void拼错了
作者: 。。jj    时间: 2020-2-16 18:42
本帖最后由 。。jj 于 2020-2-16 19:14 编辑

楼主的程序除了主函数的void main错误之外,应该把倒数第7行的void删掉,在程序中使用函数是只需要写函数名就可以了,不需要加void,在写1602的写命令和写数据的程序时建议加一个延时程序,不要直接写,楼主这样写可能会出错,建议加个延时。
void dealy(unsigned int c)
{
      unsigned int a,b;
      for(;c>0;c--)
      {
               for(b=199;b>0;b--);
                      for(a=1;a>0;a--);
      }
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1