电力拖动课程设计 - 图文 下载本文

浙江理工大学拖动系统课程设计

7.3 程序

#include #include

#define uchar unsigned char #define uint unsigned int

#define LCD_FL 0X80 //第一行地址0x80-0xA7 #define LCD_SL 0Xc0 //第二行地址0xC0-0xE7

#define LCD_S 0X0c //开显示不显示光标光标不闪烁

#define LCD_Display_mode 0X38 //设置16x2显示 5x7点阵 8位数据接口 #define LCD_clear 0x01 //清屏指令数据指针清零所有显示清零 #define COM 0//指令

#define DATE 1 //数据

sbit PWM1=P2^0; // pwm1信号 sbit PWM2=P2^1; // pwm2信号

sbit RS=P2^4; // LCD1602 寄存器选择 sbit RW=P2^5; //1602读写选择 sbit E=P2^6; // 1602使能端

int state,direction,rank;//起停1on 0 off 方向 1正2反 档位 int key_in;//按键输入

int BG;//输出高低点评状态

uint RAND,S;int speed;//数度计算参数

int PHTH,PHTL,PLTL,PLTH;//定时器时间

void delay_1ms(int t) // 1ms大致延时 { int i,j; for(i=0;i

//----------------------------------------------------------------------------------------------lcd1062 void delay(uint a)//小延时 {

第21页

浙江理工大学拖动系统课程设计

while(a--); }

void write(uint x,uchar sth)// 命令或数据写入 {

RS=x;RW=0;E=0; P0=sth; delay(3); E=1; delay(25); E=0; }

void write_string(uint line,uchar *str) // 字符串输入 {

write(COM,line); while(1) { if(*str=='\\0') break; write(DATE,*str); str++; delay(50); } }

void lcd_init() // 初始化 { delay_1ms(15); write(COM,LCD_Display_mode); delay_1ms(5); write(COM,LCD_S); delay_1ms(5); write(COM,LCD_clear); delay_1ms(5); write_string(LCD_FL,\TE:CW OFF\//cw顺时针,正转 ccw逆时针 delay_1ms(5); write_string(LCD_SL,\ \}

//-----------------------------------------------------------------------------------------------------

第22页

浙江理工大学拖动系统课程设计

//------------------------------------------------------------------------------------------------------键盘输入 void key() {

static int key_sure=0;//避免一直按着一个键的时候一直读入 uint key_flash; key_in=-1; P1=0x0f; if((P1&0x0f)!=0x0f) { delay_1ms(1); if((P1&0x0f)!=0x0f&&key_sure==1) { key_sure=0; key_flash=P1|0xf0; P1=key_flash; switch(P1) { case 0xee: key_in=1;break;//+ case 0xed: key_in=2;break;//- case 0xde: key_in=4;break;//正转 case 0xdd: key_in=5;break;//反转 case 0xbe: key_in=7;break;//启动 case 0xbd: key_in=8;break;//停止 } } } else { key_sure=1; } } //---------------------------------------------------

//------------------------------------------- 根据档位进行占空比计算 void time_calculate() {

第23页

浙江理工大学拖动系统课程设计

PLTL=(65536-1511*(10-rank))%5; PLTH=(65536-1511*(10-rank)-PLTL)/255; PHTL=(65536-1511*rank)%5; //2000,实际周期12.6ms 1587,10.5ms PHTH=(65536-1511*rank-PHTL)/255; } //------------------------------------------------ //------------------------------------------------pwm信号产生 void pwm_on() {

BG=1;

time_calculate(); if(direction==1) { PWM1=1; PWM2=0; } else { PWM1=0; PWM2=1; } TR1=1;ET1=1; TH1=PHTH; TL1=PHTL; RAND=0;S=0; }

//-------------------------------------------------------------------

//-----------------------------------------------------电机转速计算 void speed_calculate() {

char yy[4]; S=0;speed=0; speed=(60*RAND)/(41); RAND=0; sprintf(yy,\

第24页