⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 C
字号:

#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
bit biaozhi;
//*************************************************
//AT89C2051  ADC0809  CAI JI---ZHU JI
//*************************************************
//	p2.0	you bian di 4 lie		you dian zu
//	p2.1    you bian di 3 lie
//	p2.2	you bian di 2 lie
//	p2.3	you bian di 1 lie
//	p2.4	shang bian di 1 hang
//	p2.5	shang bian di 2 hang
//	p2.6	shang bian di 3 hang
//	p2.7	shang bian di 4 hang
//*************************************************
//	P3.2	int0   zhong duan an jian
//*************************************************
//	1	b7h;	a	b0h;
//	2	c2h;	b	8ch;
//	3	92h;	c	c9h;
//	4	b4h;	d	86h;
//	5	98h;	e	c8h;
//	6	88h;	f	e8h;
//	7	b3h;	8	80h;
//	9	90h;	0	81h;
//*************************************************
sbit a0=ACC^0;		sbit a1=ACC^1;		sbit a2=ACC^2;		sbit a3=ACC^3;
sbit a4=ACC^4;		sbit a5=ACC^5;		sbit a6=ACC^6;		sbit a7=ACC^7;
//*************************************************
void delay (uchar t)	//延时子程序
{	uchar s;
	while (t--)
		{for (s=0xff;s>0;s--)
			{;}
		}
}
//*************************************************
void show(uchar h)	//P1.0,P1.1模拟串行口使数码管显示
{	ACC=h;
	P1_0=a0;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a1;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a2;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a3;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a4;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a5;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a6;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
	P1_0=a7;P1_1=0;P1_1=1;	//P1.0 wei shu jv      p1.1 wei shi zhong
}

//*************************************************
void tuichu(void) interrupt 0 using 0 
{
	biaozhi=1;
	show(0xff);	show(0x8e);	show(0x8f);	show(0xcc);
	delay(0xff);
	show(0xff);	show(0xff);	show(0xff);	show(0xff);
}
//*************************************************
uchar yima(uchar d)	//16进制码转换成可供数码管显示的码值
{	switch (d)
       {case 0x00:{d=0x81;}break;	//xian 0
	case 0x01:{d=0xb7;}break;	//xian 1
	case 0x02:{d=0xc2;}break;	//xian 2
	case 0x03:{d=0x92;}break;	//xian 3
	case 0x04:{d=0xb4;}break;	//xian 4
	case 0x05:{d=0x98;}break;	//xian 5	
	case 0x06:{d=0x88;}break;	//xian 6
	case 0x07:{d=0xb3;}break;	//xian 7
	case 0x08:{d=0x80;}break;	//xian 8
	case 0x09:{d=0x90;}break;	//xian 9
	case 0x0a:{d=0xb0;}break;	//xian a
	case 0x0b:{d=0x8c;}break;	//xian b
	case 0x0c:{d=0xc9;}break;	//xian c
	case 0x0d:{d=0x86;}break;	//xian d
	case 0x0e:{d=0xc8;}break;	//xian e
	case 0x0f:{d=0xe8;}break;	//xian f
	default:{d=0xff;};
       }
	return (d);
}
//*************************************************
uchar jianma(uchar a)		//按键特征码转换成16进制码
{	switch (a)
	{case 0x11:{a=0x00;}break;	
	 case 0x12:{a=0x04;}break;	
	 case 0x14:{a=0x08;}break;
	 case 0x18:{a=0x0c;}break;
	 case 0x21:{a=0x01;}break;
	 case 0x22:{a=0x05;}break;
	 case 0x24:{a=0x09;}break;
	 case 0x28:{a=0x0d;}break;
	 case 0x41:{a=0x02;}break;
	 case 0x42:{a=0x06;}break;
	 case 0x44:{a=0x0a;}break;
	 case 0x48:{a=0x0e;}break;
	 case 0x81:{a=0x03;}break;
	 case 0x82:{a=0x07;}break;
	 case 0x84:{a=0x0b;}break;
	 case 0x88:{a=0x0f;}break;
	 default:{a=0xff;}
	 }
	 return (a);
}
//*************************************************
uchar kbscan(void)		//键盘扫描子程序
{	uchar sccode,recode,e;
	P2=0x0f;		
	if ((P2&0x0f)!=0x0f)	//you jian an xia
		{for (e=240;e>0;e--);
		 if ((P2&0x0f)!=0x0f)	//yun you jian an xia
 	        	{sccode=0x7f;	//zhu hang sao miao chu zhi
 		         while ((sccode&0x08)!=0)	//xun huan sao miao 
			    {P2=sccode;
			     if ((P2&0x0f)!=0x0f)		//ben hang you jian an xia
				{recode=(P2&0x0f)|0xf0;
				return ((~sccode)+(~recode));	//fan hui jian ma
				}
				else
				sccode=(sccode>>1)|0x80;	//zuo yi yi wei
			    }
		        }
	        }
	        return (0);
}
//*************************************************
void bcd(uchar ad)	//16进制数转换成BCD码
{uchar a,b,c,t;
	a=ad/100;
	t=ad%100;
	b=t/10;
        c=t%10;
	a=yima(a);	b=yima(b);	c=yima(c);
	show(0x81);	show (a);	show (b);	show (c);
}
//*************************************************
uchar ad(void)	//AD转换子程序
{uchar ad;
 P3=0xff;
 P3_6=1;	 P3_6=0;	 P3_6=1;
 delay(0x07);
 P3_7=0;
 ad=P0;
 return (ad);
}	
//*************************************************
void txd(uchar z)	//串口发送子程序
{  	TMOD=0X20;
	TL1=0xfd;TH1=0xfd;	//256-11059200/384/9600=0xfd
	SCON=0x50;PCON=0x00;	//fang shi 1
	TR1=1;IE=0x81;		//ji shu qi 
	SBUF=z;
	while (TI==0);	//wei 0 deng dai 
	TI=0;
}
//*************************************************
uchar rxd(void)	//串口接收子程序
{  	uchar x;
	TMOD=0X20;
	TL1=0xfd;TH1=0xfd;	//256-11059200/384/9600=0xfd
	SCON=0x50;PCON=0x00;	//fang shi 1
	TR1=1;IE=0x81;		//ji shu qi 
	while (RI==0)
		{if (biaozhi!=0) break;}
	 RI=0;
	 x=SBUF;
	 return (x);
	}
