สร้างเว็บEngine by iGetWeb.com
Cart รายการสินค้า (0)

ขอ code ครับ

(อ่าน 3343/ ตอบ 1)

pic

ขอ code ครับ PIC 16F877 ติดต่อ LCD หน่อยครับ

เว็บมาสเตอร์

#define _PIC16f877_
#include <16f877.h>
#define CLOCK_SP 20000000
// Device Specification
#fuses HS //Oscillator mode HS
#fuses NOLVP, NOWDT //No Low Voltage Program, No Watchdog timar
#fuses NOPROTECT //Code no protection
#use delay (clock=CLOCK_SP) //Use built-in function: delay_ms() & delay_us()
#define use_portd_lcd //define for use portb lcd
#include "lcd.c" //use module function
BOOLEAN HOOKEXT=FALSE;
int key;
/***********************************************************************
* FUNCTION: IntExt_isr
* DESCRIPTION: External Interrupt
* PARAMETERS: nothing
* RETURNED: nothing
***********************************************************************/
#INT_EXT
int IntExt_isr(void) {
HOOKEXT = TRUE;
}
void key_int(int i,int j,int k,int m);
void key_int(int i,int j,int k,int m)
{int A,B,C,D;


i = input(PIN_B1);
j = input(PIN_B2);
k = input(PIN_B4);
m = input(PIN_B5);
A = i*1;
B = j*2;
C = k*4;
D = m*8;
key=D+C+B+A;


switch (key) {
case 0 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key+1);
break;
case 1 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key+1);
break;
case 2 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key+1);
break;
case 3 : lcd_gotoxy(1,1);
printf(lcd_putc,"Upper");
break;
case 4 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key);
break;
case 5 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key);
break;
case 6 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key);
break;
case 7 : lcd_gotoxy(1,1);
printf(lcd_putc, "Under");
break;
case 8 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key-1);
break;
case 9 : lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key-1);
break;
case 10: lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key-1);
break;
case 11: lcd_gotoxy(1,1);
printf(lcd_putc,"Function");
break;
case 12: lcd_gotoxy(1,1);
printf(lcd_putc, "Clear");
break;
case 13: lcd_gotoxy(1,1);
printf(lcd_putc,"Number: %d",key-13);
break;
case 14: lcd_gotoxy(1,1);
printf(lcd_putc, "Help");
break;
case 15: lcd_gotoxy(1,1);
printf(lcd_putc,"Enter");
break;


default : break;
}
}


void main(void){
int i=1;
enable_interrupts(GLOBAL); // Enable Global Interrupts
enable_interrupts(INT_EXT); // Enable External Interrupts
set_tris_d(0x00);
set_tris_C(0x0F);
set_tris_B(0x37);
while(TRUE) {


if(HOOKEXT) {
HOOKEXT = TRUE;
} else {
output_high(pin_c0);
lcd_init();
key_int(0,0,0,0);
}
}
}


ส่วน Lcd 16x2 ติดต่อแบบ 4 bit ครับ
// LCD.C file diver
// As defined in the following structure the pin connection is as follows:
// RD3 enable
// RD2 rs
// RD4 DB4
// RD5 DB5
// RD6 DB6
// RD7 DB7
//
// LCD pins D0-D3 are not used and RW is not used.
#define rs PIN_D2
//rw connect gnd
#define enabled PIN_D3
#define DB4 PIN_D4
#define DB5 PIN_D5
#define DB6 PIN_D6
#define DB7 PIN_D7
char const lcd_type=2;
char const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
//=======================================
//=======================================
void make_out_data(char buffer_data)
{ output_bit(DB4,bit_test(buffer_data,0));
output_bit(DB5,bit_test(buffer_data,1));
output_bit(DB6,bit_test(buffer_data,2));
output_bit(DB7,bit_test(buffer_data,3));
}
//===================================
//===================================
void lcd_send_nibble(char buffer_nibble)
{ make_out_data(buffer_nibble);
delay_us(10);
output_high(enabled);
delay_us(10);
output_low(enabled);
}
//====================================
//====================================
void lcd_send_byte( char address, char n )
{
output_low(rs); //rs= = 0;
delay_ms(1);
output_bit(rs,address);//lcd.rs = address;
delay_us(20);
delay_us(20);
output_low(enabled);//lcd.enable = 0;
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}
//===============================================
//===============================================
void lcd_init()
{ char i;
//set_tris_lcd(LCD_WRITE);
output_low(rs); //lcd.rs = 0;
//output_low(rw); //lcd.rw = 0;
output_low(enabled); //lcd.enable = 0;
delay_ms(200);
for(i=1;i<=3;++i)
{
lcd_send_nibble(3);
delay_ms(10);
}
lcd_send_nibble(2);
for(i=0;i<=3;++i)
lcd_send_byte(0,LCD_INIT_STRING[i]);
}
//================================================
//================================================
void lcd_gotoxy( char x, char y)
{char address;
switch(y) {
case 1 : address=0x80;break;
case 2 : address=0xc0;break;
case 3 : address=0x94;break;
case 4 : address=0xd4;break;
}
address=address+(x-1);
lcd_send_byte(0,0x80|address);
}
//=================================================
//=================================================
void lcd_putc( char c) {
switch (c) {
case 'f' : lcd_send_byte(0,1);
delay_ms(2); break;
case 'n' : lcd_gotoxy(1,2); break;
case 'b' : lcd_send_byte(0,0x10); break;
default : lcd_send_byte(1,c); break;
}
}
//====================================================
void LCD_Command(int cm);
void LCD_ShiftLeft(void);
void LCD_ShiftRight(void);
void LCD_MoveRight(char p);
void LCD_MoveLeft(char p);
void LCD_String(char*s,int dly);


void LCD_Command(int cm){
lcd_send_byte(0,cm);
}


void LCD_ShiftLeft(void){
lcd_send_byte(0,0x18);
}
void LCD_ShiftRight(void){
lcd_send_byte(0,0x1C);
}
void LCD_MoveRight(char p){
char i;
for(i=0;i<p;i++){
LCD_ShiftRight();
delay_ms(100);
}
}
void LCD_MoveLeft(char p){
char i;
for(i=0;i<p;i++){
LCD_ShiftLeft();
delay_ms(100);
}
}
void strcpy(char*s1,char*s2) {
while(*s1++ = *s2++);
}
void LCD_String(char*s, int dly) {
while(*s!=0) {
lcd_putc(*s++);
delay_ms(dly);
}
}


 

Page : 1
Webboardแสดงความคิดเห็น
เยี่ยม   แย่   แย่   แย่   เขิน   หยอกล้อ  ตกใจ  ร้องไห้   สงสัย   ขอโทษ   หดหู่   อย่าน่ะ   ต่อว่า   โอเค
รูปภาพ
(นามสกุลไฟล์ควรเป็น [ jpg , jpeg , gif ] และไฟล์ไม่เกิน 3 MB.)
*ชื่อ
*สถานะ  
*อีเมล
ลิงค์ที่เกี่ยวข้อง
*รหัสยืนยัน

หมายเหตุ : : กรุณากรอกข้อมูลที่มี * ทุกช่อง

view