使用51单片机控制直流电机转动与停止,主控是STC89C52,使用ULN2003A驱动直流电机。在0到5秒时电机转动,在5到10秒时电机停止,大于10秒时电机转动。
- 秒表计时:通过定时器0实现中断服务程序,实现秒表计时。
- 电机控制:根据秒表计时的秒数,控制电机的启停。
- 数码管显示:将当前秒数通过数码管显示出来。
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit MOTOR=P1^1; // 定义P1^1用于控制电机
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u16 time;
u16 miao;
void delay(u16 i)
{
while(i--);
}
void Timer0_init()
{
TMOD=0x01; // 设置定时器0为16位定时模式
TH0=(65535-10000)/256; // 设置TH0为定时器的高位初值
TL0=(65535-10000)%256; // 设置TL0为定时器的低位初值
EA=1; // 开启全局中断
ET0=1; // 使能定时器0中断
TR0=1; // 启动定时器0
}
void Display()
{
P2=0x00; // 设置P2口为0x00,显示个位数
P0=smgduan[miao%10]; // 将数组中对应miao个位数的段码输出到P0口
delay(100);
P0=0x00;