4.3.2步进电机仿真电路
图4-6 步进电机转动电路
4.3.3步进电机转动程序:
#include
char excite[]={0x08,0x01,0x02,0x04}; //1相驱动激励数组 //char excite[]={0x03,0x06,0x0c,0x09}; //2相驱动激励数组 unsigned char times=10; unsigned char count=10; #define TH_M1 (65536-500)/256 #define TL_M1 (65536-500)%6 unsigned char i=0; main() { OUTPUT=0; TMOD=0x10;
27
IE=0x88; TH1=TH_M1; TR1=1; TL1=TL_M1; while(1); }
void time1(void) interrupt 3 { TH1=TH_M1; TL1=TL_M1; if(--count==0) {OUTPUT=excite[i]; i=(i<4)? i+1:0; count=times;} }
28
4.4总体程序设计
4.4.1总体设计流程图
开始 键盘扫描 计算按键值 删除按键值 火力选择 启动 电机运转 按键值减一 按键值等于0 结束 图4-7 总体设计流程图
29
4.4.2总体设计仿真电路
图4-8 总体设计仿真电路
4.4.3总体设计程序:
#include
char TAB[10]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9}; char disp[4]={0x8f,0x4f,0x2f,0x1f}; //数码管控制显示
char excite[]={0x08,0x01,0x02,0x04}; //步进电机1相驱动激励数组 //char excite[]={0x03,0x06,0x0c,0x09}; //2相驱动激励数组
unsigned char times=10; //声明电机重复数(即电机的快慢) unsigned char count=10; //声明电机重复变量 char dig[4]; char c1=5; //蜂鸣器第5秒、3秒、1秒的时候发声 char c2=4;
char qid=0; //启动的判断
char a1=0,a2=1,a3=0; //火力大中小的判断 int digit=0; //按键输入的初始数值
30
sbit da=P3^0; //声明火力大小的按键 sbit zhong=P3^1; sbit xiao=P3^2;
sbit qidong=P3^3; //声明启动按键
sbit chs=P3^4; //声明重新输入数值 sbit hli1=P0^5; //声明火力的输出端 sbit hli2=P0^6; sbit hli3=P0^7; sbit buzzer=P0^4; //蜂鸣器接口
void debouncer(void); //声明防抖动函数 void scanner(void); //声明扫描函数 void huoli(void); //火力大小函数
#define rowkey() (~P1)&0x0f //读入p1低四位(列按键值)宏 #define OUTPUT P0 //步进电机输出端低四位 #define TH0_M0 (65536-20000)/256 #define TL0_M0 (65536-20000)%6 #define TH1_M1 (65536-500)/256 #define TL1_M1 (65536-500)%6
main()
{ IE=0x8a; ET0=1; ET1=1;
TMOD=0X11; //定时器0和1,模式1 TH1=TH1_M1;TL1=TL1_M1; TH0=TH0_M0;TL0=TH0_M0;
TR1=1; //开启定时器1 P3=0xff; P0=0xe0;
while(qid==0) //键盘扫描 scanner();
while(qid==1) //启动 { TR0=1; huoli();
if(a1==1) //启动加热 {hli1=0;hli2=1;hli3=1;} if(a2==1)
{hli1=1;hli2=0;hli3=1;} if(a3==1)
{hli1=1;hli2=1;hli3=0;} if(digit==c1)
{buzzer=1; //蜂鸣器每次发声1s c1=c1-2;}
31