找回密码
 立即注册

QQ登录

只需一步,快速开始

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

新手求助大佬: error C141: syntax error near '=', expected '__asm'

[复制链接]
跳转到指定楼层
楼主
ID:974311 发表于 2021-10-23 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg2.h>
  2. #define P0
  3. #define E
  4. //*********************************************************************
  5. sbit EN=P1^1;
  6. sbit RS=P2^0;
  7. sbit RW=P2^1;


  8. //******************************************************************
  9. char str[]="Goodbye World!";


  10. //***********************************************************************
  11. void delayms(unsigned int ms)
  12. {
  13.         uchar i;
  14.         while(ms--)
  15.            for(i=0;i<123;i++)
  16. }


  17. //****************************************************************
  18. void lcdwritecom(unsigned char com)
  19. {
  20.         RW=0;
  21.         RS=0;
  22.         E=1;
  23.         P0=com;
  24.         E=0;
  25.         delayms(1);
  26. }


  27. //**********************************************************************
  28. void lcdwritedat(unsigned char dat)
  29. {
  30.         RW=0;
  31.         RS=1;
  32.         E=1;
  33.         P0=dat;
  34.         E=0;
  35.         delayms(1);
  36. }


  37. //******************************************************************
  38. void lcdinit()
  39. {
  40.         lcdwritecom(0x38);
  41.         delayms(10);
  42.         lcdwritecom(0x0c);
  43.         delayms(10);
  44.         lcdwritecom(0x06);
  45.         delayms(10);
  46.         lcdwritecom(0x01);
  47.         delayms(10);
  48.         lcdwritecom(0x38);
  49.         delayms(10);
  50. }


  51. //*******************************************************************
  52. void main()
  53. {
  54.         char i;
  55.         lcdinit();
  56.         lcdwritecm(0xc0);
  57.         for(i=0;i<14;i++)
  58.         {
  59.                 lcdwritedat(str[i]);
  60.         }
  61.         while(1);
  62. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:974311 发表于 2021-10-23 23:03 | 只看该作者
P0=dat;
        E=0;
就这两个地方有什么不对的吗?LCD1602显示屏读写部分
回复

使用道具 举报

板凳
ID:94031 发表于 2021-10-24 07:29 | 只看该作者
2901005274 发表于 2021-10-23 23:03
P0=dat;
        E=0;
就这两个地方有什么不对的吗?LCD1602显示屏读写部分

P0已经在reg52.h声明了,#define P0要注释掉。E没有声明根据分析应该是EN,#define E也要注释掉。
回复

使用道具 举报

地板
ID:837951 发表于 2021-10-24 09:14 | 只看该作者
把02和03行去掉,后面程序的E改为EN
回复

使用道具 举报

5#
ID:974311 发表于 2021-10-24 11:30 | 只看该作者
xuyaqi 发表于 2021-10-24 07:29
P0已经在reg52.h声明了,#define P0要注释掉。E没有声明根据分析应该是EN,#define E也要注释掉。

去掉之后就错了,所以才改动的
1602.c(40): error C202: 'P0': undefined identifier
1602.c(41): error C202: 'EN': undefined identifier
Target not created.
回复

使用道具 举报

6#
ID:974311 发表于 2021-10-24 11:33 | 只看该作者
xuyaqi 发表于 2021-10-24 07:29
P0已经在reg52.h声明了,#define P0要注释掉。E没有声明根据分析应该是EN,#define E也要注释掉。

1602.c(40): error C202: 'P0': undefined identifier
1602.c(41): error C202: 'EN': undefined identifier
Target not created.
回复

使用道具 举报

7#
ID:974311 发表于 2021-10-24 11:34 | 只看该作者
xuyaqi 发表于 2021-10-24 07:29
P0已经在reg52.h声明了,#define P0要注释掉。E没有声明根据分析应该是EN,#define E也要注释掉。

1602.c(40): error C202: 'P0': undefined identifier
1602.c(41): error C202: 'EN': undefined identifier
Target not created.
回复

使用道具 举报

8#
ID:964308 发表于 2021-10-24 11:35 来自手机 | 只看该作者
你的头文件怎么是reg2.h,还有P0端口已经在头文件里定义了,不需要再用define定义
回复

使用道具 举报

9#
ID:964308 发表于 2021-10-24 11:41 | 只看该作者
  1. #include"reg51.h"//51单片机头文件
  2. /*相关引脚的定义*///该部分可以自己去定义,我是学习51单片机时选择普中单片机开发板。
  3. sbit rs=P2^6;    //命令/数据选择
  4. sbit rw=P2^5;    //读写口
  5. sbit  e=P2^7;    //锁存控制
  6. sbit tou=P2^4;
  7. /*函数声明*/

  8. void LCD1602_SetArea(unsigned char X,unsigned char Y);
  9. void LCD1602_ShowChar(unsigned char X,unsigned char Y,unsigned char Char);
  10. void LCD1602_ShowString(unsigned char X,unsigned char Y,unsigned char *String);
  11. //void LCD1602_ShowArray(unsigned char X,unsigned char Y,unsigned char *Array,unsigned char Count);
  12. //void LCD1602_ShowNumber_Integer(unsigned char X,unsigned char Y,int IntegerNumber,unsigned char Count);
  13. void InitLCD();

  14. /*延迟函数的定义*/
  15. void DELAY_nUS(unsigned int Time)
  16. {
  17.         while(--Time);
  18. }
  19. void DELAY_nMS(unsigned int time)
  20. {
  21.   unsigned int  i,j;            
  22.   for(i=0;i<time;i++)   
  23.      for(j=0;j<939;j++);
  24. }
  25. //向LCD写一命令
  26. void wcode(unsigned char t)
  27. {
  28.   rs=0;           // 写的是命令
  29.   rw=0;           // 写状态
  30.   e=1;            //使能
  31.   P0=t;           //写入命令
  32.   DELAY_nMS(2);      //等待写入,如果时间太短,会导致液晶无法显示
  33.   e=0;            //数据的锁定
  34. }
  35. //向LCD写一数据
  36. void wdata(unsigned char t)
  37. {
  38.   rs=1;          // 写的是数据
  39.   rw=0;          // 写状态
  40.   e=1;           //使能
  41.   P0=t;          //写入数据
  42.   DELAY_nMS(2);     //等待写入,如果时间太短,会导致液晶无法显示
  43.   e=0;           //数据的锁定
  44. }
  45. //LCD设置坐标位置
  46. void LCD1602_SetArea(unsigned char X,unsigned char Y)
  47. {
  48.     switch(Y)
  49.     {
  50.         case 0: wcode(0x80 + X); break;
  51.         case 1: wcode(0xC0 + X); break;
  52.         default:break;
  53.     }
  54. }
  55. //LCD显示字符
  56. void LCD1602_ShowChar(unsigned char X,unsigned char Y,unsigned char Char)
  57. {
  58.     LCD1602_SetArea(X,Y);                           // 设置显示坐标
  59.     wdata(Char);                        // 显示指定字符
  60. }
  61. //LCD显示字符串
  62. void LCD1602_ShowString(unsigned char X,unsigned char Y,unsigned char *String)
  63. {            
  64.     LCD1602_SetArea(X,Y);                           // 设置显示坐标
  65.     while(*String)
  66.     {
  67.         wdata(*String);
  68.         String++;
  69.     }
  70. }

  71. //LCD初始化
  72. void InitLCD()
  73. {                   
  74.    wcode(0x01);          //清屏
  75.    wcode(0x06);   //输入方式控制,增量光标不移位
  76.    wcode(0x0e);   //显示开关控制
  77.    wcode(0x38);   //功能设定:设置16x2显示,5x7显示,8位数据接口            
  78. }

  79. /*******************************************************************************
  80. * 函 数 名       : main()
  81. * 函数功能       :主函数
  82. * 输    入       : 无
  83. * 输    出       : 无
  84. *******************************************************************************/
  85. void main()
  86. {
  87.         InitLCD();
  88.         LCD1602_ShowString(0,0,"hello world");
  89.         while(tou);
  90.     wcode(0x01);          //清屏
  91. }
复制代码

我这有个lcd1602的代码,你可以参考参考,还有你那个写入数据和使能太快了,可能会出错
回复

使用道具 举报

10#
ID:964308 发表于 2021-10-24 11:44 来自手机 | 只看该作者
2901005274 发表于 2021-10-23 23:03
P0=dat;
        E=0;
就这两个地方有什么不对的吗?LCD1602显示屏读写部分

有问题,你的使能端定义的是EN,而你用的是E,E不指向任何端口
回复

使用道具 举报

11#
ID:824490 发表于 2021-10-24 12:10 | 只看该作者
#define P0
#define E
回复

使用道具 举报

12#
ID:624769 发表于 2021-10-24 14:20 | 只看该作者
#include<reg2.h>               <===   这个头文件,真的存在么?
#define P0                         <===    define 是重定义的意思, 你定义  P0  为  ???? 空气?
#define E                           <===    define 是重定义的意思, 你定义  E  为  ???? 空气?

只有一种情况下,define 重定义为空气,一般是条件编译, 判断是否有 define 这个 符号,但是你下面有了赋值操作,那么问题来了, 你给空气赋值?
回复

使用道具 举报

13#
ID:213173 发表于 2021-10-24 17:17 | 只看该作者
多处抄写错漏
#include<reg52.h>

//*********************************************************************
sbit EN=P1^1;
sbit RS=P2^0;
sbit RW=P2^1;


//******************************************************************
char str[]="Goodbye World!";


//***********************************************************************
void delayms(unsigned int ms)
{
        unsigned char i;
        while(ms--)
                for(i=0;i<123;i++);
}


//****************************************************************
void lcdwritecom(unsigned char com)
{
        RW=0;
        RS=0;
        EN=1;
        P0=com;
        EN=0;
        delayms(1);
}


//**********************************************************************
void lcdwritedat(unsigned char dat)
{
        RW=0;
        RS=1;
        EN=1;
        P0=dat;
        EN=0;
        delayms(1);
}


//******************************************************************
void lcdinit()
{
        lcdwritecom(0x38);
        delayms(10);
        lcdwritecom(0x0c);
        delayms(10);
        lcdwritecom(0x06);
        delayms(10);
        lcdwritecom(0x01);
        delayms(10);
        lcdwritecom(0x38);
        delayms(10);
}


//*******************************************************************
void main()
{
        char i;
        lcdinit();
        lcdwritecom(0xc0);
        for(i=0;i<14;i++)
        {
                lcdwritedat(str);
        }
        while(1);
}







回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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