Clip bài giảng, sơ đồ nguyên lý, Layout, hướng dẫn thi công board LCD, các file header, source code đã được update trên website tại link sau:
Bài Lập trình hiển thị với LCD 16x2
Bài Lập trình hiển thị với LCD 16x2
Em download lại 2 file lcd.h và lcd.c ở link bài học trên, copy vào thư mục em tạo project (xoá file cũ đi), add lại vào project rồi build lại xem.Chị cho em hỏi là em copy cái Souce code (lcd_1_main.c) và build chương trình thì nó báo lỗi này:
Error [1098] E:\PIC project\LCD\lcd_1_main.c; 90. conflicting declarations for variable "_lcd_clear" (E:\PIC project\LCD\lcd.c:73)
********** Build failed! **********
vậy em phải sửa lại như thế nào?
lcd_init() chứ nhỉ, hình như em viết sai dòng này.e cũng bị lỗi tương tự...Error [499] ; 0. undefined symbol:
_lcd_int(bai1.obj)
e lấy 2 file trên link copy vào rồi mà vẫn vậy...
Em nên post cả code và post nguyên văn dòng lỗi khi gặp các vấn đề như thế này thì mọi người sẽ dễ tìm ra lỗi hơn nhé.em copy qua mà sao sai được...
add đầy đủ file ko ? có thể do bạn xài bản lite mode nó ko cho phép , bạn có thể crack thử. Ngoài ra bản này HITECH PICC 9.82 nên khai báo config khác các bản trước nên nó báo sai các ký tự VD: XT ... , bạn cài bản 9.7 là xài dc rùimáy bác giúp em khắc phục lỗi này với:
Build D:\Documents\Dien tu\PIC16F887\Tu hoc\Project LCD\lcd for device 16F887
Using driver C:\Program Files\HI-TECH Software\PICC\9.82\bin\picc.exe
Make: The target "D:\Documents\Dien tu\PIC16F887\Tu hoc\Project LCD\lcd.p1" is up to date.
Make: The target "D:\Documents\Dien tu\PIC16F887\Tu hoc\Project LCD\lcd_1_main.p1" is up to date.
Executing: "C:\Program Files\HI-TECH Software\PICC\9.82\bin\picc.exe" -olcd.cof -mlcd.map --summary=default --output=default lcd.p1 lcd_1_main.p1 --chip=16F887 -P --runtime=default --opt=default -D__DEBUG=1 --rom=default --ram=default -g --asmlist "--errformat=Error [%n] %f; %l.%c %s" "--msgformat=Advisory[%n] %s" "--warnformat=Warning [%n] %f; %l.%c %s"
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.82
Copyright (C) 2011 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Lite mode (warning)
Error [800] lcd.as; 45. undefined symbol "DEBUGDIS"
Error [800] lcd.as; 45. undefined symbol "LVPDIS"
Error [800] lcd.as; 45. undefined symbol "FCMDIS"
Error [800] lcd.as; 45. undefined symbol "IESODIS"
Error [800] lcd.as; 45. undefined symbol "SWBOREN"
Error [800] lcd.as; 45. undefined symbol "UNPROTECT"
Error [800] lcd.as; 45. undefined symbol "MCLREN"
Error [800] lcd.as; 45. undefined symbol "PWRTEN"
Error [800] lcd.as; 45. undefined symbol "WDTDIS"
Error [800] lcd.as; 45. undefined symbol "XT"
Error [800] lcd.as; 49. undefined symbol "BORV21"
********** Build failed! **********
bạn ơi tiện thể cho mình hỏi ,làm thế nào để biết mình config bao gồm những gì vậy bạn , đồng thời có thể giải thik cái dòng CONFIG trên kia được k ? cảm ơn bạn nhiều :pbổ sung:
Trước khi code cho 1 con Pic nào đó với HT-PIC bạn nên đọc qua file header của con chip đó ở thư mục \include của bộ cài, cụ thể ở đay là file pic16f887.h, file này định nghĩa tất cả các thanh ghi của con chip. Ở các version khác nhau HTPIC định nghĩa các thanh ghi này có đôi chỗ khác nhau có thể gây ra lỗi như của bạn( chẳng hạn ở bài về ADC có thể sẽ gặp lỗi ở lệnh set GODONE, phải là GO_DONE mới đúng ..v.v.)
Thân
FOSC<2:0>: Oscillator Selection bits
111 = RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
110 = RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
101 = INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
100 = INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
011 = EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
010 = HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
001 = XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
000 = LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
bit 8 BOR4V: Brown-out Reset Selection bit
0 = Brown-out Reset set to 2.1V
1 = Brown-out Reset set to 4.0V
// Oscillator
#define EXTCLK 0x3FFF // External RC Clockout
#define EXTIO 0x3FFE // External RC No Clock
#define INTCLK 0x3FFD // Internal RC Clockout
#define INTIO 0x3FFC // Internal RC No Clock
#define EC 0x3FFB // EC
#define HS 0x3FFA // HS
#define XT 0x3FF9 // XT
#define LP 0x3FF8 // LP
// Watchdog Timer
#define WDTEN 0x3FFF // On
#define WDTDIS 0x3FF7 // Disabled / SWDTEN control
// Power Up Timer
#define PWRTDIS 0x3FFF // Off
#define PWRTEN 0x3FEF // On
// Master Clear Enable
#define MCLREN 0x3FFF // MCLR function is enabled
#define MCLRDIS 0x3FDF // MCLR functions as IO
// Code Protect
#define UNPROTECT 0x3FFF // Code is not protected
#define CP 0x3FBF // Code is protected
#define PROTECT CP //alternate
// Data EE Read Protect
#define DUNPROTECT 0x3FFF // Do not read protect EEPROM data
#define CPD 0x3F7F // Read protect EEPROM data
// Brown Out Detect
#define BORDIS 0x3CFF // BOD and SBOREN disabled
#define SWBOREN 0x3DFF // SBOREN controls BOR function (Software control)
#define BORXSLP 0x3EFF // BOD enabled in run, disabled in sleep, SBOREN disabled
#define BOREN 0x3FFF // BOD Enabled, SBOREN Disabled
// Internal External Switch Over Mode
#define IESOEN 0x3FFF // Enabled
#define IESODIS 0x3BFF // Disabled
// Monitor Clock Fail-safe
#define FCMEN 0x3FFF // Enabled
#define FCMDIS 0x37FF // Disabled
// Low Voltage Programming
#define LVPDIS 0x2FFF // Disabled
#define LVPEN 0x3FFF // Enabled
// In-Circuit Debugger Mode
#define DEBUGEN 0x1FFF // Enable ICD2 debugging
#define DEBUGDIS 0x3FFF // Disable ICD2 debugging
#define CONFIG_ADDR2 0x2008
// Brown-out Reset Voltage
#define BORV21 0x3EFF // 2.1 Volts
#define BORV40 0x3FFF // 4.0 Volts
__CONFIG(XT & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS); //1st config. word
__CONFIG(BORV21); //2st config. word
/*--------------Includes-----------------------------------------------------*/
#include <htc.h>
#include <pic.h>
#include "lcd.h"
/*--------------Defines------------------------------------------------------*/
#define _XTAL_FREQ 12000000
/*--------------Configuration Settings---------------------------------------*/
__CONFIG(FOSC_HS & // External Crystal at High Speed
WDTE_OFF & // Disable Watchdog Timer
PWRTE_ON & //Enable Power Up Timer
BOREN_OFF & //Disable Brown Out Reset
MCLRE_ON & //MCLR function is enabled
LVP_OFF); //Disable Low Voltage Programming
/*--------------Global Variables---------------------------------------------*/
/*--------------Functions----------------------------------------------------*/
/*-----------------------------------------------------------------------------
* Function Name : pic_init
* Description : Setup the peripherals, we intend to use
* Parameter : None
* Return : None
*/
void pic_init(void) {
ANSEL = 0b00000000; // 0=Digital; 1=Analog Input
ANSELH = 0b00000000; // 0=Digital; 1=Analog Input
//TRISC = 0b00000000;
TRISB = 0b00000000;
// TRISC5=0;
}
/* -- void delay_1s() --------------------------------------------
*
* Description : delay 1s
* Parameters : none
* Return : don't care
*/
void delay_1s()
{
char i;
for (i=0; i<10; i++)
__delay_ms(100);
}
/****************************************************************
* MAIN
****************************************************************/
/* -- void main (void) -----------------------------------------
*
* Description : Display my name & my Student ID on LCD,
* and make them "blinky"
* Parameters : none
* Return : don't care
* Notes :
*/
void main(void)
{
lcd_init();
__delay_ms(100);
while (1)
{
lcd_clear();
delay_1s();
lcd_puts("Name"); //Put "Name" on row 0
lcd_gotoxy(0,1); //Go to column 0, row 1
lcd_puts("4050xxxx"); //Put Student ID on row 1
delay_1s();
};
}
/****************************************************************
* END OF lcd_1_main.c
****************************************************************/