
我有一个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语言代码,请问、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)