论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-3-21 22:40:07
|
显示全部楼层
本帖最后由 likunxue 于 2016-3-22 02:50 编辑
我觉得你还不如直接用串口输出的数据来实现, 模式串口的方法,速度可以自由控制, 按一定的时间,根据需要输出的方法数据,改变脉冲输出管却的高电平或低电平。
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
#define BIT_ADM(addr,bitnum) MEM_ADDR(BITBAND(((u32)&(addr)),(bitnum)))
#define MCLK BIT_ADM(GPIOB->ODR, 6) //脉冲输出线
void OUT(char Dat)
{
u8 j;
k = Ma; //取得要发送的数据
for(j = 0; j < 8; j++)
{
if(Dat & 0x80) MCLK = 1; //高位在前,低位在后, 如果低位在前,高位在后,反过来就行了
MCLK = 0;
delay_us(10); //脉冲输出的间,宽度,频率由这里控制
Dat <<= 1;
}
}
如果你怕脉宽不准,用定时器来实现就行了
MCLK 这条线上就是你需要的输出数据了,不知是不是你需的
|
|