版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
//MCU:AT89S51//晶振:12M#include"regX52.H"#include"math.h"#include"intrins.h"#defineLCDIOP0//定义P0口与LCD1602旳数据口相接#defineON1#defineOFF0sbitLCD_RS=P2^6;sbitLCD_RW=P2^5;sbitLCD_EN=P2^4;sbitLCD_BUSY=LCDIO^7;sbitSW4=P2^0; //速度设置加sbitSW3=P2^1; //速度设置减sbitSW2=P2^2; // 停sbitSW1=P2^3; //反转sbitIN2=P3^4; // 红色旳线sbitPWM=P3^5; // 黄色旳线sbitIN1=P3^6; // 紫色旳线int display;int flag;inttime;inta;ints=25;unsignedlongintp;unsignedlongintxiao;unsignedlonginth;unsignedlongintv;unsignedchardispbuff[4]; //寄存各位数据/*******1ms延时子程序***********/voiddelay_nms(unsignedintn){unsignedinti;unsignedcharj;for(i=0;i<n;i++)for(j=0;j<120;j++) ;//空操作}/*******1ms延时子程序***********//*******0.1ms延时子程序***********/voidcontrol_speed(unsignedintn){unsignedcharj;for(j=0;j<n;j++) ;//空操作}/*******0.1ms延时子程序***********/#defineucharunsignedchar#defineuintunsignedint//LCD驱动voidLCD_check_busy(void)//检测LCD状态,看它是不是还在忙呢{do{LCD_EN=0;LCD_RS=0;LCD_RW=1;LCDIO=0xff;LCD_EN=1;}while(LCD_BUSY==1);LCD_EN=0;}/************LCD1602写命令*******************************/voidLCD_send_command(ucharcommand,busy1){if(busy1)LCD_check_busy();LCD_RS=0;LCD_RW=0;LCD_EN=1;LCDIO=command;LCD_EN=0;}/*****************LCD1602写数据**************************/voidLCD_send_data(uchardat){LCD_check_busy();LCD_RS=1;LCD_RW=0;LCD_EN=1;LCDIO=dat;LCD_EN=0;}voidLCD_write_char(ucharx,uchary,uchardat){unsignedcharaddress;if(x==0)address=0x80+y;elseaddress=0xc0+y; LCD_send_command(address,0);LCD_send_data(dat);}/******************LCD1602显示字符串*********************/voidLCD_disp_string(ucharx,uchary,uchar*Data){if(x==0){if(y<16){LCD_send_command(0x80+y,0);for(;y<16&&*Data!='\0';y++){LCD_send_data(*(Data)); Data++;}if(*Data!='\0'){y=0;x=1;}}}if(x==1){LCD_send_command(0xc0+y,0);for(;y<16&&*Data!='\0';y++){LCD_send_data(*(Data)); Data++;}}}voidLCD_init(void){delay_nms(15);LCD_send_command(0x38,0);delay_nms(5);LCD_send_command(0x38,0);delay_nms(5);LCD_send_command(0x38,0);delay_nms(5);LCD_send_command(0x38,1);//设置lcd1602为每个字符5×7显示LCD_send_command(0x0f,1);//开显示,光标显示并闪烁LCD_send_command(0x06,1);//光标移动设置,每写一种数,光标自动加一LCD_send_command(0x01,1);//清屏}/**************LCD1602旳初始化完毕***************************//***********************初始化函数*********************/voidinit(){ IT1=1; //脉冲触发方式 EA=1; //中断总容许 EX1=1; //容许外部中断1 TMOD=0x91; TH0=0x3c; TL0=0xb0; //给定期器赋初值 ET0=1; //容许定期中断 TR0=1; //启动定期器}/******定期器,外部中断初始化******/voidmain(){ intmode; intvs=50; //速度设置参数 intY=2; int k=0; init(); LCD_init(); LCD_disp_string(0,0x00,"setspeed:"); LCD_disp_string(1,0x00,"V="); LCD_disp_string(1,0x05,"Hz"); while(1) { /***********************按键模式某些控制*********************/ if(SW4==0) //设定速度加 { xiao++; if(xiao>100) {xiao=0; vs++; if(vs>100) { vs=100; } }} if(SW3==0) //设定速度减 {xiao++; if(xiao>100) {xiao=0; vs--; if(vs<8) { vs=8; } }} if(SW2==0) //开关键 {delay_nms(100); { if(SW2==0) { if(mode!=0) mode=0; else mode=1; } } delay_nms(150);} if(SW1==0) //正反转 {delay_nms(100); { if(SW1==0) { if(mode==2) { mode=1; } else { mode=2;} } } delay_nms(150);} /***********************按键模式某些控制*********************/ /***********************电机运行模式选择*********************/ switch(mode) { case0x00: //关闭电机 PWM=OFF; break; case0x01: //正转 IN1=0; //p36紫线 IN2=1; //p34红线 PWM=1; //p35黄线(控制速度) control_speed(s); PWM=0; //p35黄线 control_speed(100-s); break;case0x02: //反转 IN1=1; //p36紫线 IN2=0; //p34红线 PWM=1; //p35黄线 control_speed(s); PWM=0; //p35黄线 control_speed(100-s); break; default:break; } /***********************电机运行模式选择*********************/ /***********************速度计算显示*********************/ if(display==1) { display=0; //一秒钟显示一次 dispbuff[3]=(v/100); dispbuff[2]=(v/10%10);// dispbuff[1]=(v%10); // LCD_write_char(1,0x02,(dispbuff[3])+48);// LCD_write_char(1,0x03,(dispbuff[2])+48); LCD_write_char(1,0x04,(dispbuff[1])+48); LCD_write_char(0,0x0a,(vs/100)+48); LCD_write_char(0,0x0b,(vs/10)%10+48); LCD_write_char(0,0x0c,(vs%10)+48); switch(mode) { case0x00: //关闭电机 LCD_disp_string(1,0x07,"----stop"); break; case0x01: //正转 LCD_disp_string(1,0x07,"--->work"); break;case0x02: //反转 LCD_disp_string(1,0x07,"<---work"); break; default:break; } /***********************速度计算显示*********************/ /***********************速度自动调整(每一秒调整一次)*********************/ if(v>(vs+Y*2)) //速度过大,迅速调整 { s=s-3; if(s<8) { s=8;} } if((v-Y)>=vs>=(v-Y*2)) //速度过大,慢速调整。 { s=s-1; // delay_nms(1); if(s<8) { s=8;} } if(vs>(v+Y*2)) //速度过大,迅速调整 { s=s+3; if(s>95) { s=95;} } if((vs-Y)>=v>=(vs-Y*2)) //速度过大,慢速调整。 { s=s+1; // delay_nms(1); if(s>95) { s=95;} } else s=s; /***********************速
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某铝业厂生产环境管理准则
- 沈宝环:学术生涯、著述成就与多元贡献探究
- 汽车钢板冲压成形表面损伤:规律剖析与精准控制策略研究
- 汽车电子通信诊断系统的设计与实现:原理、架构与应用
- 商品房预约买卖协议
- 地热能热泵运维技师考试试卷及答案
- 宠物零食配方研发工程师考试试卷及答案
- 城市地下综合管廊运维技师考试试卷及答案
- 2025年循环经济政策考试真题及答案
- 2025年节能产品认证考试真题及答案
- 农村小学数学课堂教学中提升学生数学思维能力的研究 结题报告
- 基于PLC和MCGS组态农田智能灌溉系统设计
- 质量月活动计划及方案质量月活动策划
- 公路大修工程建设项目可行性研究报告
- (国标)挡土墙检验批质量验收记录2
- 多恩布什《宏观经济学》讲义 第3章 增长与积累
- GB/T 16769-2008金属切削机床噪声声压级测量方法
- 陈阅增普通生物学课件第7章植物的形态与结构
- 无机非金属热工设备复习资料
- 七下数学相交线与平行线难题及答案
- 绞吸挖泥船基础教案课件
评论
0/150
提交评论