谁能帮我写一个51单片机控制制步进电机的程序

谁能帮我写一个51单片机控制制步进电机的程序,第1张

#include "reg52.h"

#include "INTRINS.H"

#include <absacc.h>

#include <math.h>

#define uint unsigned int

#define uchar unsigned char

void check_addr(void)/*

地址核对

*/

uchar code slave_addr[4]={00, 01, 02, 255}

/*

从机地址

*/

uchar idata T0low, T0high,common_count,input_order,cmd_in_permit,interval

uchar sent_ok,speed_change,start_up,start_end,address_true,i

uint y1

uint

code

add[100]={60006,62771,63693,64154,64430,64614,64746,64845,64922,64983,65033,65075,651

11,65141,65167,65190,65211,65229,65245,65260,65273,65285,65296,65306,65315,65323,65331

,65339,65345,65352,65358,65363,65368,65373,65378,65382,65387,65390,65394,65398,65401,6

5404,65407,65410,65413,65416,65418,65421,65423,65425,65428,65430,65432,65434,65435,654

37,65439,65441,65442,65444,65445,65447,65448,65450,65451,65452,65453,65455,65456,65457

,65458,65459,65460,65461,65462,65463,65464,65465,65466,65467,65468,65469,65469,65470,6

5471,65472,65472,65473,65474,65475,65475,65476,65477,65477,65478,65478,65479,65480,654

80,65481}

sbit P2_0=P2^0

/*

作输入步进电机的脉冲信号发送口

*/

sbit P2_2=P2^2

/*

作输入步进电机的旋转方向信号发送口

*/

sbit P1_0=P1^0

/*

作串口陆核输出信号的早握掘使能口

, P1_0=0

时接通串口

,

输出信号

*/

sbit WD=P1^7

/*

看门狗

*/

main()

{

P2_0=0

P2_2=0

/*

步进电机的旋转方皮丛向待试验后确定

*/

P1_0=1

/*

开机时需要关断

,

串口发送功能

,

需要时再接通

*/

WD=1

/*

看门狗先为

1

,电平翻转为喂狗

*/

i=0

common_count=0

cmd_in_permit=0

input_order=0

interval=0

address_true=1

speed_change=0

start_up=0

2

start_end=0

sent_ok=0

//

允许发送

EA=1

/*

开放总中断

*/

TMOD=0x21

TH1 = 0xFD

//

波特率

9600

TL1 = 0xFD

SCON = 0xd0

//

设定串行口工作方式

PCON &= 0x00

//

波特率不倍增

SM2=1

TR1 = 1

ES=1

//

启动定时器

1

T2MOD=00

T2CON=0x00

RCAP2H

=0xEE

//

T2

的预置值

0xA600,25MS

0xB800

20MS,0xCA00

15MS,0xDC00

10MS

0xEE00

5MS

RCAP2L =0x00

TR2=1

//

启动定时器

ET2=1

//

打开定时器

2

中断

do

{

if(address_true==1)

{

address_true=0

check_addr()

}

if(start_up==1&&start_end==0)

//

第一次启动

{

y1=add[common_count]

T0high = (uchar)(y1>>8)

/*

y1

的高

8

*/

T0low = (uchar)(y1&0x00ff)

/*

y1

的低

8

*/

TR0 = 1

ET0=1

/*

允许

T/C0

中断

*/

start_end=1

}

if(speed_change==1)

{

if(interval>=0&&interval<=0x63)

{

if(interval>common_count)

{common_count=common_count+1}

if(interval<common_count)

{common_count=common_count-1}

}

3

speed_change=0

}

if(sent_ok==1)

{

sent_ok=0

P1_0=0

for(i=0i<=20i++) {_nop_()}

TI=0SBUF=T0high

while(TI==0)TI=0

TI=0SBUF=T0low

while(TI==0)TI=0

P1_0=1

for(i=0i<=20i++) {_nop_()}

SM2=1

}

}

while(1)

}

void timer0(void) interrupt 1 using 3

{

P2_0=~P2_0

y1=add[common_count]

T0high = (uchar)(y1>>8)

/*

y1

的高

8

*/

T0low = (uchar)(y1&0x00ff)

/*

y1

的低

8

*/

TH0=T0high

/*

8

T0high

送定时器

0

TH0*/

TL0=T0low

/*

8

T0low

送定时器

0

TL0*/

}

void timer2(void) interrupt 5 using 2

