51单片机控制步进电机的转动,加减速,停止,反转
51单片机步进电机正反转停止实验[1]
![51单片机步进电机正反转停止实验[1]](https://img.taocdn.com/s3/m/7536206ea45177232f60a221.png)
51单片机步进电机正反转停止实验 - C51源代码#include <reg51.h> //51芯片管脚定义头文件#include <intrins.h> //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned intuchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码sbit K1 = P3^2; //正转sbit K2 = P3^3; //反转sbit K3 = P3^4; //停止sbit BEEP = P3^6; //蜂鸣器/********************************************************//*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms/*/********************************************************/void delay(uint t){uint k;while(t--){for(k=0; k<125; k++){ }}}/**********************************************************/void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/**********************************************************/void beep(){uchar i;for (i=0;i<100;i++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器}/********************************************************//*/*步进电机正转/*/********************************************************/ void motor_ffw(){uchar i;uint j;for (j=0; j<8; j++) //转1*n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = FFW[i]; //取数据delay(2); //调节转速}}}/********************************************************/ /*/*步进电机反转/*/********************************************************/ void motor_rev(){uchar i;uint j;for (j=0; j<8; j++) //转1×n圈{if(K3==0){break;} //退出此循环程序for (i=0; i<8; i++) //一个周期转45度{P1 = REV[i]; //取数据delay(2); //调节转速}}}/******************************************************** ** 主程序**********************************************************/ main(){uchar r,N=64; //N 步进电机运转圈数while(1){if(K1==0){beep();for(r=0;r<N;r++){motor_ffw(); //电机正转if(K3==0){beep();break;} //退出此循环程序}}else if(K2==0){beep();for(r=0;r<N;r++){motor_rev(); //电机反转if(K3==0){beep();break;} //退出此循环程序}}elseP1 = 0xf0;}}/********************************************************/按实验板上的K1按键步进电机正转按实验板上的K2按键步进电机反转按实验板上的K3按键步进电机停止。
基于51系列单片机控制步进电机调速闭环系统设计

摘要:步进电动机是一种将脉冲信号变换成相应的角位移(或线位移)的电磁装置,是一种特殊的电动机。
由于其精确性以及其良好的性能在实际当中得到了广泛的应用。
本文介绍了以51系列单片机AT89S52为控制核心所设计的步进电机(型号42BY G016)控制系统,从系统的硬件电路以及软件的设计方面实现了对步进电机的控制。
并且由传感器E E-EX672采集转速数据进而进行关于速度的闭环控制,经过实际应用电路证明,该仿真控制系统的随动性能好,抗干扰能力强,稳定性好。
关键词:单片机、步进电机、光电开关、PID算法、闭环控制一、步进电机1.1 步进电机的工作原理步进电机是将电脉冲信号转变为角位移或线位移的执行机构。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点,使得在速度、位置等控制领域用步进电机来控制变的非常的简单。
1.2 步进电机的特点本实验所用的步进电机为感应子式步进电机(型号为42B YG016)。
感应子式步进电机与传统的反应式步进电机相比,结构上转子加有永磁体,以提供软磁材料的工作点,而定子激磁只需提供变化的磁场而不必提供磁材料工作点的耗能,因此该电机效率高,电流小,发热低。
因永磁体的存在,该电机具有较强的反电势,其自身阻尼作用比较好,使其在运转过程中比较平稳、噪音低、低频振动小。
感应子式步进电机某种程度上可以看作是低速同步电机。
一个四相电机可以作四相运行,也可以作二相运行。
(必须采用双极电压驱动),而反应式电机则不能如此。
例如:四相八拍运行(A-AB-B-BC-C-CD-D-DA-A)完全可以采用二相八拍运行方式.不难发现其条件为C=,D=. 一个二相电机的内部绕组与四相电机完全一致,小功率电机一般直接接为二相,而功率大一点的电机,为了方便使用,灵活改变电机的动态特点,往往将其外部接线为八根引线(四相),这样使用时,既可以作四相电机使用,可以作二相电机绕组串联或并联使用。
51单片机步进电机正反转调速1602显示

51单片机步进电机正反转调速1602显示51单片机步进电机正反转调速1602显示 - C51源代码#include //51芯片管脚定义头文件#include //内部包含延时函数 _nop_();#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};sbit K1 = P3^2; //运行与停止sbit K2 = P3^3; //设定圈数sbit K3 = P3^4; //方向转换sbit K4 = P3^5; //速率调整sbit BEEP = P3^6; //蜂鸣器sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;bit on_off=0; //运行与停止标志bit direction=1; //方向标志bit rate_dr=1; //速率标志bit snum_dr=1; //圈数标志uchar code cdis1[ ] = {" STEPPING MOTOR "};uchar code cdis2[ ] = {"CONTROL PROCESS"};uchar code cdis3[ ] = {" STOP "};uchar code cdis4[ ] = {"NUM: RATE: "};uchar code cdis5[ ] = {" RUNNING "};uchar m,v=0,q=0;uint number=0,number1=0;uchar snum=10,snum1=10; //预设定圈数uchar rate=2; //预设定速率uchar data_temp,data_temP1,data_temp2;/********************************************************/ /*/* 延时t毫秒/* 11.0592MHz时钟,延时约1ms /*/********************************************************/ void delay(uint t){uchar k;while(t--){for(k=0; k<125; k++){ }}}/********************************************************/ void delayB(uchar x) //x*0.14MS{uchar i;while(x--){for (i=0; i<13; i++){ }}}/********************************************************/ void beep(){uchar j;for (j=0;j<100;j++){delayB(4);BEEP=!BEEP; //BEEP取反}BEEP=1; //关闭蜂鸣器delay(170);}/********************************************************/ /* /*检查LCD忙状态/*lcd_busy为1时,忙,等待。
基于51单片机的步进电机正反转可控设计与仿真

2020.19设计研发基于51单片机的步进电机正反转可控设计与仿真李建中(江苏省海门中等专业学校,江苏南通,226100)摘要:步进电机是伺服控制中的关键部件,对步进电机进行精确高效地控制,是实现精密运动、制造等的重要手段。
釆用51单片机作为电机的控制核心-ULN2003A作为电机的驱动芯片,选用额定电压为5V的小型步进电机,设置正转、反转、停止、加速、减速5个按钮,其中正转、反转和停止均有对应的LED指示灯。
通过Keil进行控制程序的编写,在Proteus 中进行仿真电路的连接,结果表明:电路设计正确;步进电机能够根据按钮指令进行运转,达到了设计预期;系统可应用于某些需要高精度控制的场合。
关键词:步进电机;51单片机;ULN2003A;Keil;ProteusDesign and Simulation of Positive and Negative Rotation ofStepping Motor Based on51Single Chip MicrocomputerLi Jianzhong(Jiangsu Province Haimen Secondary Vocational School,Narrtong Jiangsu,226100)Abst r act;St epper motor is the key compone n t in servo cont r ol.It is an import a n t means to realize precise motion and manufacture to control stepping motor accurately and efficiently.51single chip microcomputer is used as the cont r ol core of the mot o r,uln2003a is used as the driving chip of the motor,the small st e pping motor with:r ated volt a ge of5V is selec t ed,and five buttons of forward rotation,reverse rotation,stop,acceleration and deceleration are set,and the corresponding LED indicator lights are used for forward rotation,reverse rotation and stop.The resuIts show that:the circuit design is correct;the stepper motor can operate according to the button command,which meets the design expectation;the system can be applied to some occasions requiring high-precision control.Keywords:stepper motor;51single chip microcomputer;ULN2003A;Keil;Proteus0引言步进电机在工业制造、数控机床、各种伺服系统中均有应用。
基于51单片机的步进电机控制-设计报告(说明书)及源程序

步数
Q1
Q2
Q3
Q4
1
1
0
1
0
2
1
0
0
1
3
0
1
0
1
4
0
1
1
0
5
1
0
1
0
表1
二
2.
该系统中只运用到三个控制按钮,即 “正反”,“换挡”,“启停”,由于按钮较少,所以采用独立键电路,这种按键电路的按键结构相对行列式按键电路更简单,更使人易懂。
单片机的晶振为12MHZ;
(3)、系统电路图:
南京XX大学
指导老师:张X
课 程 设 计
基于51单片机的步进电机控制
机械电子工程学院
测控技术与仪器
XXXXX
Xxx
2012年1年4日
步进电机控制系统
[摘要]本课程设计的内容是利用51单片机,达到控制步进电机的启动、停止、正转、反转、两档速度和状态显示的目的,使步进电机控制更加灵活。步进电机驱动芯片采用ULN2803,ULN2803具有大电流、高电压,外电路简单等优点。利用四位数码管增设电机状态显示功能,各项数据更直观。实测结果表明,该控制系统达到了设计的要求。
2.
如图2.31,采用LED数码管动态显示数据与个项参数,方法简单,容易控制,成本低。
设计如下图
图2.31
2.4驱动电路设计
驱动电路可分为:三极管直接驱动(图3),采用斩波恒流驱动方式(图2.41)和芯片驱动电路等。驱动电路的性能直接关系到步进电机走步的准确与稳定。本电路采用驱动芯片ULN2803。ULN2803是一种大电流高电压型器件,外电路简单(图2.42)。
51单片机按键控制步进电机加减速及正反转

51单片机按键控制步进电机加减速及正反转之前尝试用单片机控制42步进电机正反转,电机连接导轨实现滑台前进后退,在这里分享一下测试程序及接线图,程序部分参考网上找到的,已经实际测试过,可以实现控制功能。
所用硬件:步进电机及驱动器、STC89C52单片机、直流电源1、硬件连接图•注意:上图为共阳极接法,实际连接参考总体线路连接。
•驱动器信号端定义:PUL+:脉冲信号输入正。
( CP+ )PUL-:脉冲信号输入负。
( CP- )DIR+:电机正、反转控制正。
DIR-:电机正、反转控制负。
EN+:电机脱机控制正。
EN-:电机脱机控制负。
•电机绕组连接A+:连接电机绕组A+相。
A-:连接电机绕组A-相。
B+:连接电机绕组B+相。
B-:连接电机绕组B-相。
•电源连接VCC:电源正端“+”GND:电源负端“-”注意:DC直流范围:9-32V。
不可以超过此范围,否则会无法正常工作甚至损坏驱动器.•总体线路连接输入信号共有三路,它们是:①步进脉冲信号PUL+,PUL-;②方向电平信号DIR+,DIR-③脱机信号EN+,EN-。
输入信号接口有两种接法,可根据需要采用共阳极接法或共阴极接法。
在这里我采用的是共阴极接法:分别将PUL-,DIR-,EN-连接到控制系统的地端(接入单片机地端);脉冲输入信号通过PUL+接入单片机(代码中给的P2^6脚),方向信号通过DIR+接入单片机(代码中给的P2^4脚),使能信号通过EN+接入(不接也可,代码中未接,置空)。
按键连接见代码,分别用5个按键控制电机启动、反转、加速、减速、正反转。
注意:接线时请断开电源,电机接线需注意不要错相,相内相间短路,以免损坏驱动器。
2、代码1.#include<reg51.h>2.#define MotorTabNum 53.unsigned char T0_NUM;4.sbit K1 = P3^5; // 启动5.sbit K2 = P3^4; // 反转6.sbit K3 = P3^3; // 加速7.sbit K4 = P3^2; // 减速8.sbit K5 = P3^1; //正反转9.10.sbit FX = P2^4; // 方向11.//sbit MotorEn = P2^5; // 使能12.sbit CLK = P2^6; // 脉冲13.14.inttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};15.16.unsigned char g_MotorSt = 0; //17.unsigned char g_MotorDir = 0; //18.unsigned char MotorTab[7] = {12, 10, 8, 6, 4, 2,1};19.20.signed char g_MotorNum = 0;21.22.void delayms(xms);23.void mDelay(unsigned int DelayTime);24.void T0_Init();25.26.void KeyScan(void);27.28.29.30.void main(void)31.{32.T0_Init();33.// MotorEn = 0; //34.FX = 0;35.while(1)36.{37.KeyScan(); //38.}39.40.41.}42.43.void T0_Init()44.{45.TMOD = 0x01;46.TH0 = (65535-100)/256; // 1ms47.TL0 = (65535-100)%256;48.EA = 1;49.ET0 = 1;50.// TR0 = 1;51.52.}53.54.void T0_time() interrupt 155.{56.// TR0 = 0;57.TH0 = (65535-100)/256;58.TL0 = (65535-100)%256;59.T0_NUM++;60.if(T0_NUM >= MotorTab[g_MotorNum]) //61.{62.T0_NUM = 0;63.CLK=CLK^0x01; //64.}65.// TR0 = 1;66.}67.68.69.//--------------------------70.void KeyScan(void)71.{72.if(K1 == 0)73.{74.delayms(10);75.if(K1 == 0)76.{77.g_MotorSt = g_MotorSt ^ 0x01;78.// MotorEn ^= 1;79.TR0 = 1;80.FX ^= 0; //反转81.}82.}83.84.if(K2 == 0)85.{86.delayms(10); //正转87.if(K2 == 0)88.{89.g_MotorDir = g_MotorDir ^ 0x01;90.FX ^= 1; //加速91.}92.}93.94.if(K3 == 0) //95.{96.delayms(5); //加速97.if(K3 == 0)98.{99.g_MotorNum++;100.if(g_MotorNum > MotorTabNum) 101.g_MotorNum = MotorTabNum; 102.}103.}105.if(K4 == 0) //106.{107.delayms(5); // 减速108.if(K4 == 0)109.{110.g_MotorNum--;111.if(g_MotorNum < 0)112.g_MotorNum = 0;113.}114.}115.116.if(K5 == 0) //117.{118.delayms(10); // 正反转119.if(K5 == 0)120.{121.g_MotorSt = g_MotorSt ^ 0x01; 122.g_MotorDir = g_MotorDir ^ 0x01; 123.MotorEn ^= 1;124.TR0 = 1;125.while(1)126.{127.FX ^= 1; //128.delayms(90000);129.FX ^= 0; //130.delayms(90000);131.}132.}133.}135.136.void delayms(xms)//延时137.{138.unsigned int x,y;139.for(x=xms;x>0;x--)140.for(y=110;y>0;y--);141.}3、常见问题解答•控制信号高于5v一定要串联电阻,否则可能会烧坏驱动器控制接口电路。
基于51单片机的步进电机调速系统(含完整代码)

课程设计报告设计题目:遥控小车——基于51单片机的步进电机调速系统学院:专业:班级:学号:姓名:电子邮件:时间:成绩:指导教师:华南农业大学理学院应用物理系课程设计(报告)任务书学生姓名指导教师职称学生学号专业电子信息科学与技术题目基于51单片机的步进电机调速系统(遥控小车)任务与要求1. 设计并制作电路,利用单片计控制步进电机运转。
2. 通过键盘可以不间断地设定改变电机的转速、转向。
3. 利用显示器实时显示转速等参数。
4. 扩展功能:可设定转动步数。
开始日期2014 年3 月完成日期2014 年3 月1引言步进电机是一种将电脉冲转化为角位移的执行机构。
目前,步进机已经广泛应用于领域,例如工业生产中的机械臂的控制,照明装置和监控摄像机转动等。
步进机在装置转动、精确位移方面有很重大的作用。
本系统是基于STC89C51 单片机的遥控小车。
采用STC89C51单片机作为控制核心,通过ULN2003A驱动步进机(28BYJ-48)转动,由按键和显示屏1602组成人机交互模块,同时通过315M无线发射和接收模块向单片机输入控制信号,将整个系统固定于简易小车上,最终实现小车测试和远程遥控功能。
基本达到预定的设计要求以及功能的扩展。
2系统的设计与理论分析2.1系统总体设计2.2理论分析本设计分为两种工作模式:测试模式、遥控模式。
在电路板上有一个带锁的开关进行设置。
测试模式工作时,通过控制小车上的按键进行加速、减速、反转、设置、步数增、步数减等按键,单片机扫描按键,通过软件控制液晶模块显示对应的转速、设置的速度和步数,同时控制步进机模块进行相应的转动。
步进机的是由ULN2003A达林顿管驱动,由单片机控制输入脉冲的频率来控制步进机的转速,单片机是通过程序查表对4个I/O口输出脉冲,本次设计采用的是两相四线减速步进机,步进角为5.625°,减速比为64:1,程序采用的是8拍查表,具有较好的扭矩。
遥控模式工作时,遥控部分五个按键分别输入前、后、左、右、暂停,单片机扫描按键,通过无线发射模块发射串行编码,小车的无线接收模块接收对应的编码,送至单片机进行解码,从而控制液晶模块的显示和步进机模块的工作,进而完成功能。
51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)

