#includereg51.h#includeabsacc.h#defineSEND_INITXBYTE[0xf400]#defineSEND_DATAXBYTE[0xf500]#defineREAD_BUSYXBYTE[0xf600]//#defineREAD_DATAXBYTE[0xfF00]//读点地址#defineCOM8155XBYTE[0x0000]//8155端口地址#definePAXBYTE[0X0001]#definePBXBYTE[0X0002]#definePCXBYTE[0X0003]#defineAD_INITXBYTE[0XF704]#defineAD_HXBYTE[0X0802]#defineAD_LXBYTE[0X0003]#defineucharunsignedchar#defineuintunsignedint#definecomm0//定义传送指令代码为0#definedat1bitbusy;//定义LCD忙标志位voidwr_lcd(uchardat_comm,ucharcontent);//写控制字与数据voidwr_str(unsignedcharaddr,unsignedcharcounts,constunsignedchar*ps);//写字符串voidchk_busy(void);voiddelay(uintus);voidinit_lcd();voidclrram(void);voidad();voidda();voidad1610();sbitP2_3=P2^3;uintadjg;ucharq,g,s,ba,qian,m,n;//ucharcodeTAB1A[]={题目:AD/DA转化};ucharcodeTAB1B[]={AD:};//ucharcodeTAB1C[]={DA:};//ucharcodeTAB1D[]={时间:2011年九月};/*******************************************************************************************函数名称:init_lcd*功能描述:初始化LCD******************************************************************************************/voidinit_lcd(){wr_lcd(comm,0x30);//00110000扩充功能设定——8位数据基本指令操作wr_lcd(comm,0x34);//扩展指令操作wr_lcd(comm,0x01);//00000001清屏——将DDRAM填满20H,并且设定DDRAM的地址计数器为00Hwr_lcd(comm,0x06);//00000110进入点设定——指定在数据的读取与写入时,设定游标的移动方向wr_lcd(comm,0x0c);//00001100游标或显示移位控制——开显//开显示,关光标,不闪烁}/*******************************************************************************************函数名称:clrram*功能描述:将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H******************************************************************************************/voidclrram(void){wr_lcd(comm,0x30);delay(10);wr_lcd(comm,0x01);delay(10);}/*********写字符串**************************************/voidwr_str(unsignedcharaddr,unsignedcharcounts,constunsignedchar*ps){inti;wr_lcd(comm,addr);delay(1);for(i=counts;i0;i--)//循环counts次{wr_lcd(dat,*ps);//查表取数并调用显示一个字节数据函数送显示delay(1);//延长一定时间,确保能看到数据一个个的显示出来ps++;//取下一个数据}}/*******************************************************************************************函数名称:wr_lcd*功能描述:当dat_comm=0时,写入指令,dat_comm=1时,写入数据******************************************************************************************/voidwr_lcd(uchardat_comm,ucharcontent){chk_busy();if(dat_comm)SEND_DATA=content;//写数据elseSEND_INIT=content;//写指令}/*******************************************************************************************函数名称:chk_busy*功能描述:检测LCD忙信号******************************************************************************************/voidchk_busy(void){uchartemp;busy=1;//先置位繁忙标志READ_BUSY=0xFF;while(busy){temp=READ_BUSY;if(temp&0x80==1)busy=1;else{busy=0;break;}}}/*******************************************************************************************函数名称:delay*功能描述:延时函数******************************************************************************************/voiddelay(uintus)//delaytime{while(us--);}/*******************************************************************************************函数名称:delay1*功能描述:延时函数1ms******************************************************************************************/voiddelay1(uintms){uinti,j;for(i=0;ims;i++)for(j=0;j15;j++)delay(1);}/*******************************************************************************************函数名称:main*功能描述:主函数******************************************************************************************/voidmain(){SP=0x60;COM8155=0X02;PB=0x00;delay(10);init_lcd();clrram();while(1){ad();ad1610();wr_str(0x90,3,TAB1B);delay1(10);wr_lcd(comm,0x93);delay(10);wr_lcd(dat,qian+0x30);delay(10);wr_lcd(comm,0x94);delay(10);wr_lcd(dat,ba+0x30);delay(10);wr_lcd(comm,0x95);delay(10);wr_lcd(dat,s+0x30);delay(10);wr_lcd(comm,0x96);delay(10);wr_lcd(dat,g+0x30);delay(100);}}voidad(){unsignedinta,b,c;AD_INIT=0;delay1(500);a=AD_H;b=AD_L;a=4;b=4;c=a|b;adjg=c;}voidad1610(){uintj,adjg1;adjg1=adjg;qian=adjg1/1000;j=adjg1%1000;ba=j/100;m=j%100;s=m/10;g=m%10;}