www.pudn.com > stepper_motor_controller.rar > contol_interrupt.c
//*************************************************** // Created by sheriflee // Edited by Jihengzhang // Created time: Jun 24th,2004 //************************************************** #include#include //*** 主程序 ** main() { for (tmr=0;tmr<0x2000;tmr++); //上电延时 send_byte(CMD_RESET); //复位HD7279A //****************************************** // initialize cpu //****************************************** // SCON = 0x52; //SCON 串行口设置 // TMOD = 0x20; //* TMOD 时钟模式设置 IE = 0x81; //允许外部中断int0 TCON = 0x01; //* TCON 定时器控制 int0边沿触发 //****************************************** // initialize L279 //****************************************** en=0; // 禁止电机动作 rst=0; // 复位 cw=0; // 正转 v_ref=1; // 参考电压为5V half=0; // 半步 ctrl=1; // 相位调脉宽 clk=1; // 准备发脉冲 //****************************************** // 测试 //****************************************** send_byte(CMD_TEST); //发送测试指令 delay10ms(50); send_byte(CMD_RESET); //清除显示 //********************************************** // 闪烁等待键盘输入 // //********************************************** wait_cnter=0; key_number=0xff; keyin_data[0]=0x0f; keyin_data[1]=0x0f; keyin_data[2]=0x0f; angle =0; write7279(BLINKCTL,0xf8); //第1、2、3 位设置为闪烁显示 write7279(UNDECODE,0X08); //在第1位显示下划线'_' write7279(UNDECODE+1,0x08); //在第2位显示下划线'_' write7279(UNDECODE+2,0x08); //在第3位显示下划线'_' do{ //*********************************************** //接收键盘数据 //*************************************** // if (keyin_cnter>2) // keyin_cnter =0x00; led0_show( &angle); } while (1); } //*********** The end of main function ************ //********************************************** // interrupt0 service function //********************************************** void int0_serv( void ) interrupt 0 { write7279(BLINKCTL,0xff); //第1、2、3 位设置为闪烁显示 key_number=read7279(CMD_READ); //读出按键 switch(key_number){ case KEY_1: data_shift(keyin_data,3); keyin_data[0]=0x01; // keyin_cnter++; break; case KEY_2: data_shift(keyin_data,3); keyin_data[0]=0x02; // keyin_cnter++; break; case KEY_3: data_shift(keyin_data,3); keyin_data[0]=0x03; // keyin_cnter++; break; case KEY_4: data_shift(keyin_data,3); keyin_data[0]=0x04; // keyin_cnter++; break; case KEY_5: data_shift(keyin_data,3); keyin_data[0]=0x05; // keyin_cnter++; break; case KEY_6: data_shift(keyin_data,3); keyin_data[0]=0x06; // keyin_cnter++; break; case KEY_7: data_shift(keyin_data,3); keyin_data[0]=0x07; // keyin_cnter++; break; case KEY_8: data_shift(keyin_data,3); keyin_data[0]=0x08; // keyin_cnter++; break; case KEY_9: data_shift(keyin_data,3); keyin_data[0]=0x09; // keyin_cnter++; break; case KEY_0: data_shift(keyin_data,3); keyin_data[0]=0x00; //输入零 // keyin_cnter++; break; case KEY_C: //输入值正负切换 flag_sign=!flag_sign; break; case KEY_D: //急停 write7279(BLINKCTL,0xff); //闪烁显示 break; case KEY_E: //清除输入值 { keyin_data[0]=0x0f; keyin_data[1]=0x0f; keyin_data[2]=0x0f; keyin_cnter =0x00; } break; case KEY_F: write7279(BLINKCTL,0xf8); //闪烁显示 if (keyin_data[0]>9) keyin_angle=0; else if (keyin_data[1]>9) keyin_angle = keyin_data[0]; else if (keyin_data[2]>9) keyin_angle = keyin_data[1]*10+keyin_data[0]; else keyin_angle = keyin_data[2]*100+keyin_data[1]*10+keyin_data[0]; angle=keyin_angle; break;} led1_show( ); //调用显示函数 } void write7279(unsigned char cmd, unsigned char dta){ send_byte (cmd); send_byte (dta); } unsigned char read7279(unsigned char command){ send_byte(command); return(receive_byte()); } //*********************************************** void send_byte( unsigned char out_byte){ unsigned char i; cs=0; long_delay(); for (i=0;i<8;i++){ if (out_byte&0x80) dat=1; else dat=0; clk=1; short_delay(); clk=0; short_delay(); out_byte=out_byte*2; } dat=0; } //************************************************* unsigned char receive_byte(void){ unsigned char i, in_byte; dat=1; // long_delay(); for (i=0;i<8;i++){ clk=1; short_delay(); in_byte=in_byte*2; if (dat) in_byte=in_byte|0x01; clk=0; short_delay(); } dat=0; return (in_byte); } //************************************************** void led0_show(int *p ){ unsigned char i,j,k; i= *p /100; j= (*p - i*100)/10; k=*p - (i*100)-(j*10); write7279(DECODE0+6,i); write7279(DECODE0+5,j); write7279(DECODE0+4,k); } //************************************************** //************************************************** void led1_show(void){ unsigned char i; if (flag_sign) write7279(UNDECODE+3,0x01); else write7279(UNDECODE+3,0x00); for(i=0;i<3;i++) write7279(DECODE0+i,keyin_data[i]); } //************************************************** //************************************************** void long_delay(void){ unsigned char i; for (i=0;i<0x30;i++); } void short_delay(void){ unsigned char i; for (i=0;i<8;i++); } // ********************* n*10ms ********************** void delay10ms(unsigned char time){ unsigned char i; unsigned int j; for (i=0;i