浙江理工大学拖动系统课程设计
7.3 程序
#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页