步进电机正反转设计单片机课程设计论文内容摘要:

//使能 LCD RS=0。 //读写指令 显示速度 输出位控制字 返回主程序 调用延时子程序 正转显示 输出断码控制字 反转显示 置初始值 置 初始值 16 RW=1。 //读 P2=0xff。 //读操作前先进行一次空读操作 ,接下来才能读到数据 while(!Busy)。 //等待,不忙退出 } //写指令代码 void wcode(uchar cd) //写指令 代码 { chkbusy()。 //写等待 P2=0xff。 //使能 LCD RW=0。 //读禁止 RS=0。 //输出 设置 P2=cd。 //写数据代码 E=1。 //以下两句产生下降沿 E=0。 } //把显示数据写到内存单元中 void wdata(uchar dat) //写显示数据 { chkbusy()。 //写等待 P2=0xff。 //使能 LCD RW=0。 //读禁止 RS=1。 //输出 设置 P2=dat ^0xFF。 //写数据代码 E=1。 //以下两句产生下降沿 E=0。 } //显示 LCD 程序 //可以更改程序中的 64 变为 32 就可以输出数字了 void disrow(uchar page,uchar col,uchar *temp) { uchar i。 if(col64) // 左半平面 { L=1。 R=0。 wcode(LCDPAGE+page)。 // 写指令 页 wcode(LCDLINE+col)。 //写指令行 if((col+16)64) //如果字在左半平面显示不了,转到右半平面去 { for(i=0。 i16。 i++) //写字 wdata(*(temp+i))。 } else //右半平面 17 { for(i=0。 i64col。 i++) //减去左边数,从右半平面第一位开始显示 wdata(*(temp+i))。 //写字 显示 L=0。 R=1。 //右半平面 wcode(LCDPAGE+page)。 //写指令 页 wcode(LCDLINE)。 //写指令行 for(i=64col。 i16。 i++) //写字右半平面 wdata(*(temp+i))。 } } else { L=0。 R=1。 wcode(LCDPAGE+page)。 // 写 指令 页 wcode(LCDLINE+col64)。 //写指令行 for(i=0。 i16。 i++) //写字 wdata(*(temp+i))。 } } //供调用子程序 void display_HZ( int page, int col,uchar *temp) { disrow( page, col, temp)。 //显示上半字 disrow( page+1, col, temp+16)。 //显示下半字 } ///**************************************************** void disrow_ascii(uchar page,uchar col,uchar *temp) { uchar i。 if(col64) // 左半 平面 { L=1。 R=0。 wcode(LCDPAGE+page)。 // 写指令 页 wcode(LCDLINE+col)。 //写指令行 if((col+8)64) //如果字在左半平面显示不了,转到右半平面去 { for(i=0。 i8。 i++) //写字 wdata(*(temp+i))。 } else //右半平面 { for(i=0。 i64col。 i++) //减去左边数,从右半平 18 面第一位开始显示 wdata(*(temp+i))。 //写字 显示 L=0。 R=1。 //右半平面 wcode(LCDPAGE+page)。 // 写指令 页 wcode(LCDLINE)。 //写指令行 for(i=64col。 i8。 i++) //写字 右半平面 wdata(*(temp+i))。 } } else { L=0。 R=1。 wcode(LCDPAGE+page)。 // 写指令 页 wcode(LCDLINE+col64)。 //写指令行 for(i=0。 i8。 i++) //写字 wdata(*(temp+i))。 } } void display_ascII( int page, int col,uchar *temp) { disrow_ascii( page, col, temp)。 //显示上半字 disrow_ascii( page+1, col, temp+8)。 //显示下半字 } //LCD 初始化 void iniLCD(void) //初始化 { L=1。 R=1。 wcode(0x38)。 wcode(0x0f)。 //开显示 设置 wcode(0xc0)。 //设置显示启动为第一行 wcode(0x01)。 //清屏 wcode(0x06)。 //画面不动,光标右移。 } //然后应用下面程序来索引汉字 void write_hz_str( int x1,int y1, uchar *point ) { signed char temp1, temp2。 int i。 int x,y,hang=0。 int hz_t=0。 x=x1。 y=y1。 19 while (*point != 39。 \039。 ) //判断是否显示完成 { if (hz_t=8) //应是 8,中间有字符 ASCII 吗 + 汉字则只有 1 个字节空间不够写汉字所以换 行 { hz_t =0。 hang+=2。 } temp1 = *point++。 //取汉字数据 if (temp1 amp。 0x80) //如果是要显示汉字 { temp2 = *point ++。 for (i = 0。 i HZ_SIZE。 i++) //字码中共 9 个汉字 { if ((temp1 == GB_16[i].Index[0]) amp。 amp。 (temp2 == GB_16[i].Index[1])) //查索引 { x=x1+hang。 y=y1+hz_t*16。 display_HZ(x,y, amp。 (GB_16[i].Msk[0]))。 //找到 ,字模指针赋值 hz_t+=1。 break。 } } } else if (temp1=127 amp。 amp。 temp1=32) { temp1 =32。 x=x1+hang。 y=y1+hz_t*8。 display_ascII(x,y, amp。 (nAsciiDot[16*temp1]))。 //找到 ,字模指针赋值 hz_t+=1。 } } } H文件 H 文件见附录 六、整体电路图 20 七、电路 仿真及调试 介绍 Proteus 是由 Labcenter Electronics 开发的功能强大的单片机仿真软件Proteus 与其他的仿真软件相比较,在下面的优点: 21 、数字电路、数模混合电路; 、 PCB 图;。 从程序的编写,编译到调试,目标版的仿真一应俱全。 支持汇编语言和 C 语言的编程。 还可配合 Keil C 实现程序的联合调试,将 Proteus 中绘制的原理图作为实际中的目标板,而用 Keil C 集成环境实现对目标板的控制,与实际中通过硬件仿真器对目标板的调试几乎完全相同,并且支持多显示器的调试,即 Proteus 运行在一台计算。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。