51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)自己写的,不规范还望包含,keil和protues文件单片机源程序如下:1.#include <reg52.h>2.3.#define uchar unsigned char4.#define uint unsigned int5.uint speed = 100; //初始转速6.uint max = 200; //最慢转速7.uint min = 20; //最快转速8.9.sbit swich = P2^0; //总开关10.sbit dir = P2^1; //电机旋转方向11.sbit le1=P2^6;12.sbit le2=P2^7;13.sbit speedadd=P3^2;14.sbit speedsub=P3^3;15.16.unsigned char uca_MotorStep[]={0x01,0x03,0x02,0x06, 0x04,0x0C,0x08,0x09}; //励磁电流数组。
17.18.19.uchar leddata[]={20.21.0x3F, //"0"22.0x06, //"1"23.0x5B, //"2"24.0x4F, //"3"25.0x66, //"4"26.0x6D, //"5"27.0x7D, //"6"28.0x07, //"7"29.0x7F, //"8"30.0x6F, //"9"31.0x40, //"-"32.0x00, //熄灭33.};34.35.36.void delay1ms(void) //误差 0us37.{38.unsigned char a,b,c;39.for(c=1;c>0;c--)40.for(b=142;b>0;b--)41.for(a=2;a>0;a--);42.}43.44.void delay(uint x ) //多功能毫秒延时45.{46.uint i;47.for(i=0;i<x;i++)48.{49.delay1ms();50.}51.}52.53.54.55.void display(void)56.{57.if(swich==1)58.{59.P0= leddata[11];60.delay(1);61.le2=1;62.le1=1;63.delay(1);64.le2=0;65.le1=0;66.67.}68.else69.{70.if(dir==1)71.{72.P0= leddata[11];73.delay(1);74.le2=1;75.delay(1);76.le2=0;77.}78.else79.{80.P0 =leddata[10];81.delay(1);82.le2=1;83.delay(1);84.le2=0;85.}86.87.P0=leddata[9-(speed-20)/20];88.delay(30);89.le1=1;90.delay(5);91.le1=0;92.93.}94.}95.96.97.void Init_INT0()98.{99.EX0=1; //开启外部中断 0100.IT0=1; //设置成低电平触发,1为下降沿触发101.EX1=1; //开启外部中断 1102.IT1=1; //设置成低电平触发,1为下降沿触发103.EA=1; //开启总中断104.}105.106.void Interrupt0_handler() interrupt 0107.{108.EA=0; //首先关闭总中断,以消除按键出现的抖动所产生的干扰109.delay(20); //同样是为了消除抖动而产生新的中断110.if(speed>min)111.{speed=speed-20;} //限制最快转速112.else113.{speed=min;}114.while(speedadd==0);115.EA=1; //恢复中断116.}117.118.119.void Interrupt1_handler() interrupt 2120.{121.EA=0; //首先关闭总中断,以消除按键出现的抖动所产生的干扰122.delay(20); //同样是为了消除抖动而产生新的中断123.if(speed<max)124.{speed=speed+20;}125.else126.{speed=max;} //限制最慢转速127.while(speedsub==0);128.EA=1; //恢复中断130.131.void main()132.{133.int i; //初始化134.dir=1;135.le1=0;136.le2=0;137.138.139.start:140.if(swich==0)141.{Init_INT0();} //总开关开启,初始化中断,开始转动142.else143.{display(); goto start; }144.145.146.if(dir==1)147.seq:148.{149.while(1)150.{151.display();152.for (i=0; i<8; i++)153.{154.P1 = uca_MotorStep[i]; //取数据155.delay(speed); //调节转速156.}157.if(dir==0) //是否换向159.delay(5); // 换向延时160.goto oppo; //换向161.}162.if(swich==1) //总开关运行中关闭163.goto start; //等待开启164.165.}166.167.}168.else169.oppo:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <reg52.h>
sbit inc=P3^2;
sbit dec=P3^3;
sbit zhzhd=P3^6;
sbit fazhd=P3^7;
bit flag=1;
unsigned char t=0x00; //表正反速度
void delay(unsigned int t);
void motor_ffw();
unsigned char code led7code[]=
{0x81,0xe7,0x92,0xc2,0xe4,0xc8,0x88,0xe3,0x00,0xc0};
unsigned int num=0;
unsigned char code FFW[8]={0x40,0x60,0x20,0x30,0x10,0x18,0x08,0x48}; unsigned char code FFZ[8]={0x48,0x08,0x18,0x10,0x30,0x20,0x60,0x40}; //反转
void main()
{
EA=1;
IT0=1;
EX0=1;
IT1=1;
EX1=1;
TMOD=0x06;
TL0=0xff;
TH0=0xff;
TR0=1;
ET0=1;
P3=0x3f;
P0=led7code[num%10];
while(1)
{
motor_ffw();
}
}
void motor_ffw() /* 步进电机驱动*/ //
{
unsigned char i;
int j;
while(1)
{
for(j=0;j<12;j++) //12个周期转一圈
{ for (i=0; i<8; i++) //一个周期转30度
{
if(flag==1)
P2 = FFW[i]; //取数据
else
P2 = FFZ[i];
delay(t); //t调节转速
}
}
}
}
void int0(void) interrupt 0
{
EX0=0;
delay(10);
if(inc==0)
{
num++;
P0=led7code[num%10];
if(num%10!=0&&flag){zhzhd=0;fazhd=1;}
else if (num%10==0){zhzhd=0;fazhd=0;}
else {zhzhd=1;fazhd=0;}
switch(num%10)
{
case 0:t=0x00;break;
case 1:t=0x12;break;
case 2:t=0x11;break;
case 3:t=0x10;break;
case 4:t=0x09;break;
case 5:t=0x08;break;
case 6:t=0x07;break;
case 7:t=0x06;break;
case 8:t=0x05;break;
case 9:t=0x04;break;
}
}
while(!inc);
EX0=1;
}
void int1(void) interrupt 2
{
EX1=0;
delay(10);
if(dec==0)
{
num--;
if(num==65535)num=65529;
P0=led7code[num%10];
if(num%10!=0&&flag){zhzhd=0;fazhd=1;}
else if (num%10==0){zhzhd=0;fazhd=0;}
else {zhzhd=1;fazhd=0;}
if(num==65535)num=65529;
switch(num%10)
{
case 0:t=0x00;break;
case 1:t=0x12;break;
case 2:t=0x11;break;
case 3:t=0x10;break;
case 4:t=0x09;break;
case 5:t=0x08;break;
case 6:t=0x07;break;
case 7:t=0x06;break;
case 8:t=0x05;break;
case 9:t=0x04;break;
}
}
while(!dec);
EX1=1;
}
void huanx(void) interrupt 1
{
ET0=0;
TR0=0;
delay(10);
if(P3^4==0)
{
if(flag==1) {flag = 0;zhzhd=1;delay(500);fazhd=0;} else {flag = 1;fazhd=1;delay(500);zhzhd=0;}
}
while(!(P3^4));
ET0=1;
TR0=1;
}
// 延时程序
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<80; k++);
}
}。