เครื่องคิดเลข
ผมทำโครงงาน เครื่องคิดเลข ใช้คอลโทรลเลอร์ ใช้ C เขียน ใครมีโค้ดบ้างคับ คือผมเขียนแล้วแต่มันไม่เวิร์กอ่าคับ อธิบายวงจรนะครับ คือ รับค่าจาก คีย์แพด แล้วเข้า Mcs-51 AT89C5131 แสดงผล ออก LCD ขอบเขตก็ บวกลบคูณหารธรรมดา ครับ เด๋วผมเอา code มาให้ดูนะครับ พอดีผมเขียนแล้วมันไม่เวิร์กอ่าคับ ขอบคุณล่วงหน้านะครับ
#pragma SMALL #include<reg51.h> #define KEYPAD P1
sfr DATA_BUS=0xA0; sbit RS=P3^6; sbit E=P3^7;
void delay(){ int i,j; for(i=0;i<1000;i++) for(j=0;j<100;j++) i=i+0; }
static void EnableLCD(int t) { unsigned char i; E=1; for(i=0;i<t;i++)i=i; E=0; for(i=0;i<t;i++)i=i; } void lnitlO(void) { RS=0; DATA_BUS=0x38;EnableLCD(255); DATA_BUS=0x38;EnableLCD(255); DATA_BUS=0x38;EnableLCD(255); DATA_BUS=0x01;EnableLCD(255); DATA_BUS=0x0E;EnableLCD(255); DATA_BUS=0x06;EnableLCD(255); RS=1; } void ClearScreen(void) { RS=0; DATA_BUS=0x01;EnableLCD(255); RS=1; } void PutChar(char c) { DATA_BUS=c; EnableLCD(45); } void PrintString(const char*s) { while(*s)DATA_BUS=*(s++),EnableLCD(45); } void GotoXY(unsigned char r,unsigned char c) { RS=0; DATA_BUS=0x02;EnableLCD(255); for(r=r*40+c,c=0;c<r;c++) DATA_BUS=0x14;EnableLCD(45); RS=1; } void Printlnt(char i) { GotoXY(0,0); PrintString("result:"); PutChar(i); } void Keypad_lnit(void) { KEYPAD=0xFF; } unsigned char Keypad_scan(void) { char in,out,row,col,pressed; while(1){ pressed=0; out=0x01; for(row=0;row<=3;row++){ KEYPAD=~out; in=~KEYPAD>>4; if(in!=0){ pressed=1; break; } out<<=1; } if(pressed){ col=0; while(in>>(col+1)!=0){col++;} return row*4+col; } } } void main(){ char conv_table[]={ 1,2,3,100, 4,5,6,101, 7,8,9,102, -1,0,-1,103 }; char num1,num2,op; char result; lnitlO(); Keypad_lnit(); while(1){ ClearScreen(); GotoXY(0,0); PrintString("num1:"); do{ num1=conv_table[Keypad_scan()]; } while(num1<0||num1>9); ClearScreen(); GotoXY(0,0); PrintString("op:"); do{ op=conv_table[Keypad_scan()]; } while(op<100); ClearScreen(); GotoXY(0,0); PrintString("num2:"); do{ num2=conv_table[Keypad_scan()]; } while(num2<0||num2>9);
if(op==100) { result=num1+num2; Printlnt(result); delay(); } else if(op==101) { result=num1-num2; Printlnt(result); delay(); } else if(op==102) { result=num1*num2; Printlnt(result); delay(); } else if(op==103) { result=num1/num2; Printlnt(result); delay(); } } }
|