好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

传送带产品计数器的设计LCD显示.docx

10页
  • 卖家[上传人]:博****1
  • 文档编号:411585835
  • 上传时间:2023-10-28
  • 文档格式:DOCX
  • 文档大小:20.37KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 目录摘要 21 题目 32 电路原理图的设计 32.1 传送带产品计数器(LED显示)电路原理图 32.2 LED显示模块 32.3 置数模块 43 软件系统设计 53.1 软件系统的流程结构 53.2 C51程序 53.3计数程序模块 84 仿真及调试 115 总论 11参 考 文 献 13致 谢 14摘要MCS-51系列单片机LCD显示LCM16021 题目传送带产品计数器的设计(LCD显示)功能要求: 用MCS-51系列单片机作为控制器;采用LCM1602进行计数显示;采用光电传感器计数; 用按键控制传送带电机的起停; 用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行2 电路原理图的设计2.1 传送带产品计数器(LED显示)电路原理图硬件原理图如下图所示,包括显示模块,按键模块,电机控制模块,置数模块2.2 LED显示模块使用4位LED数码管来显示数字,通过NPN管来驱动数码管2.3 置数模块使用8位薄码盘和5位薄码盘组合来组成最高13位的二进制数,即8191的最大置数值,很好的利用了4位数码管3 软件系统设计3.1 软件系统的流程结构3.2 C51程序/*-----------------------------------------------------------文件名:lcd1602.h头文件功能:LCD1602驱动函数的声明-----------------------------------------------------------*/#ifndef _LCD1602_H_#define _LCD1602_H_#include #define uint unsigned int#define uchar unsigned char//接口定义sbit LcdRs= P2^0;sbit LcdRw= P2^1;sbit LcdEn = P2^2;sfr DBPort = 0x80; //P0口为LCD数据总线/*-----------------------------------------------------------功能:LCD初始化函数-----------------------------------------------------------*/void LCD_Initial();/*-----------------------------------------------------------功能:LCD显示字符(ASIIC码)函数参数:x-列0~15;y-行0~1;str-要显示的字符串指针-----------------------------------------------------------*/void LCD_Prints(uchar x, uchar y,uchar *str);#endif/*-----------------------------------------------------------文件名:lcd1602.c函数功能:LCD1602的驱动函数原理:采用普通IO口方式模拟LCD1602时序,未采用总线方式-----------------------------------------------------------*/#include #include //次头文件中定义有_nop_()函数#include "lcd1602.h"/*-----------------------------------------------------------功能:内部等待函数返回参数:P0数据-----------------------------------------------------------*/uchar LCD_Wait(void){LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();//while(DBPort&0x80);/* 在用Proteus仿真时,屏蔽此语句,否则会进入死循环, 实际硬件操作时打开此语句.*/LcdEn=0;return DBPort;}/*-----------------------------------------------------------功能:写LCD命令/数据 函数参数:style为写命令/数据,0-命令,1-数据;input为写入的8位命令/数据-----------------------------------------------------------*/#define LCD_COMMAND 0 // 命令#define LCD_DATA 1 // 数据#define LCD_CLEAR_SCREEN 0x01 // 清屏#define LCD_HOMING 0x02 // 光标返回原点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_SHOW0x04 //显示开#define LCD_HIDE0x00 //显示关 #define LCD_CURSOR0x02 //显示光标#define LCD_NO_CURSOR0x00 //无光标 #define LCD_FLASH0x01 //光标闪动#define LCD_NO_FLASH0x00 //光标不闪动void LCD_SetDisplay(uchar DisplayMode){LCD_Write(LCD_COMMAND, 0x08|DisplayMode);}/*-----------------------------------------------------------功能:设置LCD输入模式参数:InputMode见下面的定义-----------------------------------------------------------*/#define LCD_AC_UP0x02 // 地址计数器增加方式#define LCD_AC_DOWN0x00 // 此为缺省设置#define LCD_MOVE0x01 // 画面可平移#define LCD_NO_MOVE0x00 // 画面不可平移void LCD_SetInput(uchar InputMode){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,LCD_CLEAR_SCREEN); //清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不?}/*-----------------------------------------------------------功能:液晶字符显示的位置函数参数:x-列0~15;y-行0~1; -----------------------------------------------------------*/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_DATA,*str); str++;}}3.3计数程序模块#include"lcd1602.h"#define uchar unsigned char#define uint unsigned int uchar out[6];sbit STAR_KEY =P3^2;//定义键与单片机的连接引脚sbit L0=P1^0; //定义SFR中引脚的位sbit L1=P1^1;sbit L2=P1^2;sbit L3=P1^3;sbit L4=P1^4;sbit L5=P1^5;sbit L6=P1^6;sbit L7=P1^7;sbit MOTOR=P3^0;uchar n[2]={1,0};void delayms(uint x) //延时子程序{uchar y;while(x--){for(y=0;y<123;y++){;}}uchar Keynum() //按键子程序1{uchar key=0;STAR_KEY=1; //置初值if(STAR_KEY==0){delayms(10);if(STAR_KEY==0)n[0]=0;n[1]=1;} //按下STAR键则n[0]=0;n[1]=1return n[1]; //返回n值}void xianshi(uint dispbuf) //显示子程序{out[0]=dispbuf/10000+0x30;out[1]=((dispbuf%10000)/1000)+0x30;out[2]=((dispbuf%1000)/100)+0x30;out[3]=((dispbuf%100)/10)+0x30;out[4]=dispbuf%10+0x30;out[5]='\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() //求用拨。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.