Professional Documents
Culture Documents
Code C#8051
Code C#8051
H>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define RS P3_0
#define RW P3_1
#define EN P3_2
#define LCD_PORT P0
sbit cot0=P2^0;
sbit cot1=P2^1;
sbit cot2=P2^2;
sbit cot3=P2^3;
sbit hang0=P2^4;
sbit hang1=P2^5;
sbit hang2=P2^6;
sbit hang3=P2^7;
int sttphim;
unsigned char dau;
\***************************Cac hm x? l LCD************************/
void wait(void)
{
long n = 0;
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=1;// Doc tu LCD
LCD_PORT=0xFF;// Gia tri 0xFF
while(1){n++; if(n>100) break;}// Kiem tra co ban
// Neu ban dem n den 100 roi thoat khoi while
EN=0;// Dua xung cao xuong thap de chot
RW=0;// Doc tu LCD
}
void delay(long time) /* ham delay */
{
long n;
for(n=0;n<time;n++)
{;}
}
void delay_5ms(){
int i,j;
for(i=0;i<250;i++)
for(j=0;j<4;j++){}
}
void delay_15ms(){
int i,j;
for(i=0;i<250;i++)
for(j=0;j<100;j++){}
}
void LCDWriteCmd(unsigned char c)
{
RS=0;
RW=0;
LCD_PORT=c;
EN=1;
EN=0;
delay_5ms();
}
void LCDWriteData(unsigned char c)
{
RS=1;
RW=0;
LCD_PORT=c;
EN=1;
EN=0;
delay(1000);
}
void LCD_init()
{
delay_15ms();
LCDWriteCmd(0x30);
LCDWriteCmd(0x30);
LCDWriteCmd(0x30);
LCDWriteCmd(0x38);
LCDWriteCmd(0x0C);
// LCDWriteCmd(0x06);
LCDWriteCmd(0x01);
}
//che do 8 bit
void LCD_clear()
{
LCDWriteCmd(0x01);
}
void LCD_home()
{
LCDWriteCmd(0x80);
}
//neu la hang 1
sttphim=4;
sttphim=5;
sttphim=6;
sttphim=7;
}
if(cot2==0)
{
hang0=1;
hang1=1;
hang2=1;
hang3=1;
cot2=0;
if(!hang0) sttphim=8;
if(!hang1) sttphim=9;
if(!hang2) dau='+';
if(!hang3) dau='-';
}
if(cot3==0)
{
hang0=1;
hang1=1;
hang2=1;
hang3=1;
cot3=0;
if(!hang0)
if(!hang1)
if(!hang2)
if(!hang3)
dau='*';
dau='/';
dau='C';
dau='=';
}
}
}
}
/**************************Chuong trnh chnh***********************/
void main(void)
{
long fnumber;
long lnumber;
long result,sodu,dev;
unsigned char sign;
unsigned char hienthi;
int i,kt,j;
kt=0;
i=0;
LCD_init();
LCDWriteCmd(0x01);
LCDWriteCmd(0x80);
LCD_putstr("CALCULATOR VER 1");
while(1)
{
dau='w';
sttphim=10;
quetphim();
if(sttphim!=10)
{
if(kt==0){
if(i==0)
{LCD_clear();}
fnumber=fnumber*10+sttphim;
i=1;
}
else{
lnumber=lnumber*10+sttphim;
}
hienthi=sttphim+48;
LCDWriteData(hienthi);
}
else
{
switch(dau)
{
case 'C':
{
LCDWriteCmd(0x01);
break;
}
case '+':
{
LCDWriteData(dau);
kt=1;
sign='+';
break;
}
case '-':
{
LCDWriteData(dau);
kt=1;
sign='-';
break;
}
case '*':
{
LCDWriteData(dau);
kt=1;
sign='*';
break;
}
case '/' :
{
LCDWriteData(dau);
kt=1;
sign='/';
break;
}
case '=' :
{
if(sign=='+')
{
LCDWriteData(dau);
result = fnumber+lnumber;
LCDwritei(result);
kt=0;
fnumber=0;
lnumber=0;
i=0;
}
else if(sign=='-')
{
LCDWriteData(dau);
if(fnumber>lnumber)
result = fnumber-lnumber
;
else{
LCDWriteData('-');
result = lnumber-fnumber
;
}
LCDwritei(result);
kt=0;
fnumber=0;
lnumber=0;
i=0;
}
else if(sign=='*')
{
LCDWriteData(dau);
result = fnumber*lnumber;
LCDwritei(result);
kt=0;
fnumber=0;
lnumber=0;
i=0;
}
else if(sign=='/')
{
LCDWriteData(dau);
if(lnumber==0)
{
LCDWriteCmd(0x01);
LCD_putstr("ERROR");
}
else
{
result = fnumber/lnumber
;
LCDwritei(result);
sodu = fnumber%lnumber;
}
if(sodu!=0)
{
LCDWriteData(',');
for(j=0;j<5;j++)
{
dev=(sodu*10)/ln
umber;
LCDwritei(dev);
dev=(sodu*10)%ln
umber;
sodu=dev;
}
kt=0;
fnumber=0;
lnumber=0;
i=0;
}
else
{
kt=0;
fnumber=0;
lnumber=0;
i=0;
}
}
else
break;
}
default :
break;
}
}
}
}