直流電機驅動10秒,然后LED顯示“磊”字

#include "reg52.h"
#include "intrins.h"// 調用_nop_()函數(shù),一個nop就是一個機器周期,1us
typedef unsigned int u16; //對系統(tǒng)默認數(shù)據類型進行重定義
typedef unsigned char u8;//定義74HC595控制管腳
sbit SRCLK=P3^6; //移位寄存器時鐘輸入
sbit RCLK=P3^5; //存儲寄存器時鐘輸入
sbit SER=P3^4; //串行數(shù)據輸入
sbit DC_Motor=P1^0;
#define DC_MOTOR_RUN_TIME 10000 //宏定義
void delay_ms(u16 ms)//延時函數(shù),輸入1,延時1ms
{
u16 i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
//LED點陣顯示漢字磊的列控制數(shù)據。第三片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點陣顯示漢字磊的行控制數(shù)據。第一片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行數(shù)據全低無效
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//擺放順序可以替換,但要保證每一行都被掃描到,同時其他行為0,main函數(shù)中調用函數(shù)也要修改,
//上下對應的兩個為整個16行,如0x01與0x00對應一次掃描,第一行高有效,其他行都為低無效。所以main函數(shù)中調用行前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++)//循環(huán)8次即可將一個字節(jié)寫入寄存器中
{
SER=dat4>>7;//優(yōu)先傳輸一個字節(jié)中的高位
dat4<<=1;//將低位移動到高位
SRCLK=0;
// delay_10us(1);
_nop_();
SRCLK=1;
_nop_();
// delay_10us(1);//移位寄存器時鐘上升沿將端口數(shù)據送入寄存器中
}
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;//存儲寄存器時鐘上升沿將前面寫入到寄存器的數(shù)據輸出
}
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++)//循環(huán)16次掃描16行、列
{
hc595_write_data(gled_row[i],gled_row[i+16],~gled_col[i*2],~gled_col[i*2+1]);//傳送行列選數(shù)據,取反是因為取字器列為高電平,而電路是列為低電平
delay_10us(10);//延時一段時間,等待顯示穩(wěn)定
hc595_write_data(0x00,0x00,0x00,0x00);//消影
}
}
}