{

TF2=0

/*T2

溢出中断需软件清

0*/

speed_change=1

//

速度可以改变标示,以便主程序处理

WD=!WD/*MAX813

喂狗

*/

}

void inte_SERIAL() interrupt 4 using 1

/*

串口

0

中断服务子程序

*/

{

uchar key_in

key_in=0

if(RI)

{

基于AT89c51的简易时钟设计镇镇

摘要:本电子钟是采用电子电路实现对时、分进行数字显示的计时装置,广泛的应用于生活中。电子时钟主要是利用电子技术奖时钟电子化、数字化,拥有时间精确、体积小、界面友好物旅乎、课扩展性能强等特点,被广泛应用于生活和工作当中。当今市场上的电子时钟品类繁多,外形小巧别致。电子时钟数字罩悉化了时间显示。在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,

本设计由以下几个部件组成:单片机AT89C51、四个八段码共阴极数码管显示、四个微动按钮等其它组件。在启动后开始从00时00分显示。可以手动校准时间,秒使用两个发光二极管的闪烁来提现,本设计设计简单易于实现。

关键词:AT89C51、倒计时。LED

Simple clock design based on AT89c51

Abstract: This clock is the use of electronic circuits to achieve the hours, minutes, digital display of timing devices, widely used in life. Electronic clock main prize is the use of electronic technology electronic clock, digital, with a time accurate, small, friendly interface, expanded its performance and other characteristics, are widely used in life and on the job. The market today, many kinds of electronic clock, compact and chic. Digital electronic time clock display. On this basis, one can according to the requirements of different occasions, plus set the clock on the other features

This design consists of the following components: microcontroller AT89C51, four eight out code common cathode LED display, four buttons, and other micro-components. After starting 00 points from 00 shows. You can manually calibrate the time, in seconds using two LEDs blink to mention is, the design is simple design easy to implement.

Keywords: AT89C51, countdown. LED

目 录

摘要 1

关键词 1

Simple clock design based on AT89c51 2

目录 3

第一章引言 4

1.1 时钟的概述 5

第二章电路工作原理分析 5

2.1 系统的硬件构成及功能 5

2.2硬件连接方式 6

第三章: 芯片介绍 6

3.1 MCS- 51介绍 6

3.4 LED数码管显示 10

3.4.1 LED数码管介绍 10

3.4.2 LED数码管编码方式 11

3.4.3 LED数码管显示方式和典型应用电路 12

第四章 部分电路介绍 13

4.1单片机的最小应用系统 13

4.1.1 单片机的时钟电路 13

4.1.2 复位电路和复位状态 14

4.1.3总线结构 17

4.2此设计显示电路 18

4.4看门狗电路 19

4.5 按键模块 19

第五章程序设计 19

第六章 原理图和印制板图的设计 20

( 一 ) 原 理 图 的 设 计 和 网 络 表 的 生 成 20

(二)PCB的制作和设计 21

第七章 原理图的protues仿真 23

7.1PROTUES介绍 23

7.2原理图仿真步骤 26

总 结 27

谢 辞 28

参考资料及文献 29

附录一:原理图 30

附录二:PCB 31

附录三 仿真 32

附录四:程序清单 33

第一章引言

数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用也方便,但鉴于单片机的定时器功能也可以完成数字钟电路的设计,因此进行数字钟的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。

单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。

1.1 时钟的概述

20世纪末,电子技术获得了飞速的发展。在其推动下,电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展和信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。

电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛的应用于生活中。电子时钟主要是利用电子技术奖时钟电子化、数字化,拥有时间精确、体积小、界面友好、课扩展性能强等特点,被广泛应用于生活和工作当中。当今市场上的电子时钟品类繁多,外形小巧别致。电子时钟数字化了时间显示。在此基础上,人们可以根据不同场合的要求,在时钟上加置其他功能,比如定时闹钟,万年历,环境温度,温度检测,环境空气质量检测,USB扩展功能等。

本设计电子时钟主要功能为:具有时间显示和手动校对功能,24小时制。

本设计任务“

1:用4位LED数码管实时显示时钟计时功能;最小显示时间为00时00分,最大显示时间为23时59分;

2:能方便的校准小时和分钟。

3:了解单片机的基础知识;

4;掌握proteus的基本原理和使用方法;

5:掌握数码管和LED的显示的方法;

6:掌握单片机定时器的基本原理;

7:掌握单片机定时器的基本原理;

8:掌握绘图软件Proell99se的使用方法;

9:绘制程序流程图和编写出程序;

10:画出电路原理图并仿真运行

第二章电路工作原理分析

2.1 系统的硬件构成及功能

本设计由以下几个部件组成:单片机AT89C51、四个八段码共阴极数码管显示、四个微动按钮等其它组件。在启动后开始从00时00分显示。可以手动校准时间,秒使用两个发光二极管的闪烁来提现,本设计设计简单易于实现。

图1 99秒计时器系统原理框图

2.2硬件连接方式

数码管使用动态显示,P0口作为四个八位共阴数码管的段选输出端,为提高单片机输出能力 P0口作为输出口接了8个4.7K的电阻作为上拉电阻;P2.口是四个八位共阴数码管和两个发光二极管的位选端,显示是事位和分位,四个微动开关做的按键分别连P1.0,P1.1,P1.2,P1.3完成时和分的加减调整。硬件连接如下:

4.1单片机的最小应用系统

单片计算机是一个最小的应用系统,但由于应用系统中有一些功能器件无法集成到芯片内部,如晶振、复位电路等,需要在片外加接相应的电路。对于片内无程序存储器的单片机,还应该配置片外程序存储器。

4.1.1 单片机的时钟电路

MCS-51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。MCS-51单片机的时钟产生方式有两种。

(1) 内部时钟方式

利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出的时钟信号。最常用的是在XTAL1和XTAL2之间连接晶体振荡器与电容构成稳定的自激震荡器,如图3-1所示。

晶体可在1.2~12MHz之间选择。MCS-51单片机在通常应用情况下,使用振荡频率为6MHz的石英晶体,而12Hz频率的晶体主要是在高速串行通信情况下才使用。C1和C2可在20~100pF之间取值,一般取30pF左右。

(2) 外部时钟方式

在由单片机组成的系统中,为了各单片机之间时钟信号的同步,应当引入惟一的合用外部振荡脉冲作为各单自片机的时钟。外部时钟方式中是把外部振荡信号源直接接入XTAL1或XTAL2。由于HMOS和CHMOS单片机外部时钟进入的引线不同,其外部振荡信号源接入的方式也不同。HMOS型单片机由XTAL2进入,外部振荡信号接至XTAL2,而内部反相放大器的输入端XTAL1应接地,如图3-2所示。由于XTAL2端的逻辑电平不是TTL的,故还要接一上接电阻。CHMOS型单片机由XTAL1进入,外部振荡信号接至XTAL1,而XTAL2可不接地,如图3-3所示。

图3-1内部时钟电路 图3-2HMOS型外部时钟电路 图3-3外部时钟电路

4.1.2 复位电路和复位状态

MCS-51单片机的复位是靠外部电路实现的。MCS-51单片机工作后,只要在它的RST引线上加载10ms以上的高电平,单片机就能够有效地复位。

(1) 复位电路

MCS-51单片机通常采用上电自动复位和按键复位两种方式。最简单的复位电路如图3-4所示。上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。

图 3-4 简单的复位电路

在实际的应用系统中,为了保证单片机可靠地工作,常采用“看门狗”监视单片机的运行。采用MAX690的复位电路如图3-5所示,该电路具有上电复位和监视MCS-51单片机的P3.3的输出功能。一旦P3.3不输出高低电平交替变化的脉冲,MAX690就会自动产生一复位信号使单片机复位。

图3-5 MAX690组成的复位电路

(2) 复位状态

复位电路的作用是使单片机执行复位 *** 作。复位 *** 作主要是把PC初始化为0000H,使单片机从程序存储器的0000H单元开始执行程序。程序存储器的0003H单元即MCS-51单片机的外部中断0的中断处理程序的入口地址。留出的0000H~0002H 3个单元地址,仅能够放置一条转移指令,因此,MCS-51单片机的主程序的第一条指令通常情况下是一条转移指令。

除PC之外,复位还对其他一些特殊功能的寄存器有影响,它们的复位状态如表3-6所示。

由表3-6可知,除SP=07H,P0~P3 4个锁存器均为FFH外,其他所有的寄存器均为0。此外,单片机的复位不影响片内RAM的状态(包括通用寄存器Rn)。

表3-6 寄存器的复位状态

寄存器 复位状态 寄存器 复位状态

PC 0000H TMOD 00H

ACC 00H TCON OOH

PSW 00H TL0 00H

SP 07H TH0 00H

DPTR 0000H TL1 00H

P0~P3 FFH TH1 00H

IP Xxx00000B SCON 00H

IE 0xx00000B PCON 0xx00000B

P0、P1、P2、P3共有4个8位并行I/O口,它们引线为:P0.0~P0.7、P1.0~P1.7、

P2.0~P2.7、P3.0~P3.7,共32条引线。这32条引线可以全部用做I/O线,也可将其中部分用做单片机的片外总线。

① 控制线

A、ALE地址锁存允许

当单片机访问外部存储器时,输出信号ALE用于锁存P0口输出的低8位地址A7~A0。ALE的输出频率为时钟振荡频率的1/6。

B、 程序存储器选择

=0,单片机只访问外部程序存储器。对内部无程序存储器的单片机8031, 必须接地。 =1,单片机访问内部程序存储器,若地址超过内部程序存储器的范围,单片机将自动访问外部程序存储器。对内部有程序存储器的单片机, 应接高电平。

C、 片外程序存储器的选通信号。此信号为读外部程序存储器的选通信号。

D、RST复位信号输入

② 电源及时钟

VSS地端接地线,VCC电源端接+5V,XTAL1和XTAL2接晶振或外部振荡信号源。

图3-7 片外3总线结构

4.1.3总线结构

单片机的引线除了电源、复位、时钟输入、用户I/O口外,其余引线都是为实现系统扩展则设置的,这些引线构成了单片机外部的3总线形式,如图3-7所示。

① 地址总线

地址总线宽度为16位,由P0口经地址锁存器提供低8位地址(A7~A0),P2口直接提供高8位地址(A15~A8)。

由口的位结构可知,MCS-51单片机在进行外部寻址时,P0口的8根引绠低8位地址和8位数据的复用线。P0口首先将低8位的地址发送出去,然后再传送数据,因此要用锁存器将先送出的低8位地址锁存。MCS-51常用74LS373或8282做地址锁存器。

② 数据总线

数据总线宽度为8位,由P0口提供。

③ 控制总线

MCS-51用于外部扩展的控制总线除了它自身引出的控制线RES、 、ALE、 外,还有由P3口的第二功能引线:外部中断0和外部中断1输入线 和 ,以及外部RAM或I/O端口的读选通和写选通信号 和 。

3.4 MCS—51单片机的最小应用系统

构成最小应 MCS—51单片机的最小应用系统

用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图3-8所示,这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户选用的大量I/O线。

4.2此设计显示电路

数码管使用动态显示,P0口作为四个八位共阴数码管的段选输出端,因为P0口作为输出口接了8个4.7K的电阻作为上拉电阻;P2口四个八位共阴数码管的位选端,显示是两位时间的事时位和两位的分位。

4.3电源电路

由于该系统需要稳定的5 V电源,因此设计时必须采用能满足电压、电流和稳定性要求的电源。该电源采用三端集成稳压器LM7805。它仅有输人端、输出端及公共端3个引脚,其内部设有过流保护、过热保护及调整管安全保护电路,由于所需外接元件少,使用方便、可靠,因此可作为稳压电源。图4为电源电路连接图。

 

4.4看门狗电路

系统中把P1.6作为看门狗的“喂狗”信号;将MAX813的 RESET与单片机的复位信号RST连接。由于单片机每执行一次程序,就会给看门狗器件一个复位信号,这样也可以用手工方式实现复位。当按键按下时,SW-SPST就会在MAX813 引脚产生一个超过200ms的低电平,其实看门狗器件在1.6s 时间内没有复位,使7引脚输出一个复位信号的作用是相同的,其连接图如图6所示。

4.5 按键模块

下图为按键模块电路原理图,S1为时加,s2为时减,S3为分钟加调控键,S4是分钟减调控键。

LED_BIT_1 EQU 30H 存放8位数码管的段码

LED_BIT_2 EQU 31H

LED_BIT_3 EQU 32H

LED_BIT_4 EQU 33H

LED_BIT_5 EQU 34H

LED_BIT_6 EQU 35H

LED_BIT_7 EQU 36H

LED_BIT_8 EQU 37H 存放初始密码

SECOND EQU 60H

MINUTE EQU 61H

HOUR EQU 62H

TCNT EQU 63H

ORG 00H 初始化程序 ,设置初始密码

SJMP START

ORG 0BH

LJMP INT_T0

START:

MOV DPTR,#TABLE

MOV HOUR,#0

MOV MINUTE,#0

MOV TCNT,#0

MOV TMOD,#01H

MOV TH0,#03ch 定时50毫秒

MOV TL0,#03ch

MOV IE,#082H

SETB TR0

MOV LED_BIT_1,#00H 段码存储区清0

MOV LED_BIT_2,#00H

MOV LED_BIT_3,#00H

MOV LED_BIT_4,#00H

MOV LED_BIT_5,#00H

MOV LED_BIT_6,#00H

MOV LED_BIT_7,#79H

MOV LED_BIT_8,#73H

MOV TMOD,#01H

MOV TH0,#0fdh

MOV TL0,#0fdh

MOV IE,#82H

A1:

LCALLDISPLAY调用时间显示

JNBP1.0,S1

JNB P1.1,S2

JNBP1.2,S3

JNBP1.3,S4

LJMP A1

S1: LCALLDLY_S 去抖动

JB P1.0,A1

INCHOUR秒值加1

MOV A, HOUR

CJNE A,#24,J00 判断是否加到60秒

MOV HOUR,#0

LJMP A1

S2: LCALLDLY_S

JB P1.1,A1

K01: DEC HOUR SHI-

MOV A,HOUR

CJNE A,#0,J01 判断是否-0分

MOV HOUR,#24

LJMP A1

S3: LCALLDLY_S

JBP1.2,A1

K02:INC MINUTE小时值加1

MOV A,MINUTE

CJNE A,#60,J02 判断是否加到24小时

MOV MINUTE,#0

LJMP A1

S4: LCALLDLY_S

JBP1.3,A1

K03: DEC MINUTE小时值加1

MOV A,MINUTE

CJNE A,#0,J03 判断是否加到24小时

MOV MINUTE,#59

LJMP A1

J00: JB P1.0,A1 等待按键抬起

LCALLDISPLAY

SJMP J00

J01: JB P1.1,A1

LCALLDISPLAY

SJMP J01

J02: JB P1.2,A1

LCALLDISPLAY

SJMP J02

J03: JB P1.3,A1

LCALLDISPLAY

SJMP J03

INT_T0: MOV TH0,#3ch 定时器中断服务程序

MOV TL0,#3ch 对秒,分钟和小时的计数

INC TCNT

MOV A,TCNT

CJNE A,#20,RETUNE计时1秒

INC SECOND

MOV TCNT,#0

MOV A,SECOND

CJNE A,#60,RETUNE

INCMINUTE

MOV SECOND,#0

MOV A,MINUTE

CJNE A,#60,RETUNE

INC HOUR

MOV MINUTE,#0

MOV A,HOUR

CJNE A,#24,RETUNE

MOV HOUR,#0

MOV MINUTE,#0

MOV SECOND,#0

MOV TCNT,#0

RETUNE: RETI

DIS3闹铃设置子程序

DIS3

DISPLAY: 显示时间控制子程序

MOV A,SECOND显示秒

MOV B,#10

DIV AB

CLR P2.6

MOVCA,@A+DPTR

MOV P0,A

LCALLDLY_S

SETB P2.6

MOV A,B

CLR P2.7

MOVCA,@A+DPTR

MOV P0,A

LCALLDLY_S

SETB P2.7

CLR P2.5

MOV P0,#40H 显示分隔符

LCALLDLY_S

SETB P2.5

MOV A,MINUTE显示分钟

MOV B,#10

DIV AB

CLR P2.3

MOVCA,@A+DPTR

MOV P0,A

LCALLDLY_S

SETBP2.3

MOV A,B

CLR P2.4

MOVCA,@A+DPTR

MOV P0,A

LCALLDLY_S

SETB P2.4

CLR P2.2

MOV P0,#40H显示分隔符

LCALLDLY_S

SETB P2.2

MOV A,HOUR显示小时

MOV B,#10

DIV AB

CLR P2.0

MOVCA,@A+DPTR

MOV P0,A

LCALLDLY_S

SETB P2.0

MOV A,B

CLR P2.1

MOVC A,@A+DPTR

MOV P0,A

LCALLDLY_S

SETB P2.1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H

DB 6DH,7DH,07H,7FH,6FH

延时

DLY_S: MOV R6,#5 延时程序

D1: MOV R7,#100

DJNZ R7,$

DJNZ R6,D1

RET

DLY_L: MOV R5,#50

D2: MOV R6,#100

D3: MOV R7,#100

DJNZ R7,$

DJNZ R6,D3

DJNZ R5,D2

RET

END

第五章程序设计

程序只要完成了初始化,计时,在计时过程中判断按键情况,做相应处理。流程如下。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8218402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存