首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LCD库- MPLAB X

LCD库- MPLAB X
EN

Stack Overflow用户
提问于 2013-02-25 23:26:12
回答 4查看 10.2K关注 0票数 1

我正在尝试理解Pic16F887;http://www.mikroe.com/chapters/view/17/chapter-4-examples/#c4v12上的这个液晶屏示例

但是编译器一直给我显示错误:

代码语言:javascript
运行
复制
lcdpic16.c:32: warning: function declared implicit int
lcdpic16.c:33: warning: function declared implicit int
lcdpic16.c:33: error: undefined identifier "_LCD_CURSOR_OFF"
lcdpic16.c:34: error: undefined identifier "_LCD_CLEAR"
lcdpic16.c:36: warning: illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
lcdpic16.c:37: warning: function declared implicit int
lcdpic16.c:38: warning: illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
lcdpic16.c:43: warning: function declared implicit int
lcdpic16.c:45: warning: illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
lcdpic16.c:48: warning: function declared implicit int
lcdpic16.c:54: warning: function declared implicit int
lcdpic16.c:55: warning: function declared implicit int
(908) exit status = 1
make: *** [build/default/production/lcdpic16.p1] Error 1

BUILD FAILED (exit value 2, total time: 22s)  

源代码(lcdp16.c)

代码语言:javascript
运行
复制
/*Header******************************************************/
#include <pic16f887.h>


// LCD module connections
#define LCD_RS RB4
#define LCD_RS RB4
#define LCD_EN RB5
#define LCD_D4 RB0
#define LCD_D5 RB1
#define LCD_D6 RB2
#define LCD_D7 RB3
#define LCD_RS_Direction TRISB4
#define LCD_EN_Direction TRISB5
#define LCD_D4_Direction TRISB0
#define LCD_D5_Direction TRISB1
#define LCD_D6_Direction TRISB2
#define LCD_D7_Direction TRISB3
// End LCD module connections

unsigned char ch;                    //
unsigned int adc_rd;                 // Declare variables
char *text;                          //
long tlong;                          //

void main() {
    INTCON = 0;                      // All interrupts disabled
    ANSEL = 0x04;                    // Pin RA2 is configured as an analog input
    TRISA = 0x04;
    ANSELH = 0;                      // Rest of pins are configured as digital

    Lcd_Init();                      // LCD display initialization
    Lcd_Cmd(_LCD_CURSOR_OFF);        // LCD command (cursor off)
    Lcd_Cmd(_LCD_CLEAR);             // LCD command (clear LCD)

    text = "mikroElektronika";       // Define the first message
    Lcd_Out(1,1,text);               // Write the first message in the first line
    text = "LCD example";            // Define the second message
    Lcd_Out(2,1,text);               // Define the first message

    ADCON1 = 0x82;                   // A/D voltage reference is VCC
    TRISA = 0xFF;                    // All port A pins are configured as inputs
    Delay_ms(2000);

    text = "voltage:";               // Define the third message

    while (1) {
        adc_rd = ADC_Read(2);        // A/D conversion. Pin RA2 is an input.
        Lcd_Out(2,1,text);           // Write result in the second line
        tlong = (long)adc_rd * 5000; // Convert the result in millivolts
        tlong = tlong / 1023;        // 0..1023 -> 0-5000mV
        ch = tlong / 1000;           // Extract volts (thousands of millivolts)
                                     // from result
        Lcd_Chr(2,9,48+ch);          // Write result in ASCII format
        Lcd_Chr_CP('.');
        ch = (tlong / 100) % 10;     // Extract hundreds of millivolts
        Lcd_Chr_CP(48+ch);           // Write result in ASCII format
        ch = (tlong / 10) % 10;      // Extract tens of millivolts
        Lcd_Chr_CP(48+ch);           // Write result in ASCII format
        ch = tlong % 10;             // Extract digits for millivolts
        Lcd_Chr_CP(48+ch);           // Write result in ASCII format
        Lcd_Chr_CP('V');
        Delay_ms(1);
    }
}

有人能给我解释一下发生了什么事吗?我应该创建一个自定义的液晶库,这样编译器就可以识别像Lcd_Init()之类的方法了吗?(Windows 7/ XC8 / MPLAB X)

EN

回答 4

Stack Overflow用户

发布于 2014-08-08 00:12:42

简单!您使用的是MPLAB,但是您看到的库是在一个完全不同的集成开发环境MikroC上使用的。

您必须编写自己的函数或更改您的IDE。顺便说一句,编写LCD函数并不难,看看下面的例子:

Interfacing PIC to HD44780 LCD

票数 1
EN

Stack Overflow用户

发布于 2013-06-26 23:30:16

好吧,首先要做的就是。理论上,你所做的一切都是正确的。然而,您将需要设计许多专门调用的函数: LCD_Init()、LCD_CMD()、LCD_OUT()。这些不是本机命令,因此您必须自己编写代码。

如果你想让它运行起来的话。要做到这一点,最好的方法是找到您的LCD的文档,并找出它需要多少位/字节来执行操作。由于您已经将LCD_RS定义为RB4,因此必须确保液晶屏上的RS引脚连接到RB4。并在所有其他引脚上执行此检查。在您的LCD文档中,它们会告诉您执行特定操作需要设置引脚的值。ie LCD_EN可能会启用写入屏幕,以便您可以显示字符。而D7-D4可能是你的数据总线,如果你从你的字节一次发送4位的话。由于LCD的响应时间,数据无法即时发送,因此您可能需要插入延迟。

您还可以设置轮询延迟。这是通过将计时器值重置为零并等待直到它达到您已预先确定的某个值来完成的,在代码中应该是2000。

最后,您必须编写ADC_Read(),ADC_Init(),这不在您的代码中,但我认为编写一个比在您的代码中公开寄存器操作要好。此外,这看起来可能很吓人,但不要担心。它是这样一种东西,一旦你对一个LCD进行了编程,你就可以对它们进行全部编程。就我个人而言,我认为你应该先编写计时器例程,然后再转到LCD屏幕上。希望这能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2014-08-21 13:31:31

对于MPLAB XC8,请使用以下链接中的库:Interfacing LCD with PIC Microcontroller - MPLAB XC8

那篇文章中的例子使用了PIC 16F877A单片机。只需在MPLAB项目设置中进行更改,即可将其转换为PIC 16F877。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15070398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档