//*************************************************
void rtxd2start(void)
{IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
SCON=0x90;PCON=0x00;	//fang shi 2
}
//*************************************************
void txd2(uchar z)	//way 2 txd
{  	SCON=0x90;PCON=0x00;IE=0x81;	//fang shi 2
	ACC=z;TB8=P;
	SBUF=z;
	while (TI==0);	//wei 0 deng dai 
	TI=0;
}
//*************************************************
uchar rxd2(void)	//way 2 rxd
{  	uchar z;
	SCON=0x90;PCON=0x00;IE=0x81;	//fang shi 2
	while (RI==0)
		{if (biaozhi!=0) break;}
	RI=0;
	z=SBUF;
	ACC=z;		if (TB8==P)	{return (z);}
	return (0x00);
}
//*************************************************
void adxs(void)
{uchar a;
 biaozhi=0;
 IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
 while (biaozhi==0)
	{a=ad();
	 bcd(a);
	 txd(a);
	 delay(0x29);
	}
}
//*************************************************
void rxdxs()
{uchar r;
 biaozhi=0;
 IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
 while (biaozhi==0)
	{r=rxd();
	 bcd(r);
 	}
}
//*************************************************
void rxdxs2(void)
{uchar r;
 biaozhi=0;
 IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
 while (biaozhi==0)
	{r=rxd2();
	 if (r!=0x00)	{bcd(r);}
	 else {show(0xc8);	show(0xff);	show(0xff);	show(0xff);}
 	}
}
//*************************************************
void txdxs(void)
{uchar t;
 biaozhi=0;
 IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
 while (biaozhi==0)
 	{for (t=255;t>0;t--)
		{txd(t);
		 bcd (t);
		 delay(0x70);
 		 if (biaozhi!=0) break;
		 }
	}
}
//*************************************************
void txdxs2()
{uchar t;
 IE=0x81;		//cpu kai zhong duan,in0 kai zhong duan
 rtxd2start();
 biaozhi=0;
 while (biaozhi==0)
 	{for (t=255;t>1;t--)
		{bcd (t);
		 txd2(t);
		 delay(0x70);
 		 if (biaozhi!=0) break;
		 }
	}
}
//#################################################
main ()
{uchar key; 	uchar jian;	 uchar led;
  //*****************************************
  IE=0x81;	show(0xff);	show(0xff);	show(0xff);	show(0xff);
 while (1)
	{key=kbscan();
		 if (key!=0)
	   	{P1_2=0;	 	P1_3=0;		P1_4=0;
		 P1_5=0;		P1_6=0;		P1_7=0;
		//*****************************************
	 	 while ((P2&0x0f)!=0x0f)	//you jian an xia
		 	{P3_5=0;
			 P3_6=0;}
		 P3_5=1;		 P3_6=1;
		 //*****************************************
		 P1_2=1;		P1_3=1;		P1_4=1;
		 P1_5=1;		P1_6=1;		P1_7=1;
		 //*****************************************
		 jian=jianma(key);	txd(jian);
		 led=yima(jian);	 show(led);
		 }
		switch (jian)
		{	 case 0x0b : {jian=0x00;rxdxs2();}break;
			 case 0x0c : {jian=0x00;adxs(); }break;	
			 case 0x0d : {jian=0x00;rxdxs();}break;	
			 case 0x0e : {jian=0x00;txdxs();}break;
			 case 0x0f : {jian=0x00;txdxs2(); }break;
			 default   : {jian=0x00;}
		 }
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -