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

📄 ilc7135.c

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

#include <AT89X51.H>
#include <ABSACC.H>
#include <INTRINS.H>
#define uchar unsigned char
#define unint unsigned int
#define CSIOPBASE    0x0200	//PSD特殊寄存器初始化
#define CTLA XBYTE[CSIOPBASE+0x0002]
#define DIRA XBYTE[CSIOPBASE+0x0006]
#define OUTA XBYTE[CSIOPBASE+0x0004]
#define INA  XBYTE[CSIOPBASE+0x0000]
#define CTLB XBYTE[CSIOPBASE+0x0003]
#define DIRB XBYTE[CSIOPBASE+0x0007]
#define OUTB XBYTE[CSIOPBASE+0x0005]
#define INB  XBYTE[CSIOPBASE+0x0001]
#define DIRC XBYTE[CSIOPBASE+0x0014]
#define OUTC XBYTE[CSIOPBASE+0x0012]
#define INC  XBYTE[CSIOPBASE+0x0010]
#define DIRD XBYTE[CSIOPBASE+0x0015]
#define OUTD XBYTE[CSIOPBASE+0x0013]
#define IND  XBYTE[CSIOPBASE+0x0011]
#define RAMSTART   XBYTE[0x2000]
#define CSLCD      XBYTE[0x0300]
//*************************************************
#define POL P1_7
uchar ADH,ADL;	bit FLAG;
//*************************************************
//GND-4,SERICK-PD2,SERIDA-PD1,VCC-1;		74164---PSD913F
//CLK---T1;	POL---P17;	BUSY---INT0;
//*************************************************
bdata uchar Bcc;
sbit a0=Bcc^0;	sbit a1=Bcc^1;	sbit a2=Bcc^2;	sbit a3=Bcc^3;
sbit a4=Bcc^4;	sbit a5=Bcc^5;	sbit a6=Bcc^6;	sbit a7=Bcc^7;
//*************************************************
void DELAYL (uchar t){	//长时间延时子程序
	uchar s;	while (t--)
	{for (s=0xff;s>0;s--)	{_nop_();_nop_();}	}	}
//*************************************************
void DELAYS (uchar t){	//短时间延时子程序
	while (t--)	{_nop_();}	}
//*************************************************
void SERVE_INT0() interrupt 0 using 2  {
	IE=0x01;ADH=TH0;ADL=TL0;TH0=0;TL0=0;FLAG=1;IE=0x81;} 
//*************************************************
uchar change(uchar d)	//16进制码转换成可供数码管显示的码值
{switch (d)
   {case 0x00:{d=0xc0;}break;	//xian 0	4个74LS164的小板子
	case 0x01:{d=0xf9;}break;	//xian 1
	case 0x02:{d=0xa4;}break;	//xian 2
	case 0x03:{d=0xb0;}break;	//xian 3
	case 0x04:{d=0x99;}break;	//xian 4
	case 0x05:{d=0x92;}break;	//xian 5	
	case 0x06:{d=0x82;}break;	//xian 6
	case 0x07:{d=0xf8;}break;	//xian 7
	case 0x08:{d=0x80;}break;	//xian 8
	case 0x09:{d=0x90;}break;	//xian 9
	case 0x0a:{d=0x88;}break;	//xian a
	case 0x0b:{d=0x83;}break;	//xian b
	case 0x0c:{d=0xc6;}break;	//xian c
	case 0x0d:{d=0xa1;}break;	//xian d
	case 0x0e:{d=0x86;}break;	//xian e
	case 0x0f:{d=0x8e;}break;	//xian f
	default:{d=0xff;};    }	return (d);}
//*************************************************
void show(uchar h)	//P1.0,P1.1模拟串行口使数码管显示
{	if((h&0x01)==0x01){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}
	if((h&0x02)==0x02){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x04)==0x04){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x08)==0x08){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x10)==0x10){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x20)==0x20){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x40)==0x40){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	
	if((h&0x80)==0x80){OUTD=0x02;OUTD=0x06;}else{OUTD=0x00;OUTD=0x04;}	}
//*************************************************
void SHOW_AD(void){	//显示当前AD转换的值
	unint a,b;	uchar m,n,o,p,q;	FLAG=0;
//	a=(((unint)ADH)<<8)+(unint)ADL;	a=a-10001;
//	m=(uchar)(a/10000);m=m&0x01;b=a%10000;n=(uchar)(b/1000);
//	b=b%1000;o=(uchar)(b/100);b=(uchar)(b%100);p=b/10;q=b%10;
	m=0;n=ADH>>4;o=ADH&0x0f;p=ADL>>4;q=ADL&0x0f;
	m=change(m);n=change(n);o=change(o);p=change(p);q=change(q);
	show(0xff);show(0xff);show(m);show(n);show(o);show(p);show(q);}
//*************************************************
void rtxdstart(void)
{	TMOD=0X2d;
	TL1=0xfd;TH1=0xfd;	//256-11059200/384/9600=0xfd
	SCON=0x50;PCON=0x00;	//fang shi 1
	TR1=1;		//ji shu qi 
}
//*************************************************
void txd(uchar z)	//串口发送子程序
{	SBUF=z;
	while (TI==0);	//wei 0 deng dai 
	TI=0;
}
//*************************************************
main(){	uchar a;
	CTLA=0x00;DIRA=0xff;	
	CTLB=0x00;DIRB=0xff;
	DIRC=0xff;DIRD=0x06;
	OUTC=0x00;show(0xC0);show(0xC0);show(0xC0);
	show(0xC0);show(0xC0);show(0xC0);show(0xC0);
	DELAYS(0xff);DELAYS(0xff);OUTC=0xff;
	//*************************************************
	TMOD=0x0d;	//16位计数器、TR0和INT0双重控制
	IP=0x01;	//外部中断0最高优先级
	TCON=0x11;	//计数器开启、下降沿触发中断方式
	IE=0x81;	//中断总允许、外部中断0开中断
	//*************************************************
	ADH=0x00;ADL=0x00;FLAG=1;rtxdstart();
	while (1){for (a=0;a<0xff;a++){txd(a);DELAYL(0x30);}	}
//	while(1){  if(FLAG) {SHOW_AD();txd(ADH);txd(ADL);txd(0);} DELAYS(0x30); }
//	rtxdstart();while(1){	a=rxd();txd(a);	}
}
	

⌨️ 快捷键说明

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