/*************************使用定时中断来实现调节PWM调加减10个控位档********************************
功能:PWM调速、控制10个档位速度、可随时加速减速功能。
作者:韦贤
院校:广西师范大学
专业:08电子信息
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
********************************************************** ****************************************/
#include
#include "LCD1602.h"
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit KEY4 = P1^3;
sbit KEY5 = P1^4;
sbit EC=P3^0; // 小车使能接口1
sbit EB=P3^1; //使能接口2
sbit zuo1 = P2^1;
sbit zuo2 = P2^2;
sbit you1 = P2^3;
sbit you2 = P2^4;
unsigned char CYCLE; //定义周期该数字X基准定时时间如果是
10 则周期是10 x 0.1ms
unsigned char PWM_ON ;//定义高电平时间
unsigned char PWM_Num;//定义档位
#define uchar unsigned char
#define uint unsigned int
//==========宏定义P2口====================
#define DATA_PORT P0
/**********************************延时子程序*****************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/********************************************************* ***************************/
void qianjin() //前进
{
zuo1=1;
zuo2=0;
you1=1;
you2=0;
}
void houtui() //后退
{
zuo1=0;
zuo2=1;
you1=0;
you2=1;
}
void tingzhi() //停止
{
zuo1=0;
zuo2=0;
you1=0;
you2=0;
}
/********************************************************* ************************/
void dangwei(unsigned char PWM_Num) //加速档位子程序{
switch(PWM_Num){
case 0:
zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=9;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"0"); //显示字符串
break;//高电平时长
case 1: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=8;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"1"); //显示字符串
break;
case 2: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=7;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"2"); //显示字符串
break;
case 3: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=6;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"3"); //显示字符串
break;
case 4: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=5;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"4"); //显示字符串
break;
case 5: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=4;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"5"); //显示字符串
break;
case 6: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=3;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"6"); //显示字符串
break;
case 7: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=2;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"7"); //显示字符串
break;
case 8: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=1;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"8"); //显示字符串
break;
case 9: zuo1=1;
zuo2=0;
you1=1;
you2=0;
PWM_ON=0;
Displaypstr(0,0,"Speed threshold"); //显示字符串
Displaypstr(11,1,"9"); //显示字符串
break;
default:break;
}
if(PWM_Num==10)PWM_Num=0;
}
/**************************************/
/********************************/
/* 定时中断 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
EC=1; // 小车使能接口1
EB=1; //使能接口2
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
EC=0; // 小车使能接口1
EB=0; //使能接口2
}
}
/* 键位加减速主
函
关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函
数开始 */
/**************************************/
main()
{
Init_1602(); //初始化液晶
TMOD |=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时0.5mS
IE= 0x82; //打开中断
TR0=1;
CYCLE =10;// 时间可以调整这个是10步调整周期10ms 8位PWM就是256步
Displaypstr(0,0," Author:WeiXian");
Displaypstr(0,1," PWN ");
while(1)
{
if(!KEY1)//加速键
{
delay(25000);
if(!KEY1)
{
Init_1602();
PWM_Num++;
Displaypstr(4,1,"-->>"); //显示字符串
dangwei(PWM_Num);
}
}
if(!KEY2) //减速键
{
delay(25000);
if(!KEY2)
{
Init_1602();
PWM_Num--;
Displaypstr(5,1,"<<--"); //显示字符串 dangwei(PWM_Num);
}
}
if(!KEY3) // 前进键
{
delay(25000);
if(!KEY3)
{
Init_1602();
PWM_ON=0;
Displaypstr(2,0," All speed"); Displaypstr(4,1," ----up");
qianjin();
}
}
if(!KEY4) //后退键
{
delay(25000);
if(!KEY4)
{
Init_1602();
PWM_ON=0; Displaypstr(4,0," All speed"); Displaypstr(3,1," ----down");
houtui();
}
}
if(!KEY5) //停止键
{
delay(25000);
if(!KEY5)
{
Init_1602();
PWM_ON=0;
Displaypstr(4,0," speed"); Displaypstr(3,1," ----STOP"); tingzhi();
}
}
}
}