n--字符个数
ptr--指向字符存放位置的指针 返回值 :无
********************************************/ void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) {
uchar i;
for (i=0;i Disp1Char(x++,y,ptr[i]); if (x == 0x0f) { x = 0; y ^= 1; } } } /******************************************* 函数名称:LocateXY 功 能:向液晶输入显示字符位置的坐标信息 参 数:x--位置的列坐标 y--位置的行坐标 返回值 :无 ********************************************/ void LocateXY(uchar x,uchar y) { uchar temp; temp = x&0x0f; y &= 0x01; if(y) temp |= 0x40; //如果在第2行 temp |= 0x80; LcdWriteCommand(temp,1); } /******************************************* 函数名称:Disp1Char 功 能:在某个位置显示一个字符 参 数:x--位置的列坐标 y--位置的行坐标 data--显示的字符数据 返回值 :无 ********************************************/ 36 void Disp1Char(uchar x,uchar y,uchar data) { LocateXY( x, y ); LcdWriteData( data ); } /******************************************* 函数名称:LcdReset 功 能:对1602液晶模块进行复位操作 参 数:无 返回值 :无 ********************************************/ void LcdReset(void) { CtrlDir |= 0x07; //控制线端口设为输出状态 DataDir = 0xFF; //数据端口设为输出状态 LcdWriteCommand(0x38, 0); //规定的复位操作 Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteCommand(0x38, 1); //显示模式设置 LcdWriteCommand(0x08, 1); //显示关闭 LcdWriteCommand(0x01, 1); //显示清屏 LcdWriteCommand(0x06, 1); //写字符时整体不移动 LcdWriteCommand(0x0c, 1); //显示开,不开游标,不闪烁 } /******************************************* 函数名称:LcdWriteCommand 功 能:向液晶模块写入命令 参 数:cmd--命令, chk--是否判忙的标志,1:判忙,0:不判 返回值 :无 ********************************************/ void LcdWriteCommand(uchar cmd,uchar chk) { if (chk) WaitForEnable(); // 检测忙信号? CLR_RS; CLR_RW; _NOP(); 37 DataPort = cmd; //将命令字写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /******************************************* 函数名称:LcdWriteData 功 能:向液晶显示的当前地址写入显示数据 参 数:data--显示字符数据 返回值 :无 ********************************************/ void LcdWriteData( uchar data ) { WaitForEnable(); //等待液晶不忙 SET_RS; CLR_RW; _NOP(); DataPort = data; //将显示数据写入数据端口 _NOP(); SET_EN; //产生使能脉冲信号 _NOP(); _NOP(); CLR_EN; } /******************************************* 函数名称:WaitForEnable 功 能:等待1602液晶完成内部操作 参 数:无 返回值 :无 ********************************************/ void WaitForEnable(void) { P4DIR &= 0x00; //将P4口切换为输入状态 CLR_RS; SET_RW; 38 _NOP(); SET_EN; _NOP(); _NOP(); while((P4IN & Busy)!=0); //检测忙标志 CLR_EN; P4DIR |= 0xFF; //将P4口切换为输出状态 } /******************************************* 函数名称:Delay5ms 功 能:延时约5ms 参 数:无 返回值 :无 ********************************************/ void Delay5ms(void) { uint i=40000; while (i != 0) { i--; } } 39 40 8 致 谢 首先,我要感谢冯勇鑫冯老师在这将近五个月的毕业设计过程中给我的各方面的指导。从毕业设计开始选题一直到现在,我走的每一步都离不开冯老师的悉心指点和帮助,从老师身上我体味到了丰富的学养、严谨的作风、求实的态度,勤奋的精神,这都成为了激励我不断前行的动力和标杆。这让我明白不管是在学习上和生活中,都应该真心对待他人,在此,谨向冯老师表示崇高的敬意和衷心的感谢! 当我在键盘上敲下这最后一段文字时,我明白我的大学生活也就要像这篇毕业论文一样画上一个句号,我不能回忆我所经历的每一件事,但我会记得每一个在我前进路上帮助我的人,你们永远都是我前进的动力。 我的毕业课题是基于单片机的电子油门检测系统的设计,这看似是一个的小工程。但作为一个本科生,由于我对设计实物、程序编写方面的经验和能力相对不足,有很多的细节也没有完全考虑。但我的指导老师:冯勇鑫老师并没有指责,而是给了我很多鼓励和很多宝贵的建议,指引我的每一次前行,给了我一个很清晰实用的设计思路。这也让我让我慢慢地也掌握了一些设计的基本流程和思考的方法。当然我遇到了很多的问题,比如元器件如何选择,功能的如何实现等。但幸运地是我的指导老师冯老师给了我莫大的帮助,让这些问题都一一解决。 再次感谢大学里遇到的每一位老师和每一位同学,没有你们也不能成就今天的我。 感谢身在远方的父母!你们给我生活上的关怀和精神上的鼓励是我学习的动力。 41