传送带产品计数器的设计(LCD显示)_第1页
传送带产品计数器的设计(LCD显示)_第2页
免费预览已结束,剩余16页可下载查看

下载本文档

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

文档简介

1、1.目录摘要.题目.2.电路原理图的设计.2.2.1传送带产品计数器(LED显示)电路原理图2.2 LED显示模块2.3置数模块软件系统设计3.1软件系统的流程结构3.2 C51程序3.3计数程序模块仿真及调试总论参考文献2.2.3.4.4.4.9.1.3.1.4.1.5.1.6.摘要MCS-5 係列单片机 LCD 显示 LCM16021题目传送带产品计数器的设计(LCD 显示)功能要求:用 MCS-51 系列单片机作为控制器;采用 LCM1602 进行计数显示;采用光电传感 器计数;用按键控制传送带电机的起停;用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。2电路原理图

2、的设计2.1传送带产品计数器(LED 显示)电路原理图硬件原理图如下图所示,包括显示模块,按键模块,电机控制模块,置数模块LCD1LM016L2.2 LED 显示模块使用 4 位 LED 数码管来显示数字,通过 NPNt来驱动数码管VCCU1计数值设定XTAL1P0.0/AD0XTAL2P0.1/AD1P0.2/AD2P0.3/AD3RSTP0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7PSENP2.0/A8P2.1/A9P2.2/A10P2.3/A11ALEP2.4/A12EAP2.5/A13P1 0P2.6/A14P2.7/A15P3 0/RXDP1.1P1.2P1.3P1

3、.4P1.5P1.6P1.7P3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDR4R22k重启动D1193918929303124252627VCCRV11kRP110*838373621U1(P3.4/T0)35343332LCD1LM016L1 2 34 5 6789912342.3 置数模块使用 8 位薄码盘和 5 位薄码盘组合来组成最高 13 位的二进制数,即 8191 的最大置 数值,很好的利用了 4 位数码管。计数值设定DSW1卅DSW1 “DIPSW 8112345678OPTOCOUPLER-NPN7D6D5D4D3D2

4、D1DODE0SREtvDDVSSV3软件系统设计3.1软件系统的流程结构程吋初昭化1GSMjimLCO&示Jr -r3.2C51 程序/*-文件名:lcd1602.h 头文件功能:LCD1602 驱动函数的声明 - */#ifndef _LCD1602_H_#defi ne _LCD1602_H_#include #define uint unsigned int#define uchar unsigned char/ 接口定义sbit LcdRs=P2A0;sbit LcdRw=P2A1;sbit LcdEnP2A2;sfr DBPort =0 x80; /P0口为LCD数据总线/

5、*-功能:LCD 初始化函数- */void LCD_Initial();/*-功能:LCD 显示字符(ASIIC 码)函数参数: x- 列 015;y- 行 01;str- 要显示的字符串指针 */ void LCD_Prints(uchar x,uchar y,uchar *str);#endif /*-文件名: lcd1602.c函数功能:LCD1602 勺驱动函数原理:采用普通 10 口方式模拟 LCD1602 时序,未采用总线方式*/#include #include / 次头文件中定义有 _nop_() 函数#include lcd1602.h/*-功能:内部等待函数返回参数:P0

6、 数据- */uchar LCD_Wait(void)LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_(); /while(DBPort&0 x80);/* 在用 Proteus 仿真时,屏蔽此语句,否则会进入死循环,实际硬件操作时打开此语句 .*/LcdEn=0;return DBPort;/*-功能:写 LCD 命令 /数据函数参数:style 为写命令/数据,0-命令,1-数据;in put 为写入的 8 位命令/数据- */#define LCD_COMMAND0/命令#define LCD_DATA1/数据#define LCD_CLEAR_SC

7、REEN0 x01 / 清屏#define LCD_HOMING 0 x02 / 光标返回原点 void LCD_Write(bit style, uchar input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input; _nop_();LcdEn=1;_nop_();LcdEn=0;_nop_();LCD_Wait();/*-功能:设置 LCD 显示模式参数: DisplayMode 见下面的定义- */ 显示模式定义#define LCD_SHOW 0 x04 / 显示开#define LCD_HIDE 0 x00 / 显示关#define

