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

📄 zlg7289.c

📁 该程序用来测试89C51与IDE硬盘的接口
💻 C
字号:
//zlg7289 
//本程序在10M晶体下运行正常,如果用更高速率的晶体,需加更长时间延时

#include <AT89X52.H>
#include <ABSACC.H>
#include <INTRINS.H>
#define uchar unsigned char
#define unint unsigned int
uchar code key[]={	0x00,0x01,0x02,0x03,0x0c,0x08,0x04,0x00,
			0x08,0x09,0x0a,0x0b,0x0d,0x09,0x05,0x01,
			0x10,0x11,0x12,0x13,0x0e,0x0a,0x06,0x02,
			0x18,0x19,0x1a,0x1b,0x0f,0x0b,0x07,0x03};
//*************************************************
sbit ZLG_CS =P2^6; sbit ZLG_CLK=P2^3; 
sbit ZLG_DIO=P2^4; sbit ZLG_KEY=P3^2;
//*************************************************
void DELAYL (uchar t){ uchar s;while (t--) {	//长时间延时子程序
	for (s=0xff;s>0;s--)	{_nop_();_nop_();_nop_();} } }
//*************************************************
void DELAYS (uchar t){ while (t--) {_nop_();_nop_(); } }//短时间延时子程序
//*************************************************


//*************************************************
void ZLG_OUT(uchar a){uchar i; ZLG_CS=0;ZLG_CLK=0; //向ZLG7289发一条指令
	for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
	_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_CS=1;}
//*************************************************
void ZLG_D_OUT(uchar a,b){uchar i; ZLG_CS=0;ZLG_CLK=0;
	for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
	_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); } 
	for(i=0;i<8;i++){ZLG_DIO=(bit)(b&0x80);ZLG_CLK=1;
	_nop_();_nop_();b<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_CS=1;}
//*************************************************
uchar ZLG_KEYB(void){uchar i;uchar a=0x15; ZLG_CS=0;ZLG_CLK=0; //从ZLG7289读取键盘数据的指令
	for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
	_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_DIO=1;
	for(i=0;i<8;i++){ ZLG_CLK=1;_nop_();_nop_();_nop_(); a<<=1; 
	  if (ZLG_DIO) {a|=0x01;} ZLG_CLK=0;_nop_();_nop_();_nop_(); }
	ZLG_CS=1;return(a);}
//*************************************************
uchar KEY_V(uchar a){return key[a];}
//*************************************************



//********************************************* 串行口初始化、发送接收子程序
void Comstart(void){ TMOD=0X20;TL1=0xfd;TH1=0xfd; //256-11059200/384/9600=0xfd
	SCON=0x40;PCON=0x00;TR1=1;	}//方式1,波特率不加倍,计数器开 
//*************************************************
void Txd2(uchar z)	//串口发送子程序
{	SBUF=z;	while(TI==0);  TI=0;	}//为0等待
//*************************************************向微机发送数据子程序
void Pc_com(unint a){	unint m,n;  uchar w;
	m=a/10000;w=(uchar)(m+0x0030);Txd2(w);		//万位
	m=a%10000;n=m/1000;w=(uchar)(n+0x0030);Txd2(w);	//千位
	n=m%1000;m=n/100;w=(uchar)(m+0x0030);Txd2(w);	//百位
	m=n%100;n=m/10;w=(uchar)(n+0x0030);Txd2(w);	//十位
	n=m%10;w=(uchar)(n+0x0030);Txd2(w);Txd2(0x0d);Txd2(0x0a);}//个位 回车
//*************************************************



//*************************************************
main(){	uchar a,b;Comstart();IE=0x00;
	ZLG_OUT(0xa4);ZLG_OUT(0xbf);ZLG_D_OUT(0x88,0x00);//复位、闪烁、测试
	DELAYL(0x01);DELAYL(0x01);ZLG_D_OUT(0x88,0xff);	//不闪烁,测试结束
	b=0x80;for (a=0x80;a<0x88;a++){ZLG_D_OUT(a,b);b++;} //DELAYL(0xff);
		//带小数点不闪烁显示01234567,方式0译码并延时一段时间
	ZLG_D_OUT(0x80,0x08);ZLG_D_OUT(0x81,0x09);
	ZLG_D_OUT(0x82,0x0a);ZLG_D_OUT(0x83,0x0a);
	ZLG_D_OUT(0x84,0x0c);ZLG_D_OUT(0x85,0x0b);
	ZLG_D_OUT(0x86,0x0d);ZLG_D_OUT(0x87,0x0e);//DELAYL(0xff);
		//不带小数点不闪烁显示89-HELP ,方式0译码并延时一段时间
	b=0x00;for (a=0xc8;a<0xd0;a++){ZLG_D_OUT(a,b);b++;}	
	DELAYL(0x01);	//闪烁显示01234567,方式1译码
	for (a=0;a<0x08;a++){ZLG_OUT(0xa3);DELAYL(0x01);}
	for (a=0;a<0x08;a++){ZLG_OUT(0xa2);DELAYL(0x01);}
	for (a=0;a<0x08;a++){ZLG_OUT(0xa1);DELAYL(0x01);}
	b=0x08;for (a=0xc8;a<0xd0;a++){ZLG_D_OUT(a,b);b++;}	
	for (a=0;a<0x08;a++){ZLG_OUT(0xa0);DELAYL(0x01);}
		//循环左右移位显示,不循环左右移位显示
	b=0x11;for (a=0x90;a<0x98;a++){ZLG_D_OUT(a,b);b++;}
	DELAYL(0x01); ZLG_D_OUT(0x88,0x7f); //显示乱码,不译码并延时一段时间
	while(1){	if(!ZLG_KEY){  a=ZLG_KEYB();Pc_com(a);
		if(a!=0xff){ZLG_OUT(0xa2);a=KEY_V(a);ZLG_D_OUT(0xcf,a);
			while(!ZLG_KEY);DELAYS(0x01);} } }
}		

⌨️ 快捷键说明

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