找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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);
       }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:639140 发表于 2020-2-16 01:27 | 只看该作者
不好意思 大半夜献丑了 字母拼错了
回复

使用道具 举报

板凳
ID:235200 发表于 2020-2-16 01:55 | 只看该作者
main前面的单词改为void  倒数第7行的void去掉
回复

使用道具 举报

地板
ID:77479 发表于 2020-2-16 02:15 | 只看该作者
程序到这个地方有问题!!!

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

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

   祝你成功!!!!!

回复

使用道具 举报

5#
ID:294296 发表于 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. }
复制代码


回复

使用道具 举报

6#
ID:213173 发表于 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. }
复制代码



回复

使用道具 举报

7#
ID:155507 发表于 2020-2-16 07:39 | 只看该作者
这里错了
viod main()
改成这样 void main()

回复

使用道具 举报

8#
ID:587810 发表于 2020-2-16 07:40 来自手机 | 只看该作者
把for循环 小括号 后面的 ; 去掉试试,两个都要去掉
回复

使用道具 举报

9#
ID:677076 发表于 2020-2-16 08:29 | 只看该作者
viod main()
     {
      InitLcd1602();
      for(i = 0; i < 16;   void写反了
回复

使用道具 举报

10#
ID:168996 发表于 2020-2-16 09:57 | 只看该作者
不像自编的。。。
回复

使用道具 举报

11#
ID:619787 发表于 2020-2-16 13:37 | 只看该作者
void main
回复

使用道具 举报

12#
ID:159575 发表于 2020-2-16 18:11 来自手机 | 只看该作者
void拼错了
回复

使用道具 举报

13#
ID:687423 发表于 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--);
      }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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