传送带产品计数器的设计LCD_第1页
传送带产品计数器的设计LCD_第2页
传送带产品计数器的设计LCD_第3页
传送带产品计数器的设计LCD_第4页
传送带产品计数器的设计LCD_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1题目 12电路原理图的设计 . 12.1 传送带产品计数器设计的电路原理图 12.2 LCD 显示模块 . 32.3 计数模块 32.4 键盘模块 33软件系统设计 . 33.1 软件系统的流程结构 33.2 LCD 显示程序模块 . 错误! 未定义书签。3.3 计数程序模块 错误! 未定义书签。4 仿真及调试 . 75 总论 . 8参 考 文 献 . 9致 谢. 91题目2电路原理图的设计2.1 传送带产品计数器设计的电路原理图VCC计数值设定LCD1LM016LDSW11431078DIPSW_8456116r 15 lH2.2 LCD显示模块11VCCARV11k13938RP11

2、0*8U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P1 0P2.7/A15P3 0/RXDP1.1P3.1/TXDP1 2P3 2/INT0P1 3P3.3/INT1P3 4/T0P1 4P1 5P3 5/T1P3.6/WRP3.7/RDP1 7t191891AT89C517834563736353433322122"23°24"252627V

3、CCR110f111004U1(P3.4/T0)R410k计数28急停161712131415图2.1电路原理图OPTOCOUPLER-NPN重启动R310kR2412k电机RL112VD11N4001KQ5NPNR55kLCD1LM016L7D6D5D4D3d2d1DODEWROSL EUE DDV SSV1 2 3456789*12342.3计数模块计数值设定DSW1 打DIPSW 8123456782.4 键盘模块3 软件系统设计3.1 软件系统的流程结构3.2 LCD 显示程序模块/*文件名: lcd1602.h 头文件功能:LCD1602驱动函数的声明 */#ifndef _LCD1

4、602_H_#define _LCD1602_H_#include <reg52.h>#define uint unsigned int#define uchar unsigned char/ 接口定义sbit LcdRs = P2A0;sbit LcdRw =卩2八1;sbit LcdEn = P2A2;sfr DBPort = 0x80; P0口为 LCD数据总线/*功能:LCD初始化函数*/void LCD_Initial();/*功能:LCD显示字符(ASIIC码)函数参数: x- 列 015;y- 行 01;str- 要显示的字符串指针 */ void LCD_Print

5、s(uchar x, uchar y,uchar *str);#endif /*文件名: lcd1602.c函数功能:LCD1602勺驱动函数 原理:采用普通10 口方式模拟LCD1602时序,未采用总线方式 */#include <REG52.H>#include <intrins.h> /次头文件中定义有 _nop_() 函数#include "lcd1602.h"/*功能:内部等待函数返回参数:P0数据 */ uchar LCD_Wait(void)LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_(); /whil

6、e(DBPort&0x80);/* 在用 Proteus 仿真时,屏蔽此语句,否则会进入死循环, 实际硬件操作时打开此语句 .*/LcdEn=0;return DBPort;/*功能:写LCD命令 /数据函数参数: style 为写命令 /数据, 0-命令, 1 -数据; input 为写入勺 8位命令/数据 */#define LCD_C0MMAND0/命令#define LCD_DATA1/数据#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_H0MING0x02 /光标返回原点void LCD_Write(bit style, uchar

7、input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input; _nop_();LcdEn=1;_nop_();LcdEn=0;_nop_();LCD_Wait();/*功能:设置LCD显示模式参数: DisplayMode 见下面的定义 */ 显示模式定义#define LCD_SHOW 0x04 / 显示开#define LCD_HIDE 0x00 / 显示关#define LCD_CURSOR 0x02/ 显示光标#define LCD_NO_CURSOR 0x00 / 无光标#define LCD_FLASH 0x01 / 光标闪动#de

