天天看點

TX-1C郭天祥51單片機電腦代碼

#include<reg52.h>
#include"daily.h"
#include"add.h"
#define N 10

uchar code table1[]="0123456789";
int dz=16;

void write_com(uchar com)
{
	lcdrs=0;
	P0=com;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}

void write_data(uchar date)
{	
	write_com(0x80+dz);
	lcdrs=1;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
	write_com(0x18);
	dz++;
}

void write_data1(uchar date)
{
	lcdrs=1;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}

void init()
{
	dz=16;
	dula=0;
	wela=0;
	lcden=0;
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);
}

ulong exchange(uchar *t)
{
	int i;
	ulong result=0;
	for(i=0;t[i]>=0&&t[i]<=9&&i<N;i++)
		result=result*10+(ulong)t[i];
	return result;
}

ulong sizeof_result(ulong t)
{
	ulong i,j;
	i=t/10;
	j=1;
	while(i>0)
	{
		i=i/10;
		j++;
	}
	return j;
}

ulong add(ulong x,ulong y)
{
	ulong r;
	r=x+y;
	return r;
}

ulong sub(ulong x,ulong y)
{
	ulong r;
	if(x<y)
	{
		write_data1('-');
		r=y-x;
	}
	else
		r=x-y;
	return r;
}

ulong mul(ulong x,ulong y)
{
	ulong r;
	r=x*y;
	return r;
}

ulong div(ulong x,ulong y)
{
	ulong r;
	r=x/y;
	return r;
}

void main()
{
	uchar c[N],b[N];
	uchar i,p;
	ulong j,num,s1,s2,r,result[N];
	first:
	init();
	p='z';
	for(i=0;i<N;i++)
		c[i]='z';
	
	for(i=0;i<N;i++)
	{
		while(c[i]=='z')
			c[i]=superkeyscan();
		if(c[i]=='!')
			goto first;
		if(c[i]>=0&&c[i]<=9)
			write_data(table1[c[i]]);
		else
			break;
	}
	
	if(c[i]>=0&&c[i]<=9)
		while(p=='z')
			p=superkeyscan();
	else
		p=c[i];
	if(p=='!')
			goto first;
	if((p!='+'&&p!='-'&&p!='*'&&p!='/')||i==0)
	{
		write_com(0x01);
		dz=16;
		write_data('E');
		write_data('r');
		write_data('r');
		write_data('o');
		write_data('r');
		write_com(0x18);
		delay(2000);
		goto first;
	}
	write_data(p);
	
	second:
	for(i=0;i<N;i++)
		b[i]='z';

	for(i=0;i<N;i++)
	{
		while(b[i]=='z')
			b[i]=superkeyscan();
		if(b[i]=='!')
			goto first;
		if(b[i]>=0&&b[i]<=9)
			write_data(table1[b[i]]);
		else
			break;
	}	

	s1=exchange(c);
	s2=exchange(b);
	
	write_com(0x80+0x50);
	switch(p)
	{
		case '+':r=add(s1,s2);break;
		case '-':r=sub(s1,s2);break;
		case '*':r=mul(s1,s2);break;
		case '/':r=div(s1,s2);break;
	}
	
	num=sizeof_result(r);
	for(j=num;j>0;j--)
	{
		result[j-1]=r%10;
		r=r/10;
	}
	
	for(j=0;j<num;j++)
	{
		write_data1(table1[result[j]]);
		delay(50);
	}

	p='z';
	while(p=='z')
	{
		p=superkeyscan();
		if(p!='+'&&p!='-'&&p!='*'&&p!='/'&&p!='!')
			p='z';
	}
	if(p=='!')
			goto first;
	write_com(0x01);
	dz=16;
	write_data('A');
	write_data('n');
	write_data('s');
	write_data(p);
	for(j=0;j<num;j++)
		c[j]=(uchar)result[j];
	goto second;
}
           

具體的路徑配置可在網上查詢

#ifndef __ADD_H__
#define __ADD_H__

uchar superkeyscan()
{
	uchar t;
	uchar key='z';
	P3=0xfe;
	t=P3;
	t=t&0xf0;
	if(t!=0xf0)
	{
		delay(40);
		t=P3;
		t=t&0xf0;
		if(t!=0xf0)
		{
			t=P3;
			switch(t)
			{
				case 0xee:key='/';break;
				case 0xde:key=7;break;
				case 0xbe:key=8;break;
				case 0x7e:key=9;break;
			}
			while(t!=0xf0)
			{
				t=P3;
				t=t&0xf0;
			}
		}
	}
	
	P3=0xfd;
	t=P3;
	t=t&0xf0;
	if(t!=0xf0)
	{
		delay(40);
		t=P3;
		t=t&0xf0;
		if(t!=0xf0)
		{
			t=P3;
			switch(t)
			{
				case 0xed:key='*';break;
				case 0xdd:key=4;break;
				case 0xbd:key=5;break;
				case 0x7d:key=6;break;
			}
			while(t!=0xf0)
			{
				t=P3;
				t=t&0xf0;
			}
		}
	}
	
	P3=0xfb;
	t=P3;
	t=t&0xf0;
	if(t!=0xf0)
	{
		delay(40);
		t=P3;
		t=t&0xf0;
		if(t!=0xf0)
		{
			t=P3;
			switch(t)
			{
				case 0xeb:key='-';break;
				case 0xdb:key=1;break;
				case 0xbb:key=2;break;
				case 0x7b:key=3;break;
			}
			while(t!=0xf0)
			{
				t=P3;
				t=t&0xf0;
			}
		}
	}
	
	P3=0xf7;
	t=P3;
	t=t&0xf0;
	if(t!=0xf0)
	{
		delay(40);
		t=P3;
		t=t&0xf0;
		if(t!=0xf0)
		{
			t=P3;
			switch(t)
			{
				case 0xe7:key='+';break;
				case 0xd7:key='!';break;
				case 0xb7:key=0;break;
				case 0x77:key='=';break;
			}
			while(t!=0xf0)
			{
				t=P3;
				t=t&0xf0;
			}	
		}
	}
	return key;
}

#endif

           
#ifndef __DAILY_H__
#define __DAILY_H__

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;

sbit lcden=P3^4;
sbit lcdrs=P3^5;

sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;

sbit dula=P2^6;
sbit wela=P2^7;

unsigned char code table[]={
	0x3f,0x06,0x5b,0x4f,
	0x66,0x6d,0x7d,0x07,
	0x7f,0x6f,0x77,0x7c,
	0x39,0x5e,0x79,0x71};


void delay(int xms)
{
    int x=0;
		int y=0;
	for(x=xms;x>=0;x--)
		for(y=110;y>=0;y--);
}


#endif

           

繼續閱讀