打印
[51单片机]

模块化编程遇到的问题

[复制链接]
2103|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ilikepanda007|  楼主 | 2014-6-15 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"delay.h"

bit busyTest()
{
        bit temp;
        lcdrs=0;
        lcdrw=1;       
        lcden=1;
        delayms(1);
        temp=P0&0x80;
        lcden=0;
        return temp;       
}

void write_com(uchar com)
{
        while(busyTest()==1);
        lcdrs=0;
        lcdrw=0;       
        lcden=1;
        P0 = com;
        delayms(2);
        lcden = 0;
}

void write_dat(uchar dat)
{
        while(busyTest()==1);
        lcdrs=1;
        lcdrw=0;       
        lcden=1;
        P0 = dat;
        delayms(2);
        lcden = 0;
}




void lcd_init()
{
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
        write_dat('-');
        write_com(0x83);
        write_dat('-');
        write_com(0x90);
        write_dat(':');
        write_com(0x93);
        write_dat(':');
}

这段代码是1602液晶的,我想把它封装在一个模块里,但是老是出现这个错误,不知道哪里出问题了
这里是头文件里的
#ifndef __12864_H__
#define __12864_H__
sbit lcdrs = P2^0;                //寄存器选择位,将RS位定义为P2.0引脚
sbit lcdrw = P2^1;                //读写选择位,将RW位定义为P2.1引脚
sbit lcden = P2^2;           //使能信号位,将E位定义为P2.2引脚

extern bit busyTest();
extern void write_com(uchar com);
extern void write_dat(uchar dat);
extern void lcd_init();

#endif

错误提示
12864.H(8): error C141: syntax error near 'com', expected ')'
12864.H(9): error C141: syntax error near 'dat', expected ')'
compiling delay.c...
12864.H(8): error C141: syntax error near 'com', expected ')'
12864.H(9): error C141: syntax error near 'dat', expected ')'
compiling 12864.c...
12864.H(8): error C141: syntax error near 'com', expected ')'
12864.H(9): error C141: syntax error near 'dat', expected ')'

相关帖子

沙发
ilikepanda007|  楼主 | 2014-6-15 15:48 | 只看该作者
谁能告诉我啊?弄了半天都不知道什么原因

使用特权

评论回复
板凳
限量_个性。| | 2014-6-15 16:03 | 只看该作者
你这里的uchar 编译器不能识别,换成unsigned char试试,或者再包含一个unsigned char的宏定义头文件。

使用特权

评论回复
地板
ilikepanda007|  楼主 | 2014-6-15 17:26 | 只看该作者
限量_个性。 发表于 2014-6-15 16:03
你这里的uchar 编译器不能识别,换成unsigned char试试,或者再包含一个unsigned char的宏定义头文件。 ...

我在delay.h里面已经用typedef定义过了啊,我试试看吧

使用特权

评论回复
5
ilikepanda007|  楼主 | 2014-6-15 17:31 | 只看该作者
限量_个性。 发表于 2014-6-15 16:03
你这里的uchar 编译器不能识别,换成unsigned char试试,或者再包含一个unsigned char的宏定义头文件。 ...

用unsigned char 替换了真的就没问题了!!我想用uchar的话,怎么再包含一个unsigned char的宏定义头文件?

使用特权

评论回复
6
zdl522| | 2014-6-15 17:35 | 只看该作者
uchar虽然在delay.h定义过了,但是在12864.h里面没有,除非你在12864.h里面加上#include“delay.h”

使用特权

评论回复
7
ilikepanda007|  楼主 | 2014-6-15 17:38 | 只看该作者
限量_个性。 发表于 2014-6-15 16:03
你这里的uchar 编译器不能识别,换成unsigned char试试,或者再包含一个unsigned char的宏定义头文件。 ...

我把所有的.h文件都包含在了delay.h中了
#ifndef __DELAY_H__
#define __DELAY_H__

#include<reg52.h>          //包含单片机寄存器的头文件
#include"1302.h"
#include"12864.h"
#include"keyscan.h"
#include"T0_timer.h"
typedef unsigned char uchar
typedef unsigned int uint
extern void delayms(uint value1);         //函数功能:延时若干毫秒

#endif

就像上面那样,所有模块都包含delay.h,是不是只能在.c文件里使用,其他模块的.h文件根本就包含不了typedef语句?

使用特权

评论回复
8
ilikepanda007|  楼主 | 2014-6-15 23:56 | 只看该作者
zdl522 发表于 2014-6-15 17:35
uchar虽然在delay.h定义过了,但是在12864.h里面没有,除非你在12864.h里面加上#include“delay.h” ...

谢谢!!就是只能这样做了么?还有其他方法吗?

使用特权

评论回复
9
ningling_21| | 2014-6-16 08:28 | 只看该作者
ilikepanda007 发表于 2014-6-15 23:56
谢谢!!就是只能这样做了么?还有其他方法吗?

不用包含那么多头文件,只要有个宏定义就可以了...

#define  uchar unsigned char

使用特权

评论回复
10
原野之狼| | 2014-6-16 09:32 | 只看该作者
头文件里也要包含一下:

#include "typedef.h"

使用特权

评论回复
11
限量_个性。| | 2014-6-16 09:54 | 只看该作者
ilikepanda007 发表于 2014-6-15 17:31
用unsigned char 替换了真的就没问题了!!我想用uchar的话,怎么再包含一个unsigned char的宏定义头文件 ...

在你的12864头文件里再宏替换下 typedef unsigned char uchar

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

13

帖子

0

粉丝