器件简介
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。
在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。
当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
而当OE为高电位,也就是输出关闭时,并行输出端会维持在高阻抗状态。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <stdint.h> #include "stm8s.h"
#define __nop() __asm nop __endasm
unsigned char data = 0x01;
void delay() { uint32_t i; for(i = 0; i < 5000; i++) __asm nop __endasm; }
void setup() { PD_DDR = 0xFF; PD_CR1 = 0xFF; PD_CR2 = 0x00; }
void loop() { unsigned char i; for(i=0; i<8; i++) { if((data >> i) & 0x01) PD_ODR |= 0x08; else PD_ODR &= 0xF7; PD_ODR &= 0xFB; __nop(); __nop(); __nop(); __nop(); __nop(); PD_ODR |= 0x04; } PD_ODR &= 0xFD; __nop(); __nop(); __nop(); __nop(); __nop(); PD_ODR |= 0x02;
data <<= 1; if(data == 0) data = 0x01; delay(); }
void main() { setup(); while(1) loop(); }
|
1 2 3 4
| // 编译 sdcc -mstm8 -lstm8 --out-fmt-ihx -o build/ main.c // 烧写 sudo stm8flash -c stlinkv2 -p stm8s103f3 -w build/main.ihx
|