*******************************************************************/
///////////////////預處理///////////////////////////////////// #include <reg51.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int #define KEYPORT P1
#define LCDCOM XBYTE[0x0008] //LCD命令寄存器 #define LCDDATA XBYTE[0x0009] //LCD數據寄存器
#define CDPA XBYTE[0x0004] //8255 PORT A, harddisk D0-D7 #define CDPB XBYTE[0x0005] //8255 PORT B, harddisk D8-D15 #define CDPC XBYTE[0x0006] //8255 PORT C,harddisk address #define CDCOM XBYTE[0x0007] //8255 命令寄存器
#define FILE0 0x00 //硬盤數據寄存器 #define FILE1 0x01 //錯誤/特征寄存器 #define FILE2 0x02 //扇區數寄存器 #define FILE3 0x03 //扇區號寄存器 #define FILE4 0x04 //柱面號寄存器L #define FILE5 0x05 //柱面號寄存器H #define FILE6 0x06 //驅動器/磁頭寄存器 #define FILE7 0x07 //狀態/命令寄存器
static uchar code LCD1[16]= "TOPLOW DESIGN "; static uchar code LCD2[16]= "Copyright(C)2004"; static uchar code ERROR[16]="ERROR "; static uchar code PASS[16]= "PASS ";
uchar buffer0,buffer1; uchar buffer[16]; uchar STATUS; ///////////////////位設置/////////////////////////// sbit BFLAG=ACC^7; sbit BSY=ACC^7; sbit DRDY=ACC^6; sbit DRQ=ACC^3; sbit ERR=ACC^0; sbit RESET=P3^5; sbit READ=P3^0; sbit WRITE=P3^1; sbit ILT=ACC^0; sbit INTRQ=P3^3; /************************************************************ * D7 D6 D5 D4 D3 D2 D1 D0 * BSY DRDY DWF DSC DRQ CORR IDX ERR * BSY:驅動器忙; * DRDY:驅動器準備好; * DWF:驅動器寫失; * DSC:尋道結束; * DRQ:請求服務,驅動器希望通過數據寄存器與CPU交換一字節數據;* CORR:當可以糾正的讀錯誤發生時,該位置1,數據傳輸將繼續進行 * IDX:收到綜引信號; * ERR:命令執行出錯。 * *************************************************************/
/******************************************************* *函數名稱:void delay(uint time) * *函數用途:延遲函數 * ********************************************************/ void delay(uint time) {uint i,j; for(i=0;i<time;i++) for(j=0;j<255;j++); }
/******************************************************* *函數名稱:void putch(unsigned char ch) * *函數用途:串口發送程序 * ********************************************************/ void putch(unsigned char ch) {SBUF=ch; TI=0; while(!TI); }
/******************************************************* *函數名稱:unsigned char getch(void) * *函數用途:串口接收程序 * ********************************************************/ unsigned char getch(void) {uchar temp; while(!RI); temp=SBUF; RI=0; return(temp); }
/******************************************************* *函數名稱:void wait(void) * *函數用途:LCD忙等待 * ********************************************************/ void wait(void) {do{ACC=LCDCOM;} while(BFLAG==1); }
/******************************************************* *函數名稱:void IniLcd(void) * *函數用途:LCD初始化函數 * ********************************************************/ void IniLcd(void) {LCDCOM=0x38; wait(); LCDCOM=0x08; wait(); LCDCOM=0x01; wait(); LCDCOM=0x06; wait(); LCDCOM=0x0c; wait(); } /*********************************************************************** *函數名稱:void LcdDis(uchar FL,uchar Lcd1[16],uchar SL,uchar Lcd2[16]) * *函數用途:液晶顯示函數 * ************************************************************************/ void LcdDis(uchar FL,uchar Lcd1[16],uchar SL,uchar Lcd2[16]) {uchar k; LCDCOM=FL|0x80; wait(); for(k=0;k<16;k++) {LCDDATA=Lcd1[k]; wait(); } LCDCOM=SL|0xc0; wait(); for(k=0;k<16;k++) {LCDDATA=Lcd2[k]; wait(); } }
|