|
然后這是我的程序,大佬們也幫忙看一看
#include<reg51.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit PWM2A=P1^4;//定義M1電機為P1.4的I/O口,即為小車右邊第一個電機
sbit PWM2B=P1^5;//定義M2電機為P1.5的I/O口,即為小車左邊第一個電機
sbit PWM0B=P1^6;//定義M3電機為P1.6的I/O口,即為小車左邊第二個電機
sbit PWM0A=P1^7;//定義M4電機為P1.7的I/O口,即為小車右邊第二個電機
sbit SER =P3^4;//定義74hc595芯片 DS腳數(shù)據(jù)線
sbit RCK =P3^5;//定義 LATCH腳 輸出存儲器鎖存時鐘線
sbit SCK =P3^6;//定義輸入時鐘線
void delay(void)//延遲500ms
{
unsigned char a,b,c;
for(c=23;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
}
void HC595SendData(u8 SendVal)
{
u8 i;
for(i=0;i<8;i=i++)
{
SER=SendVal&0x80;//1000 0000 1000 0000
SendVal=SendVal<<1;//0000 0000 0000 0000 每次取1位左移
SCK=0; //先將串行時鐘輸入端SH_CP置成低電平
_nop_();
_nop_(); //兩個時鐘周期
SCK=1; //數(shù)據(jù)在串行時鐘輸入端SH_CP的上升沿輸入到移位寄存器
}
RCK=0; //鎖存
_nop_();
_nop_();
RCK=1; //移位寄存器上升沿時,數(shù)據(jù)進(jìn)入存儲寄存器
}
void main()
{
PWM2A=1; //M1電機使能
PWM2B=1; //M2電機使能
PWM0B=1; //M3電機使能
PWM0A=1; //M4電機使能
HC595SendData(0x6a);//01101010 全部電機正轉(zhuǎn),小車前進(jìn)
delay();
while(1);
} |
|