内容发布更新时间 : 2024/12/23 12:53:21星期一 下面是文章的全部内容请认真阅读。
开始定时器中断允许定时器0工作方式2载入定时器初值定时器0和定时器1开启载入默认工作参数各个端口初始化 图4.2 系统初始化流程图
按键子程序:
1、延时子程序:在本延时子程序当中每调用一次延时子程序延时时间是1毫秒。
2、按键响应子函数:在本设计当中按键的一端接地,另一端接单片机的对应端口,所以当按键按下,既是将单片机对应端口电平拉低。所以在编程的时候判断按键按下是低电平有效。图4.3画出的是电机增速和减速的子程序框图。
21
程序入口程序入口判断增速按键按下YN判断减速按键按下YN去抖动去抖动再次判断YYN再次判断YYN判断是否是最高速N判断是否是最低速N速度档位加1结束速度档位减1结束
图4.3 增速减速子程序
C语言程序如下: #include
uchar code ccw[]={0x08,0x04,0x02,0x01}; //逆时针旋转相序 //uchar code cw[]={0x01,0x02,0x04,0x08}; //顺时针旋转相序 //uchar code speed[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d}; //uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管显示表
uchar code table_anode[]={ //共阳极0~f数码管编码
22
0xc0,0xf9,0xa4,0xb0,//0~3 0x99,0x92,0x82,0xf8,//4~7 0x80,0x90,0x88,0x83,//8~b 0xc6,0xa1,0x86,0x8e //c~f };
uchar code ccw8[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //8拍旋转相序表
uint time,show1,show2,sym,temp,t,a,flag,i,j,rpm,n; sbit inc=P3^2;//加速 sbit dec=P3^3;//减速 sbit keyccw=P3^4;//逆时针转 sbit keycw=P3^5;//顺时针转 sbit pause=P3^6;//暂停 sbit fir=P2^0;//第一数码管 sbit sec=P2^1;//第二数码管
void init();//初始化定时器0,1,串口 void direc();//按键控制转向 void speedctl();//按键控制转速 void display();//速度显示函数 void delaynms(uint aa);//1ms延时函数
void main() {
init(); while(1) {
speedctl( ); direc(); display();
23
}
void wind_init() { }
TMOD=0X21;//定时器1为方式2,定时器0为方
式1 }
void speedctl() { 速
TH1=0xFD; TL1=0xFD;
TH0=(65536-1000)/256;//1毫秒定时中断TL0=(65536-1000)%6; TR1=1;//启动定时器1 EA=1;//打开总中断 ET0=1;//允许定时器0中断 TR0=1;//启动定时器0
if(inc==0) { n++; if(n==11)
n=10;
while(!inc)
display();
time=0; }
else if(dec==0) { n--;
24
//加
//减速
if(n==0)
n=1;
while(!dec)
display();
time=0; } switch(n) { case 1:
t=937;
面转一圈937ms,基准速度一分钟一圈 rpm=1;
break;
case 2: t=312; rpm=3;
break;
case 3: t=187; rpm=5;
break;
case 4: t=133; rpm=7;
break;
case 5: t=104; rpm=9;
break;
case 6:
25
//60/64转速一分钟一圈 里