打印

PIC18系列 编辑问题type qualifier mismatch in assignment

[复制链接]
4429|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aresmcu|  楼主 | 2011-9-17 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aresmcu 于 2011-9-17 15:01 编辑

lcd_puts("A/D:");   

void lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}


D:\code\18F\LED\LED.C:16:Warning [2066] type qualifier mismatch in assignment

我在16F874A里 编辑通过的 到18里面这么就不行了?
请高手指点 谢谢(下面是我的源程序)
沙发
aresmcu|  楼主 | 2011-9-17 15:00 | 只看该作者
#include        <p18f4520.h>
#include        "lcd.h"


#define        LCD_RS  PORTAbits.RA3
#define        LCD_RW  PORTAbits.RA2
#define LCD_EN  PORTAbits.RA1

#define LCD_DATA        PORTD

#define        LCD_STROBE()        ((LCD_EN = 1),(LCD_EN=0))

void __delay_us(unsigned int time)
  {
while(--time)
{;}
}
void __delay_ms(unsigned int time1)
{
unsigned int i=0,j=2000;
i=j*time1;
  while(--i)
{;}
}
void  delay(void)
{
unsigned  int n,m;
   for(n=0;n<=6000;n++)
    {m++;}     
  if(m==6000)
    {m=0;}
}

/* write a byte to the LCD in 4 bit mode */

void
lcd_write(unsigned char c)
{
        __delay_us(40);
        LCD_DATA = ( ( c >> 4 ) & 0x0F );
        LCD_STROBE();
        LCD_DATA = ( c & 0x0F );
        LCD_STROBE();
}

/*
*         Clear and home the LCD
*/

void
lcd_clear(void)
{
        LCD_RS = 0;
        lcd_write(0x1);
        __delay_ms(2);
}

/* write a string of chars to the LCD */

void lcd_puts(const char * s)
{
        LCD_RS = 1;        // write characters
        while(*s)
                lcd_write(*s++);
}

/* write one character to the LCD */

void
lcd_putch(char c)
{
        LCD_RS = 1;        // write characters
        lcd_write( c );
}


/*
* Go to the specified position
*/

void lcd_goto(unsigned char y,unsigned char x)
{
        LCD_RS = 0;
   
    y&=0x01;
        x&=0x0f;//限制x不能大于15,y不能大于1
        if(y)x|=0x40;//第二行地址为0x40+0x80;
        x|=0x80;
    lcd_write(x);
}
       
/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
        char init_value;

        ADCON1 = 0x06;        // Disable analog pins on PORTA

        init_value = 0x3;
        TRISA=0x10;
        TRISD=0;
        LCD_RS = 0;
        LCD_EN = 0;
        LCD_RW = 0;
       
        __delay_ms(15);        // wait 15mSec after power applied,
        LCD_DATA         = init_value;
        LCD_STROBE();
        __delay_ms(5);
        LCD_STROBE();
        __delay_us(200);
        LCD_STROBE();
        __delay_us(200);
        LCD_DATA = 2;        // Four bit mode
        LCD_STROBE();

        lcd_write(0x28); // Set interface length
        lcd_write(0xF); // Display On, Cursor On, Cursor Blink
        lcd_clear();        // Clear screen
        lcd_write(0x6); // Set entry Mode
}

使用特权

评论回复
板凳
aresmcu|  楼主 | 2011-9-17 15:00 | 只看该作者
#include<p18f452.h>
#include"lcd.h"

#define        LED0  PORTBbits.RB0
#define        LED1  PORTBbits.RB1
#define LED2  PORTBbits.RB2
#define LED3  PORTBbits.RB3



void main()
{

    lcd_init();
    lcd_goto(1,0);        // select first lzine
        lcd_puts("A/D:");
        lcd_goto(0,1);        // Select second line
        lcd_puts("Thunder  Tiger");
    lcd_goto(0,15);        // Select second line
        lcd_puts("    ");
   TRISB=0;
   PORTB=0;
while(1)
{
LED0=~LED0;
delay();
delay();
delay();
delay();
LED1=~LED1;
delay();
delay();
delay();
delay();
LED2=~LED2;
delay();
delay();
delay();
delay();
LED3=~LED3;
delay();
delay();
delay();
delay();

}



}

使用特权

评论回复
地板
胡来一刀| | 2011-10-14 18:52 | 只看该作者
遇到了同样的问题,不知道怎么解决!

使用特权

评论回复
5
胡来一刀| | 2011-10-14 18:56 | 只看该作者
void lcd_puts(const char * s)
修改为
void lcd_puts(const rom char * s)
试一下!
我刚才无意中试出来了!编译通过,没告警了!

使用特权

评论回复
6
shuidi_wangdan| | 2013-7-29 13:18 | 只看该作者
胡来一刀 发表于 2011-10-14 18:56
void lcd_puts(const char * s)
修改为
void lcd_puts(const rom char * s)

const rom起什么作用?
是指向了程序区吗?

使用特权

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

本版积分规则

215

主题

254

帖子

2

粉丝