![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| English forum on PICs Forum for foreigners -only English in this forum - Do not need to register or login |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
|
#1 |
|
Nhập môn đệ tử
Tham gia ngày: Jul 2006
Nơi Cư Ngụ: Sưon South Kỏea
Bài gửi: 6
: |
Chảo Briantk,
I agree with namqn, that the 'f84 is not the best choice. It is old, and has no USART, etc. etc. Next time try a 16F628A, or a 16F88. You can free up some pins by using a 2 wire LCD interface, though. Take a look at this site for the hardware: http://www.rentron.com/Myke1.htm He gives examples in assembly, and somewhere I have source in ccs C to run it. I will try and find my source if you wish to go this route. I'm quite busy these days as I will move back to Canada in 3 weeks, but I'll watch this forum to see if you are interested. Regards |
|
|
|
|
|
#2 |
|
Đệ tử 2 túi
|
Thanks so much. It must be the best that you can provide me with the source in CCS C. I hope you can post it soon
Regards Br |
|
|
|
|
|
#3 |
|
Nhập môn đệ tử
Tham gia ngày: Jul 2006
Nơi Cư Ngụ: Sưon South Kỏea
Bài gửi: 6
: |
Chảo,
I hope this works, but if you have any questions, I'll keep watching here... first the driver Code:
////////////////////////////////////////////////////////////////////////////
//// Library for a 2 wire LCD interface using an 74hc174 ////
//// ////
//// ////
////////////////////////////////////////////////////////////////////////////
#ifndef LCD_clk
#define LCD_data PIN_B2
#define LCD_clk PIN_B1
#endif
void LCDInit(void) { // Initialize the LCD I/O Pins
Dlay = RTC +20;
while (Dlay != RTC);
LCDNybble(0x003, 0); // send init command
Dlay = RTC + 6; // wait > 5 mSec for
while (Dlay != RTC); // LCD to accept cmd
LCDNybble(0x003, 0); // send init command
Dlay = RTC + 1; // wait > 160 uSec for
while (Dlay != RTC); // LCD to accept cmd
LCDNybble(0x003, 0); // send init command
Dlay = RTC + 1; // wait > 160 uSec for
while (Dlay != RTC); // LCD to accept cmd
LCDNybble(0x002, 0); // send init command 0000 0010
Dlay = RTC + 6; // wait > 5 msec for
while (Dlay != RTC); // LCD to accept cmd
LCDByte(0x028, 0); // step 6, set operating 0010 1000
LCDByte(0x008, 0); // step 7, display off 0000 1000
LCDByte(0x001, 0); // step 8, clear display 0000 0001
LCDByte(0x006, 0); // step 9, shift 0000 0110
LCDByte(0x00E, 0); // step 10, display on 0000 1110
} // End LCDInit
void LCDNybble(char Nybble, char RS) { // Send Nybble to LCD
int i; // removed unsigned from before int
output_low(PIN_B2); //Data = 0; // Clear the '174
for (i = 0; i < 6; i++) { // Repeat for six bits
//Clock = 1; Clock = 0; // Write the "0"s into the '174
output_high(PIN_B1);
output_low(PIN_B1);
} // endfor
//Data = 1; // Output the "AND" Value
output_high(PIN_B2);
//Clock = 1; Clock = 0;
output_high(PIN_B1);
output_low(PIN_B1);
// Data = RS; // Output the RS Bit Value
if (RS>0)output_high(PIN_B2);
else output_low(PIN_B2);
//Clock = 1; Clock = 0;
output_high(PIN_B1);
output_low(PIN_B1);
for (i = 0; i < 4; i++) { // Output the Nybble
if ((Nybble & 0x008) != 0)
// Data = 1; // Output the High Order Bit
output_high(PIN_B2);
else
//Data = 0;
output_low(PIN_B2);
//Clock = 1; Clock = 0; // Strobe the Clock
output_high(PIN_B1);
output_low(PIN_B1);
Nybble = Nybble << 1; // Shift up Nybble for Next Byte
} // endfor
// Data = 1; Data = 0; // Toggle the "E" Clock Bit
output_high(PIN_B2);
output_low(PIN_B2);
} // End LCDNybble
void LCDByte(char myByte, char RS) { // Send Byte to LCD
int LBDlay;
LCDNybble((myByte >> 4) & 0x00F, RS); // Send High Nybble
LCDNybble(myByte & 0x00F, RS); // Send Low Nybble
if ((myByte < 4) && (RS == 0)) // type of instruction
LBDlay = RTC + 6;
else
LBDlay = RTC + 2;
while (LBDlay != RTC); // command to complete wait
} // End LCDByte
void send_c(char myByte) { // Send Byte to LCD
int LBDlay;
char RS = 1;
LCDNybble((myByte >> 4) & 0x00F, RS); // Send High Nybble
LCDNybble(myByte & 0x00F, RS); // Send Low Nybble
if ((myByte < 4) && (RS == 0)) // type of instruction
LBDlay = RTC + 6;
else
LBDlay = RTC + 2;
while (LBDlay != RTC); // command to complete wait
} // End send_c
void SecondLine(void) {
LCDByte(0xC0, 0);
} // end SecondLine
void Home(void) {
LCDByte(0x02, 0);
} // end Home
void ClearLCD(void) {
LCDByte(0x01, 0);
} // end ClearLCD
Code:
#if defined(__PCM__)
#include <16F84A.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B6, rcv=PIN_B7)
#endif
#include "LCDHG.C"
#include <STDIO.h>
#include <string.h>
#define CDCLK Pin_B1
//#define LCDDAT Pin_B2
void main() {
int x, y, c;
x = 0x01;
y = 0x01;
c = 0x55;
// char *c;// = "H";
// char string[20];
//c="H";
lcd_init();
lcd_gotoxy(x, y);
lcd_putc("\f");
lcd_putc(0x55);
while(1) {
;
} // end while
}
|
|
|
|
![]() |
|
|
Similar Threads
|
||||
| Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
| Về mạch nạp Microchip PICKit2 và PIC16F84A | linhbx | Bootloaders - Programmers - Debuggers - Emulators | 7 | 12-12-2006 11:39 AM |
| Xin file hex bootloader của PIC16F84A | hanhluckyly | Tiny Bootloader | 1 | 18-10-2006 09:36 PM |
| 8 wire stepper motor | briantk_1988 | Cơ cấu chấp hành (Actuator) | 3 | 30-09-2006 11:51 PM |
| One wire voi PIC16F84A | briantk_1988 | Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) | 13 | 26-07-2006 08:16 PM |