8、 LCD_CURSOR 0 x02/ 显示光标#define LCD_NO_CURSOR 0 x00 / 无光标#define LCD_FLASH 0 x01 / 光标闪动#define LCD_NO_FLASH 0 x00 / 光标不闪动void LCD_SetDisplay(uchar DisplayMode)LCD_Write(LCD_COMMAND, 0 x08|DisplayMode); /*-功能:设置 LCD 俞入模式参数: InputMode 见下面的定义 - */#define LCD_AC_UP 0 x02/ 地址计数器增加方式#define LCD_AC_DOWN 0 x

9、00/此为缺省设置#define LCD_MOVE 0 x01/ 画面可平移#define LCD_NO_MOVE0 x00/画面不可平移void LCD_SetInput(uchar InputMode)LCD_Write(LCD_COMMAND, 0 x04|InputMode);/初始化 LCD 详见 LCD1602.h 中的说明void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0 x38); /8 位数据端口 ,2 行显示 ,5*7 点阵LCD_Write(LCD_COMMAND,0 x38); / 此句不能省LCD_SetDisplay(

10、LCD_SHOW|LCD_NO_CURSOR);开启显示,无光标LCD_Write(LCD_COMMAND ,L CD_CLEAR_SCREE 清屏/LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC 递增,画面不?/*-功能:液晶字符显示的位置函数 参数: x- 列 015;y- 行 01 ;*/void LCD_Pos(uchar x, uchar y) if(y=0)LCD_Write(LCD_COMMAND,0 x80|x);if(y=1)LCD_Write(LCD_COMMAND,0 x80|(x-0 x40);/将字符(ASIIC 码)输出到液晶显示

11、详见 LCD1602.h 中的说明void LCD_Prints(uchar x, uchar y,uchar *str)LCD_Pos(x,y);while(*str!=0) LCD_Write(LCD_DATA,*str); str+;3.3计数程序模块#includelcd1602.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

12、L3=P1A3;sbit L4=P1A4;sbit L5=P1A5;sbit L6=P1A6;sbit L7=PM7;sbit MOTOR=P3A0;uchar n2=1,0;void delayms(uint x) / 延时子程序uchar y;while(x-)for(y=0;y123;y+);uchar Keynum() / 按键子程序 1 uchar key=0;STAR_KEY=1; /置初值if(STAR_KEY=0)delayms(10);if(STAR_KEY=0)n0=0;n1=1;n0=0;n1=1return n1;/ 返回 n 值void xianshi(uint di

13、spbuf) /显示子程序out0=dispbuf/10000+0 x30;out1=(dispbuf%10000)/1000)+0 x30; out2=(dispbuf%1000)/100)+0 x30;out3=(dispbuf%100)/10)+0 x30; out4=dispbuf%10+0 x30;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() / 求用拨码盘所置数的值的子程序/按下

14、 STAR 键则 uchar a;uchar b;uchar c;uchar d;uchar e;uchar f;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

15、+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*2;return p; / 返回所求的 P 值void main(void) / 主程序uint q;IT0=1;/ 负跳变触发EA=1;/ 开总允许中断EX0=1;/ 开 INTO 中断TMOD=0X05;/置 TO 为计数器方式 1TL0=0;/置计数器初值TH0=0;while(1)/ 无限循环 q=qiuzhi();/ 调用求值子程序求出所置的数if (MOTOR=1) xianshi(q); else xianshi(TL0);Keynum();TR0=n1; /当电

16、动机关闭时显示用薄码盘所置的数并停止计数,电机启动时则开始计数,并显示计数 值if (TL0=q) TR0=0;MOTOR=1; else Keynum();MOTOR=n0; / 当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况 void Int0(void) interrupt 0 / 中断服务程序,工作寄存器用 0 组 TL0=0;TR0=1; / 重置计数值,重新开始计数4仿真及调试LCD1LM016LVCC计数值设定U11:DSW11 -i2 r131216153 31 44 55-I-6T77 RV11k138-34VCC急停654OPTOCOUPLE -NPNU1(P3.4/T0)重启动R410kF14RP110*8XTAL1XTAL2RSTP0.0/AD0 P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A1

温馨提示

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

评论

0/150

提交评论