基于51单片机通过74HC595控制四相步进电机的C程序

基于51单片机通过74HC595控制四相步进电机的C程序,第1张

我有一个74hc595串入并出控制led程序,你自己改一改就行了。

前提是你还需要一个电机驱动芯片(如l293d,uln2003等)。

/

标题: 试验74HC595驱动8位LED灯(C语言)

连接方法:JP12用条线冒短接 JP1(LED灯接口)和JP2(595接口) 用8PIN排线连接

通过本例程了解 74HC595(串入并出)基本原理和使用

3个I/O扩展8个输出,通过片选可以串接更多74HC595芯片,得到更多的输出数

请学员认真消化本例程,懂74C595在C语言中的 *** 作

此汇编程序留给大家做为课后作业自己完成。关于HC595汇编驱动参考“静态显示(74HC595驱动)”。

/

#include <reg51h>

#include <intrinsh>

#define NOP() _nop_() / 定义空指令 /

//SPI IO

sbit MOSIO =P3^4;

sbit R_CLK =P3^5;

sbit S_CLK =P3^6;

void delay(unsigned int i); //函数声名

void HC595SendData(unsigned char SendVal);

main()

{ unsigned char Led=0xfe; //1111 1110

HC595SendData(0xff); //初始化595使他为高电平 让LED处于熄灭状态

while(1)

{

HC595SendData(Led); //调用595驱动程序 把LED的数据送到595

Led<<=1;

Led = Led| 0x01; //移位后,后面的位为高电平;

if (Led == 0xff ) Led=0xfe; //1111 1110

delay(200);

}

}

/

延时子程序

/

void delay(unsigned int i)

{

unsigned int j;

for(i; i > 0; i--)

for(j = 300; j > 0; j--);

}

/

函数名称: HC595SendData

功能描述: 向SPI总线发送数据

/

void HC595SendData(unsigned char SendVal)

{

unsigned char i;

for(i=0;i<8;i++)

{

if((SendVal<<i)&0x80) MOSIO=1; //set dataline high 0X80 最高位与SendVal左移的最高位 进行逻辑运算

else MOSIO=0; // 如果为真 MOSIO = 1

S_CLK=0;

NOP(); //产生方形波

NOP();

S_CLK=1;

}

R_CLK=0; //set dataline low

NOP(); //产生方形波

NOP();

R_CLK=1; //片选

}

1、HC-SR04使用方法:给触发端子trig一个10us以上的高电平即可触发,触发后echo端子将接受到高电平,高电平的持续时间就是测距的往返时间。

2、例程:

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

/位定义/

sbit CHUFA=P0^1;    //位定义超声波触发端(10us以上高电平触发)

sbit JIESHOU=P0^3;    //接收端(接受高电平)

sbit BEEP=P2^0;        //蜂鸣器

sbit OUT0=P3^2;        //外部中断0

uchar JS_FLAG;        //接收标志

uint CF_TIME,t0,t1,shu;

/函数声明/

void timer0();        

void int0();

void display(uint);

main(){

    CHUFA=0;        //初始化拉低触发端和接收端电平

    JIESHOU=0;

    JS_FLAG=0;        

    CF_TIME=15;        //初始化触发时间(大于10us)

    TMOD=0x11;        //定时器方式选择

    EA=1;             //开总中断

    ET0=1;            //开定时器0中断

    EX0=1;             //开外部中断0

    IT0=0;             //外部中断选择下降沿触发

    //JIESHOU=1;

    while(1){

        OUT0=JIESHOU;      //外部中断0被赋值为接收端信号,当出现下降沿是触发外部中断0

        if(JS_FLAG==0){        //如果没有接收到高电平则触发

            CHUFA=1;

            while(CF_TIME--);    //10us以上高电平触发传感器

        }

        if(JIESHOU==1){        

            TR0=1;            //如果接收端收到高电平则启动定时器

            JS_FLAG=1;         //并且标志位置1

            BEEP=0;            //蜂鸣器响    

        }

        display(t1);    //显示测量时间(秒)

    }

}

/定时器0中断程序/

void timer0() interrupt 1{    

    TH0=(65536-10000)/256;    //装初值 10ms

    TL0=(65536-10000)%256;

    t0++;                    //每进入一次中断t0加1    

}

/外部中断0中断程序/

void int0() interrupt 0{

    TR0=0;            //一旦进入外部中断0,说明接收端收到下降沿信号。关闭定时器0

    JS_FLAG=0;        //接收标志位置0

    BEEP=1;               //关闭蜂鸣器

    t1=t010/1000;    //测量时间为 进入定时器中断次数t0乘以每次时间10ms,除以1000化为秒为单位

    t0=0;            //t0清零

}

/数码管显数函数/

void display(uint shu){

    //数码管显示函数

}

以上就是关于基于51单片机通过74HC595控制四相步进电机的C程序全部的内容,包括:基于51单片机通过74HC595控制四相步进电机的C程序、51单片机 HC-SR04超声波测距 我写的C语言代码,请问、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9818851.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存