单片机最终篇之低电平有效

步进电机单片机系统设计 最终篇之外部中断

设计要求:一个正反转开关控制正转和反转, 一个速度开关控制高速和低速(高速和低速只要有明显差别),一个半圈按钮,按一下时转半圈, 一个一圈按钮, 按一下时转一圈, 一个连续转动按钮, 按一下时连续转动,再按一下时停止转动,程序要求用C语言编写。用protel画出系统原理图,要求是一个完整的单片机控制系统,电源为220V交流电。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ZHENG=P0^1;

sbit JIASU=P0^2;

sbit BAN=P0^3;

sbit YI=P0^4;

sbit LIAN=P3^3;

sbit A1=P2^0;

sbit B1=P2^1;

sbit C1=P2^2;

sbit D1=P2^3;

uchar code ffw[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转数组

uchar code rev[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转数组

uint rate;

uint i;

uint constant=1;

uint u;

uint s;

void delay(unsigned int m)

{

unsigned char x;

unsigned char j;

for(j=0;j

for(x=0;x

}

timer0()interrupt 1 using 1 /*定时器0中断服务程序*/

{

uint x;

x=rate;

i++;

TH0=(65536-x)/256;

TL0=(65536-x)%256;

u=0;

}

/***********半圈运行*************/

void semicircle()

{

for(s=0;s

{

i=0;

if(ZHENG)

{

while(i

{

u=1;

P2=ffw[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

else

{

while(i

{

u=1;

P2=rev[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

}

}

/************步进电机连续运行************/

void motor_turn()

{

i=0;

if(ZHENG)

{

while(i

{

u=1;

P2=ffw[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

else

{

while(i

{

u=1;

P2=rev[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

}

/************一圈运行****************/

void circle()

{for(s=0;s

motor_turn();

}

/**************主函数****************/

main()

{

P0=0xff;

while(1)

{

P2=0x00;

if(!LIAN)

{delay(20);

if(!LIAN) {constant=-1*constant;}}

if(constant==-1) motor_turn();

if(!BAN)

{delay(20);

if(!BAN) semicircle();}

if(!YI)

{delay(20);

if(!YI) circle();}

}

}

步进电机单片机系统设计 最终篇之外部中断

设计要求:一个正反转开关控制正转和反转, 一个速度开关控制高速和低速(高速和低速只要有明显差别),一个半圈按钮,按一下时转半圈, 一个一圈按钮, 按一下时转一圈, 一个连续转动按钮, 按一下时连续转动,再按一下时停止转动,程序要求用C语言编写。用protel画出系统原理图,要求是一个完整的单片机控制系统,电源为220V交流电。

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ZHENG=P0^1;

sbit JIASU=P0^2;

sbit BAN=P0^3;

sbit YI=P0^4;

sbit LIAN=P3^3;

sbit A1=P2^0;

sbit B1=P2^1;

sbit C1=P2^2;

sbit D1=P2^3;

uchar code ffw[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转数组

uchar code rev[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转数组

uint rate;

uint i;

uint constant=1;

uint u;

uint s;

void delay(unsigned int m)

{

unsigned char x;

unsigned char j;

for(j=0;j

for(x=0;x

}

timer0()interrupt 1 using 1 /*定时器0中断服务程序*/

{

uint x;

x=rate;

i++;

TH0=(65536-x)/256;

TL0=(65536-x)%256;

u=0;

}

/***********半圈运行*************/

void semicircle()

{

for(s=0;s

{

i=0;

if(ZHENG)

{

while(i

{

u=1;

P2=ffw[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

else

{

while(i

{

u=1;

P2=rev[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

}

}

/************步进电机连续运行************/

void motor_turn()

{

i=0;

if(ZHENG)

{

while(i

{

u=1;

P2=ffw[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

else

{

while(i

{

u=1;

P2=rev[i];

if(!JIASU)

{rate=20000;

TMOD=0x01;

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

EA=1;ET0=1;TR0=1;while(u);}

else

{rate=10000;

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;ET0=1;TR0=1;while(u);}

}

}

}

/************一圈运行****************/

void circle()

{for(s=0;s

motor_turn();

}

/**************主函数****************/

main()

{

P0=0xff;

while(1)

{

P2=0x00;

if(!LIAN)

{delay(20);

if(!LIAN) {constant=-1*constant;}}

if(constant==-1) motor_turn();

if(!BAN)

{delay(20);

if(!BAN) semicircle();}

if(!YI)

{delay(20);

if(!YI) circle();}

}

}


相关内容

  • 煤矿瓦斯检测
  • 目 录 中文摘要......................................................................................................... I 英文摘要.............................. ...

  • 单片机课程设计 红外避障小车
  • <单片机原理及应用> 课程设计报告书 课题名称 姓 名 学 号 专 业 指导教师 红外避障小车 机电与控制工程学院 年 月 日 任 务 书 设计一个小车,运用红外线检测,能实现避障. 要求:1 没有障碍物时正常前进, 2 前方有障碍物时能绕过障碍物. 目 录 1.绪论---------- ...

  • 脉搏信号采集系统的设计
  • 第一章 绪论 脉诊传统中医中最具有特色的诊断方法之一,是中医理论体系中必不可少的组成部分.脉象(脉搏信号)能反馈出人体各部分的生理与病理信息,是反映人体内部各种功能变化窗口,可以为疾病的诊断提供重要的参考依据. 脉诊在临床医学的运用十分广泛,涉及到医学很多领域,医生根据脉象的变化,可以测知人体的健康 ...

  • 基于单片机心率检测仪
  • 简易心率监测仪 单片机原理与应用说明书 题 目: 系 部: 专 业: 班 级:学生姓名: 学 号: 指导教师: 年 月 日 目录 一 引言 . .............................................................................. ...

  • 单片机交通灯毕设中期报告
  • (论文)中期报告 一. 进度情况说明: 已到各个交通要道实地观察,了解了控制的运行逻辑,对论文做了总体规划,查阅了有关知识,解决部分关键技术,已完成电路程序图.部分纸介论文书写工作. 二.存在的主要问题及解决方法: 1.按键抖动. 2.各运行逻辑时间的准确性. 3.逻辑转换的正确性. 4.各运行状态 ...

  • 可调直流电压源的制作(精装)
  • 题目:直流可调电压源 技术要求与主要内容: 1. 正负可调双路直流稳压电源的技术指标: 2. 电压源的正负可调范围:+2V-+12V:-2V --12V : 3. 双路跟踪可调: 4.6位数码管显示. 哈尔滨工业大学毕业设计(论文) 摘 要 随着时代的发展,数字电子技术已经普及到我们生活.工作.科研 ...

  • 霓虹灯报告
  • 题 目:基于单片机的霓虹灯控制器设计 摘 要 霓虹灯在现代社会中有广泛的应用,但传统的霓虹灯控制器利用移位寄存器的移位方式,只能实现几种有限的花式,因此市场迫切需要一种低成本高性能的霓虹灯控制器.本设计基于单片机实现多种花式的霓虹灯控制器.以AT89C52单片机为控制核心,使用独立式按键实现对霓虹灯 ...

  • 锅炉水温自动控制系统
  • 锅炉内胆动态水温实值控制设计 刘世斌 (LIU SHI-bin) (大庆石油学院华瑞学院 自动控制工程系 黑龙江 哈尔滨 150027;E-mail: [email protected]) 摘要:本设计采用一块单片机(STC89C52)作为涡炉水温闭环控制系统的控制核心,实现人工设定温度,自动控制温度 ...

  • 重点红外线防盗报警器的设计_[主动式]
  • 对射式红外线防盗报警器的设计 摘 要 本系统是基于AT89S52单片机控制的红外线防盗报警器,主要由红外线发射部分.红外线接收部分.单片机以及声光报警部分组成.可通过发射电路发射的红外线被遮挡时控制报警系统报警, 通过单片机控制报警电路的运行,并能同时进行声光报警,用红外线收发管进行检测,安装隐蔽, ...