8、fine LCD_NO_FLASH 0x00 / 光标不闪动void LCD_SetDisplay(uchar DisplayMode) LCD_Write(LCD_COMMAND, 0x08|DisplayMode); /*功能:设置LCD!入模式参数: InputMode 见下面的定义 */#define LCD_AC_UP 0x02/ 地址计数器增加方式#define LCD_AC_DOWN0x00 /此为缺省设置#define LCD_MOVE 0x01/ 画面可平移#define LCD_NO_MOVE0x00 /画面不可平移void LCD_SetInput(uchar Input

9、Mode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD详见LCD1602.h中的说明void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8 位数据端口 ,2 行显示,5*7 点阵 LCD_Write(LCD_COMMAND,0x38); / 此句不能省LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);开启显示,无光标LCD_Write(LCD_COMMAND ,L CD_CLEAR_SCREE清屏/LCD_SetInput(LCD_AC_UP|LCD_NO_M

10、OVE); /AC 递增,画面不?/*功能:液晶字符显示的位置函数 参数: x- 列 015;y- 行 01 ; */void LCD_Pos(uchar x, uchar y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/将字符(ASIIC码)输出到液晶显示 详见LCD1602.h中的说明void LCD_Prints(uchar x, uchar y,uchar *str)LCD_Pos(x,y);while(*str!='0') LCD_Write(LCD_

11、DATA,*str); str+;3.3 计数程序模块#include"lcd1602.h"#define uchar unsigned char#define uint unsigned intuchar out6;sbit STAR_KEY =P3A2;/定义键与单片机的连接引脚sbit L0=P1A0; / 定义SFR中引脚的位sbit L1=P1A1;sbit L2=P1A2;sbit L3=P1A3;sbit L4=P1A4;sbit L5=P1A5;sbit L6=P1A6;sbit L7=P1A7;sbit MOTOR=P3A0;uchar n2=1,0;vo

12、id delayms(uint x) / 延时子程序uchar y;while(x-)for(y=0;y<123;y+);uchar Keynum() / 按键子程序 1uchar key=0;STAR_KEY=1; /置初值 if(STAR_KEY=0)delayms(10);if(STAR_KEY=0)n0=0;n 1=1;/ 按下 STAR键则n0=0;n1=1return n1;/ 返回 n 值void xianshi(uint dispbuf) /显示子程序out0=dispbuf/10000+0x30; out1=(dispbuf%10000)/1000)+0x30;out2

13、=(dispbuf%1000)/100)+0x30; out3=(dispbuf%100)/10)+0x30;out4=dispbuf%10+0x30;out5='0'LCD_Initial(); /LCD初始化LCD_Prints(1, 0,"The Speed Is"); /LCD输出LCD_Prints(10, 1,"n/min");LCD_Prints(4, 1,out); uint qiuzhi() / 求用拨码盘所置数的值的子程序 uchar a;uchar b;uchar c;uchar d;uchar e;uchar f;

14、uchar g; uchar h;uint p=0;/将电平信号变为数字的值if (L0=1) a=1; else a=0; if (L1=1) b=1; else b=0; if (L2=1) c=1; else c=0; if (L3=1) d=1; else d=0; if (L4=1) e=1; else e=0; if (L5=1) f=1; else f=0; if (L6=1) g=1; else g=0; if (L7=1) h=1; else h=0;p=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+g*2*2*2*2*2*2+h*2*2*2*2*2*2*2return p; / void main (void) ui nt q;IT0=1;EA=1;EX0=1; TMOD=0X05; TL0=0;TH0=0;返回所求的P值/主程序/负跳变触发/ 开总允许中断/ 开INTO中断/置T0为计数器方式1/置计数器初值while(1) q=qiuzhi();/无限循环/调用求值子程序求出所置的数if (M0T0R=1) xia nshi(q); else xia nshi(TL0);Ke yn um();TR0=n 1; /当电动机关闭时显示用薄码盘所置的数并停止计数,电机启动时则开始计数,并显示计数 值if (TL0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论