9. 74HC595的使用方法(STM8S控制)

器件简介

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