您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 单片机与LCD12864之间的串口通讯
/***************************************************************文件名:128_64.h*功能:实现单片机与LCD12864之间的串口通讯*说明:引脚接线:CS接PA0脚SID接PA1脚SCLK接PA2脚,PSB脚接地**************************************************************/#ifndef_12864_H#define_12864_H#includeiom128v.h#includemacros.h#includeBIT.h#defineCS_PA0#defineSID_PA1#defineSCLK_PA2#defineucharunsignedchar#defineuintunsignedintvoiddelay_us(uintt);//函数功能:16M晶振,延时t微秒voiddelay_ms(uintt);//函数功能:16M晶振,延时t毫秒voidSendbyte(ucharbyte);//函数功能:发送1字节ucharReceivebyte(void);//函数功能:串口接收一个字节//仅在读取数据的时候用到//而读出的数据是一次只能读出4bit的voidCheckbusy(void);//函数功能:检测忙voidWritecommand(uchardata);//函数功能:写命令voidWritedata(uchardata);//函数功能:发送数据voidLocate_x_y(ucharx,uchary);//函数功能:光标定位x行y列voidWrite_string(uchar*s);//函数功能:写入中文串voidDisplay_x_y_symbol(ucharx,uchary,uintdata);//函数功能:以字码的形式录voidDisplay_x_y_data(ucharx,uchary,uchar*data);//函数功能:光标定位x行y列写入中文串voidLcmClearTXT();//文本区清RAM函数voidInit_12864(void);//函数功能:液晶初始化//自动换行编码表unsignedcharAC_TABLE[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置};/***************************************************************函数名称:delay_us()*函数功能:16M晶振,延时t微秒*入口参数:t延时t微秒*出口参数:无**************************************************************/voiddelay_us(uintt){uinti,j;for(i=t;i0;i--)for(j=2;j0;j--);}/***************************************************************函数名称:delay_ms()*函数功能:16M晶振,延时t毫秒*入口参数:t延时t毫秒*出口参数:无**************************************************************/voiddelay_ms(uintt){uinti,j;for(i=t;i0;i--)for(j=2800;j0;j--);}/***************************************************************函数名称:Sendbyte()*函数功能:发送1字节*入口参数:data要写入的数据*出口参数:无**************************************************************/voidSendbyte(uchardata){uchari=0;SCLK;delay_us(8);//针对高频晶振for(i=0;i8;i++){if(data&0x80)SID=1;elseSID=0;SCLK=1;delay_us(8);//针对高频晶振data=1;SCLK=0;delay_us(8);//针对高频晶振}}/***************************************************************函数名称:Receivebyte()*函数功能:串口接收一个字节,仅在读取数据的时候用到,一次只能读出4bit的数据*入口参数:无*出口参数:(0xf0&temp1)+(0x0f&temp2)**************************************************************/ucharReceivebyte(void){uchari,temp1,temp2;temp1=temp2=0;for(i=0;i8;i++){temp1=temp11;SCLK=0;SCLK=1;SCLK=0;if(SID)temp1++;}for(i=0;i8;i++){temp2=temp21;SCLK=0;SCLK=1;SCLK=0;if(SID)temp2++;}return((0xf0&temp1)+(0x0f&temp2));}/***************************************************************函数名称:Checkbusy()*函数功能:液晶检测忙*入口参数:无*出口参数:无**************************************************************/voidCheckbusy(void){doSendbyte(0xfc);//11111,RW(1),RS(0),0while(0x80&Receivebyte());//BF(.7)=1Busy}/***************************************************************函数名称:Writecommand()*函数功能:发送的是控制指令(数据从LCD到MCU)*入口参数:data要写入的命令*出口参数:无**************************************************************/voidWritecommand(uchardata){CS=1;Checkbusy();Sendbyte(0xf8);//表示发送的是控制命令Sendbyte(data&0xf0);Sendbyte((data&0x0f)4);CS=0;}/***************************************************************函数名称:Writedata()*函数功能:向液晶写入数据*入口参数:data向液晶写入数据*出口参数:无**************************************************************/voidWritedata(uchardata){CS=1;Checkbusy();Sendbyte(0xfa);//表示发送的是数据Sendbyte(data&0xf0);Sendbyte((data&0x0f)4);CS=0;}/***************************************************************函数名称:Locate_x_y()*函数功能:光标定位x行y列*入口参数:X,Yx行y列*出口参数:无**************************************************************/voidLocate_x_y(ucharx,uchary){ucharaddr=0x80;Writecommand(0x80);switch(x){case0:addr=0x80+y;break;case1:addr=0x90+y;break;case2:addr=0x88+y;break;case3:addr=0x98+y;break;default:break;}Writecommand(addr);}/***************************************************************函数名称:Display_x_y_symbol()*函数功能:以字码的形式写入一个中文*入口参数:X,Y,dataX行地址,Y列地址,data是字码*出口参数:无**************************************************************/voidDisplay_x_y_symbol(ucharx,uchary,uintdata){uchari,j;Locate_x_y(x,y);j=(uchar)(data);i=(uchar)(data8);Writedata(i);Writedata(j);}/***************************************************************函数名称:Write_string()*函数功能:写入串数据*入口参数:*s*出口参数:无**************************************************************/voidWrite_string(uchar*s){for(;*s!='\0';s++){Writedata(*s);}}/***************************************************************函数名称:Display_x_y_data()*函数功能:光标定位x行y列写入字符串,自动换行*入口参数:X,Y,data*出口参数:无**************************************************************/voidDisplay_x_y_data(ucharx,uchary,uchar*data){Writecommand(AC_TABLE[8*x+y]);for(;*data!='\0';data++){if(y==16)//判断换行换行后重写地址{//若不判断,则自动从第一行到第三行y=0;x++;if(x==4)x=0;Writecommand(AC_TABLE[8*x+y]);}Writedata(*data);y++;}}/***************************************************************函数名称:LcmClearTXT()*函数功能:清文本区RAM数据*入口参数:无*出口参数:无**************************************************************/voidLcmClearTXT(){uchari;Writecommand(0x30);//8BitMCU,基本指令集合Writecommand(0x80);//AC归起始位for(i=0;i64;i++)Writedata(0x20);//地址归位}/
本文标题:单片机与LCD12864之间的串口通讯
链接地址:https://www.777doc.com/doc-4931262 .html