EM =m dùng codevision lập trình bài toán giao tiếp atmega32 với lcd 16x2 và keypad 4x4 mà khi check syntax thì không có lỗi nhưng nhấn shift+F9 thì báo lỗi sau em không biết sau:" Errors occur during asembly", em không biết bài viết của em đã đúng chưa và làm sao sửa lỗi đó. Mong các huynh sửa giúp em
//lap trinh giao tiep Atmega32 voi LCD 16x2 va Keypad 4x4, khi bam nut se hien so tren LCD, nhan input doc gia tri tren LCD co chong doi phim
#include<mega32.h>
#include<lcd.h>
#include<stdio.h>
unsigned char k;
int i;
int m;
char num[10];
//================================================== ==================================================
char chongdoi(void)
{
DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao
loinhan:;
for (i=0;i<=50;i++) //kiem tra phim con duoc duy tri muc 0 kg trong 50 lan
{
if ((PINB&0xF0)==0xF0) goto loinhan; //neu co lan kg duy tri se kiem lai tu dau
}
k=PINB; // xong phan doi nhan luu lai gia tri hang va cot
loinha:;
while(1)
{
if ((PINB&0xF0)==0xF0) //doi den khi co tin hieu nha ra
{
for (i=0;i<=50;i++) //kiem tra phim da dc nha chua trong 50 lan
{
if ((PINB&0xF0)!=0xF0) goto loinha; //neu co lan kg duy tri nha se quay lai tu dau
}
break;
}
}
return(k);
}
//================================================== ==================================================
int giaima(void)
{
switch (k)
{
case 0b00010001:
m=7;
break;
case 0b00010010:
m=8;
break;
case 0b00010100:
m=9;
break;
case 0b00100001:
m=4;
break;
case 0b00100010:
m=5;
break;
case 0b00100100:
m=6;
break;
case 0b01000001:
m=1;
break;
case 0b01000010:
m=2;
break;
case 0b01000100:
m=3;
break;
case 0b10000001:
m=10; //nhan input
break;
case 0b10000010:
m=11; //nhan clear
break;
}
return(m);
}
//================================================== ==================================================
int scan_key(void)
{
DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao
//================================================== ===========
PORTB=0XFF;
PORTB.0=0; // cho cot 1 bang 0 kiem tra cac hang
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 1
{
k=chongdoi();
m=giaima();
}
//================================================== ===========
PORTB=0XFF;
PORTB.1=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 2
{
k=chongdoi();
m=giaima();
}
//================================================== ============
PORTB=0XFF;
PORTB.2=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 3
{
k=chongdoi();
m=giaima();
}
//================================================== =============
PORTB=0XFF;
PORTB.3=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 4
{
k=chongdoi();
m=giaima();
}
//================================================== ==============
return(m);
}
//================================================== ==================================================
void hienthi(void)
{
#asm
.equ _lcd_port=0x18
#endasm
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("nhap tien");
lcd_gotoxy(0,1);
sprintf(num,"%d",m);
lcd_puts(num);
}
//================================================== ================================================== =
void main(void)
{
m=scan_key();
if (m==10) //nhan input doc chan lcd vao sram va xu li tiep
;
if (m==11)//nhan clear lcd quay ve dau
;
hienthi();
}
//lap trinh giao tiep Atmega32 voi LCD 16x2 va Keypad 4x4, khi bam nut se hien so tren LCD, nhan input doc gia tri tren LCD co chong doi phim
#include<mega32.h>
#include<lcd.h>
#include<stdio.h>
unsigned char k;
int i;
int m;
char num[10];
//================================================== ==================================================
char chongdoi(void)
{
DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao
loinhan:;
for (i=0;i<=50;i++) //kiem tra phim con duoc duy tri muc 0 kg trong 50 lan
{
if ((PINB&0xF0)==0xF0) goto loinhan; //neu co lan kg duy tri se kiem lai tu dau
}
k=PINB; // xong phan doi nhan luu lai gia tri hang va cot
loinha:;
while(1)
{
if ((PINB&0xF0)==0xF0) //doi den khi co tin hieu nha ra
{
for (i=0;i<=50;i++) //kiem tra phim da dc nha chua trong 50 lan
{
if ((PINB&0xF0)!=0xF0) goto loinha; //neu co lan kg duy tri nha se quay lai tu dau
}
break;
}
}
return(k);
}
//================================================== ==================================================
int giaima(void)
{
switch (k)
{
case 0b00010001:
m=7;
break;
case 0b00010010:
m=8;
break;
case 0b00010100:
m=9;
break;
case 0b00100001:
m=4;
break;
case 0b00100010:
m=5;
break;
case 0b00100100:
m=6;
break;
case 0b01000001:
m=1;
break;
case 0b01000010:
m=2;
break;
case 0b01000100:
m=3;
break;
case 0b10000001:
m=10; //nhan input
break;
case 0b10000010:
m=11; //nhan clear
break;
}
return(m);
}
//================================================== ==================================================
int scan_key(void)
{
DDRB=0x0F; //nua byte thap ngo ra, nua byte cao ngo vao
//================================================== ===========
PORTB=0XFF;
PORTB.0=0; // cho cot 1 bang 0 kiem tra cac hang
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 1
{
k=chongdoi();
m=giaima();
}
//================================================== ===========
PORTB=0XFF;
PORTB.1=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 2
{
k=chongdoi();
m=giaima();
}
//================================================== ============
PORTB=0XFF;
PORTB.2=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 3
{
k=chongdoi();
m=giaima();
}
//================================================== =============
PORTB=0XFF;
PORTB.3=0;
if ((PINB&0xF0)!=0xF0) //co phim nhan trong hang mot 4
{
k=chongdoi();
m=giaima();
}
//================================================== ==============
return(m);
}
//================================================== ==================================================
void hienthi(void)
{
#asm
.equ _lcd_port=0x18
#endasm
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("nhap tien");
lcd_gotoxy(0,1);
sprintf(num,"%d",m);
lcd_puts(num);
}
//================================================== ================================================== =
void main(void)
{
m=scan_key();
if (m==10) //nhan input doc chan lcd vao sram va xu li tiep
;
if (m==11)//nhan clear lcd quay ve dau
;
hienthi();
}
Comment