SMC162程序(具体程序)
#ifndef_SMC162_H_#define_SMC162_H_#include<SST/SST89x5x4.H>sbitCS0=P2^5;sbitCS1=P2^6;sbitCS2=P2^7;#defineSELECT_LCD()CS0=0;CS1=1;CS2=0#defineSELECT_NONE()CS0=1;CS1=1;CS2=1sbitLcd_RW=P2^4;sbitLcd_RS=P2^3;/*******************函数声明********************/voidLcdWrite(unsignedcharvalue,bitRS);unsignedcharLcdRead(bitRS);voidLcdWriteCmd(unsignedcharvalue,unsignedcharattrib);voidLcdWriteData(unsignedcharvalue);unsignedcharLcdReadData();voidDelay5Ms(void);voidDelay400Ms(void);voidLcdInit(void);voidLocateXY(charx,chary);voidPutChar(charx,chary,charvalue);voidPutStr(charx,chary,char*str);#include"SMC162.h"/***************************************说明:LCD写函数,完成LCD写操作的物理时序value:写的具体值RS:0-写指令1-写数据*****************************************/voidLcdWrite(unsignedcharvalue,bitRS){/*1.设置RS信号线*/Lcd_RS=RS;/*2.设置RW信号线为读*/Lcd_RW=0;/*3.设置LCD片选*/SELECT_LCD();/*4.通过P0端口写值*/P0=value;/*5.锁存*/SELECT_NONE();}/***************************************说明:LCD读函数,完成LCD读操作的物理时序RS:0-写指令1-写数据return:读出的具体值*****************************************/unsignedcharLcdRead(bitRS){unsignedcharrt;/*1.设置RS信号线*/Lcd_RS=RS;/*2.设置RW信号线为读*/Lcd_RW=1;/*3.释放P0口*/P0=0xff;/*4.设置LCD片选*/SELECT_LCD();SELECT_LCD();SELECT_LCD();SELECT_LCD();/*5.通过P0端口读值*/rt=P0;/*6.锁存*/SELECT_NONE();returnrt;}/***************************************说明:LCD写指令value:写的具体值attrib:0-不检测忙信号1-监测忙信号*****************************************/voidLcdWriteCmd(unsignedcharvalue,unsignedcharattrib){/*监测忙状态*/if(attrib)while(LcdRead(0)&0x80);LcdWrite(value,0);}/***************************************说明:LCD写数据*****************************************/voidLcdWriteData(unsignedcharvalue){/*监测忙状态*/while(LcdRead(0)&0x80);LcdWrite(value,1);}/***************************************说明:LCD读数据*****************************************/unsignedcharLcdReadData(){/*监测忙状态*/while(LcdRead(0)&0x80);returnLcdRead(1);}/***************************************说明:短延时,5ms*****************************************/voidDelay5Ms(void){unsignedinti=5552;while(i--);}/***************************************说明:长延时,400ms*****************************************/voidDelay400Ms(void){unsignedchari=80;while(i--)Delay5Ms();}/***************************************说明:LCD初始化函数,需要按照产品说明书完成*****************************************/voidLcdInit(void){Delay400Ms();/*写指令0x38连续3次,不检测忙信号*/LcdWriteCmd(0x38,0);Delay5Ms();LcdWriteCmd(0x38,0);Delay5Ms();LcdWriteCmd(0x38,0);Delay5Ms();/*以后的读写操作均要判断忙信号*/LcdWriteCmd(0x38,1);/*先设置关屏*/LcdWriteCmd(0x08,1);/*清屏*/LcdWriteCmd(0x01,1);/*设置光标显示模式*/LcdWriteCmd(0x06,1);/*开屏并显示光标*/LcdWriteCmd(0x0c,1);}/***************************************说明:设置光标定位*****************************************/voidLocateXY(charx,chary){unsignedchartemp;temp=x&0xf;y&=0x1;if(y)temp|=0x40;temp|=0x80;LcdWriteCmd(temp,1);}/***************************************说明:显示字符x:横坐标y:纵坐标value:显示的字符*****************************************/voidPutChar(charx,chary,charvalue){LocateXY(x,y);LcdWriteData(value);}/***************************************说明:显示字符串*****************************************/voidPutStr(charx,chary,char*str){unsignedchari,len=0;/*计算字符串长度*/while(str[len]>31)len++;/*显示字符串*/for(i=0;i<len;i++){PutChar(x++,y,str[i]);if(x==16){x=0;y^=1;}}}#include"../SMC162/SMC162.h"voidmain(){chari=0;LcdInit();PutStr(0,0,"51testBOARD");PutStr(0,1,"HUSTC51");while(1);}