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

📄 8253.c

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

#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
//P0----D0     	RXD---A0---P30  TXD---A1---P31 	WR---WR---P36	RD---RD---P37
//		  P33---GATE0		P32---GATE1		P34---GATE2		P35---TEST---OUT1	
//6PIN    1---VCC	2---RST---P10	3---LOAD---P11	4---DIN---P12	5---CLK---P13	6---GND
//4PIN	  1---VCC   2---sda---P16	3---sck---P17   4---GND
//P2----keyboard
//*************************************************
#define A0 P3_0
#define A1 P3_1
#define wr P3_6
#define rd P3_7
#define gat0 P3_3
#define gat1 P3_2
#define gat2 P3_4
#define out  P3_5
//*************************************************
#define rst P1_0		//ps7219
#define lod P1_1
#define din P1_2
#define clk P1_3
//*************************************************
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--)
			{;}
		}
}
//*************************************************
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 trt(hi,lo)
uchar hi,lo;
{ACC=hi;	lod=0;
 clk=1; din=a7; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a6; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a5; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a4; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a3; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a2; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a1; clk=0; delay(0x01);ACC=hi;
 clk=1; din=a0; clk=0; delay(0x01);ACC=hi;
//************************************************* 
 ACC=lo;
 clk=1; din=a7; clk=0; delay(0x01); lod=1;ACC=lo;
 clk=1; din=a6; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a5; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a4; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a3; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a2; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a1; clk=0; delay(0x01);ACC=lo;
 clk=1; din=a0; clk=0; delay(0x01); clk=1;ACC=lo;
 delay(0x01);
}
//*************************************************
void psfirst(void)
{rst=1;	 delay(0x01); rst=0;
 EA=0;
 lod=0;
 delay(0x90);
 //*************************************************
 trt(0x0a,0x0f);	//liang du 
 trt(0x0b,0x07);	//sao miao jie xian
 trt(0x09,0xff);	//BCD yi ma fang shi
 trt(0x0c,0x01);	//zheng chang gong zuo fang shi
// trt(0x0f,0x01);	//jin ru ce shi mo shi
// trt(0x0f,0x00);	//tui chu ce shi mo shi
// trt(0x0d,0xff);	//8 wei LED shan shuo
}
//*************************************************
void ps8()
{trt(0x01,0x00);	//xian shi de shu zhi
 trt(0x02,0x01);	 
 trt(0x03,0x02);	 
 trt(0x04,0x03);
 trt(0x05,0x04);	 
 trt(0x06,0x05);	 
 trt(0x07,0x06);	 
 trt(0x08,0x07);
}
void s8253(void)
{gat0=0;	gat1=0;		gat2=0;
 A0=1;	A1=1;	wr=1;	P1=0x33;	wr=0;	delay(0x01);	wr=1;	
		//contral reg; first low,the secend high; not BCD; way 3
 A0=0;	A1=0;	wr=1;	P1=0xff;	wr=0;	delay(0x01);	wr=1;	
 						P1=0xfa;	wr=0;	delay(0x01);	wr=1;	gat0=1;
		//counter0; first low,the secend high;
 A0=1;	A1=1;	wr=1;	P1=0x73;	wr=0;	delay(0x01);	wr=1;	
 A0=0;	A1=1;	wr=1;	P1=0x00;	wr=0;	delay(0x01);	wr=1;	
 						P1=0x00;	wr=0;	delay(0x01);	wr=1;	gat1=1;
		//counter1; first low,the secend high;
 A0=1;	A1=1;	wr=1;	P1=0xb3;	wr=0;	delay(0x01);	wr=1;	
 A0=1;	A1=0;	wr=1;	P1=0x00;	wr=0;	delay(0x01);	wr=1;	
 						P1=0x00;	wr=0;	delay(0x01);	wr=1;	gat2=1;
		//counter2; first low,the secend high;
}
//#################################################
main ()
{uchar key; 	uchar jian;
 while (1)
	{key=kbscan();
		if (key!=0)
		 	{while ((P2&0x0f)!=0x0f);	//you jian an xia,deng dai
		 	jian=jianma(key);
		 	}
		switch (jian)
			{case 0x0b : {jian=0x00;}break;
			 case 0x0c : {jian=0x00;}break;	
			 default   : {jian=0x00;}
		 	}
	}
}
	  	

⌨️ 快捷键说明

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