BASIC4MCU | 질문게시판 | (MCU) LCD와 인터럭트궁금한 부분이있어 질문드립니다
페이지 정보
작성자 권철숙 작성일2022-12-03 20:50 조회513회 댓글1건본문
안녕하세요 문자를 입력하여 LCD에 출력까지 완료한 코드를 이용하여 인터럭트 스위치2개를 이용햐여 스위치를 누를때마다 숫자가 증가하게 구동이 가능할까요? 기말작품에 사용될 코드라 도와주시면 정말 감사하겠습니다 ㅠㅠㅠㅠ
//인터럭트 초기값 및 함수:
#byte INTCON = 0xFF2
#bit GIEGIEH = INTCON.7
#bit INT0IE = INTCON.4
#bit INT0IF = INTCON.1
#byte INTCON3 = 0xFF0
#bit INT2IE = INTCON3.4
#bit INT2IF = INTCON3.1
#INT_EXT
void EXT_ISR()
{
CNT1++;
}
#INT_EXT2
void EXT2_ISR()
{
CNT2++;
}
// LCD 함수
#include <18f25k22.h>
#Fuses INTRC_IO, NOMCLR, NOWDT, NOPLLEN
#use delay(internal = 8M)
#byte PORTB = 0xF81
#byte TRISB = 0xF93
#byte PORTC = 0xF82
#byte TRISC = 0xF94
#bit E = PORTC.7
#bit RW= PORTC.6
#bit RS = PORTC.5
#bit DB7 = PORTB.7
#bit DB6 = PORTB.6
#bit DB5 = PORTB.5
#bit DB4 = PORTB.4
#bit DB3 = PORTB.3
#bit DB2 = PORTB.2
#bit DB1 = PORTB.1
#bit DB0 = PORTB.0
char txt1[] = "";
char txt2[] = "3556746";
void LCD_DATA(int16 data)
{
if(data & 0x01)
DB0 = 1;
else
DB0 = 0;
if(data & 0x02)
DB1 = 1;
else
DB1 = 0;
if(data & 0x04)
DB2 = 1;
else
DB2 = 0;
if(data & 0x08)
DB3 = 1;
else
DB3 = 0;
if(data & 0x10)
DB4 = 1;
else
DB4 = 0;
if(data & 0x20)
DB5 = 1;
else
DB5 = 0;
if(data & 0x40)
DB6 = 1;
else
DB6 = 0;
if(data & 0x80)
DB7 = 1;
else
DB7 = 0;
}
void LCD_CMD(int16 CMD)
{
LCD_DATA(CMD);
RS = 0;
RW = 0;
//LCD_DATA(CMD);
E = 1;
delay_ms(1);
E = 0;
delay_ms(5);
}
void LCD_initialize()
{
TRISB = 0x00;
TRISC = 0x00;
PORTB = 0x00;
RS = 0;
RW = 0;
delay_ms(40);
LCD_DATA(0x00);
delay_ms(40);
LCD_CMD(0x30);
delay_ms(6);
LCD_CMD(0x30);
delay_ms(1);
LCD_CMD(0x30);
delay_ms(2);
LCD_CMD(0x38);
LCD_CMD(0x0C);
LCD_CMD(0x06);
LCD_CMD(0x01);
}
void LCD_Write_Char(unsigned char LCDchar)
{
LCD_DATA(LCDchar);
RS = 1;
RW = 0;
//LCD_DATA(LCDchar);
E = 1;
delay_ms(1);
E = 0;
delay_ms(5);
}
void LCD_Write_String(int16 b,unsigned char *str)
{
LCD_CMD(b);
while(*str!='\0')
{
LCD_Write_Char(*str);
str++;
}
}
void LCD_Clear()
{
LCD_CMD(0x01);
delay_ms(2);
}
/*void LCD_Set_Cursor(unsigned char b)//, unsigned char c)
{
unsigned char Temp = 0;
if(b == 1)
{
Temp = 0x80;//| ((c) & 0x0F);
LCD_CMD(Temp);
}
if(b == 2)
{
Temp =0xC0;//| ((c) & 0x0F);
LCD_CMD(Temp);
}
}*/
void main()
{
LCD_initialize();
LCD_Clear();
//LCD_Set_Cursor(1);
// LCD_Set_Cursor(2);
LCD_Write_String(0xC1,txt2);
while(true)
{
}
}