欢迎光临散文网 会员登陆 & 注册

直流电机驱动10秒,然后LED显示“磊”字

2023-07-09 22:04 作者:耐可油磊  | 我要投稿

#include "reg52.h"

#include "intrins.h"// 调用_nop_()函数,一个nop就是一个机器周期,1us

typedef unsigned int u16; //对系统默认数据类型进行重定义

typedef unsigned char u8;//定义74HC595控制管脚

sbit SRCLK=P3^6; //移位寄存器时钟输入

sbit RCLK=P3^5; //存储寄存器时钟输入

sbit SER=P3^4; //串行数据输入

sbit DC_Motor=P1^0;

#define DC_MOTOR_RUN_TIME 10000 //宏定义

void delay_ms(u16 ms)//延时函数,输入1,延时1ms

{

u16 i,j;

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

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

}


//LED点阵显示汉字磊的列控制数据。第三片595控制前8列,第四片595控制后8列

u8 gled_col[32]=

{0xFE,0x3F,0x20,0x00,0x10,0x00,0xF8,0x0F,0x14,0x08,0x12,0x08,0xF1,0x0F,0x00,0x00,

0x7E,0x7F,0x08,0x04,0x04,0x02,0x7E,0x3F,0xC5,0x22,0x44,0x22,0x7C,0x3E,0x44,0x22,};//最后一个逗号可去可留


//LED点阵显示汉字磊的行控制数据。第一片595控制前8行,第二片595控制后8行

u8 gled_row[32]=

{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//0x01第一行高有效,0x02第二行高有效。控制前8行时,后8行数据全低无效

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//摆放顺序可以替换,但要保证每一行都被扫描到,同时其他行为0,main函数中调用函数也要修改,

//上下对应的两个为整个16行,如0x01与0x00对应一次扫描,第一行高有效,其他行都为低无效。所以main函数中调用行前8行gled_row[i],后8行gled_row[i+16],


void delay_10us(u16 ten_us)

{

while(ten_us--);

}


void hc595_write_data(u8 dat1,u8 dat2,u8 dat3,u8 dat4)//dat1,dat2,dat3,dat4,分别是第一、二、三、四个595

{

u8 i=0;


for(i=0;i<8;i++)//循环8次即可将一个字节写入寄存器中

{

SER=dat4>>7;//优先传输一个字节中的高位

dat4<<=1;//将低位移动到高位

SRCLK=0;

// delay_10us(1);

_nop_();

SRCLK=1;

_nop_();

// delay_10us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中

}

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

{

SER=dat3>>7;

dat3<<=1;

SRCLK=0;

_nop_();

SRCLK=1;

_nop_();

}


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

{

SER=dat2>>7;

dat2<<=1;

SRCLK=0;

_nop_();

SRCLK=1;

_nop_();

}


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

{

SER=dat1>>7;

dat1<<=1;

SRCLK=0;

_nop_();

SRCLK=1;

_nop_();

}


RCLK=1;

delay_10us(1);

RCLK=0;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出

}



void main()

{

u8 i=0;

DC_Motor=1;

delay_ms(DC_MOTOR_RUN_TIME);

DC_Motor=0;

while(1)

{

for(i=0;i<16;i++)//循环16次扫描16行、列

{

hc595_write_data(gled_row[i],gled_row[i+16],~gled_col[i*2],~gled_col[i*2+1]);//传送行列选数据,取反是因为取字器列为高电平,而电路是列为低电平

delay_10us(10);//延时一段时间,等待显示稳定

hc595_write_data(0x00,0x00,0x00,0x00);//消影

}

}

}

直流电机驱动10秒,然后LED显示“磊”字的评论 (共 条)

分享到微博请遵守国家法律