
老规矩,我们先来看个效果

我们先用单片机按照之前的例子分解,来实现我们想要的结果。
首先,我们让16个LED灯交叉亮起来
代码部分
int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5; void setup (){ pinMode(STCP_Pin,OUTPUT); pinMode(SHCP_Pin,OUTPUT); pinMode(DS_Pin,OUTPUT); }// 我们先让16个灯交叉亮void loop(){ while(1) { digitalWrite(STCP_Pin, LOW); // 1 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 2 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 3 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 4 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 5 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 6 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 7 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 8 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 9 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 10 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 11 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 12 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 13 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 14 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); // 15 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, LOW); digitalWrite(SHCP_Pin, HIGH); // 16 digitalWrite(SHCP_Pin, LOW); digitalWrite(DS_Pin, HIGH); digitalWrite(SHCP_Pin, HIGH); digitalWrite(STCP_Pin, HIGH); }}
运行效果

然后我们再把代码简化一下,使其看起来更简洁,实用
int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5; void setup (){
pinMode(STCP_Pin,OUTPUT);
pinMode(SHCP_Pin,OUTPUT);
pinMode(DS_Pin,OUTPUT);
digitalWrite(STCP_Pin, LOW);}void loop(){
unsigned char LED_Data;
while(1)
{
LED_Data = 0xAA;
// 第一个8位
digitalWrite(STCP_Pin, LOW);
for(int i=0; i<8; i++)
{
if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
LED_Data <<=1;
}
// 第二个8位
LED_Data = 0xAA;
for(int i=0; i<8; i++)
{
if(LED_Data&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
LED_Data <<=1;
}
digitalWrite(STCP_Pin, HIGH);
delay(1000);
}}我们稍微改变下,让LED灯按照我们的意思工作,封装一下函数,然后让中间四个灯亮起来
int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5; void HC595_Write(unsigned char data1, unsigned char data2);void setup (){
pinMode(STCP_Pin,OUTPUT);
pinMode(SHCP_Pin,OUTPUT);
pinMode(DS_Pin,OUTPUT); }void loop(){
unsigned char LED_Data1 = 0x03;
unsigned char LED_Data2 = 0xC0;
while(1)
{
HC595_Write(LED_Data1, LED_Data2);
delay(1000);
}}void HC595_Write(unsigned char data1, unsigned char data2){
// 第一个8位
digitalWrite(STCP_Pin, LOW);
for(int i=0; i<8; i++)
{
if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
data1 <<=1;
}
// 第二个8位
for(int i=0; i<8; i++)
{
if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
data2 <<=1;
}
digitalWrite(STCP_Pin, HIGH); }中间四个LED灯亮的效果

然后我们连贯起来搞个流水的灯玩玩
int STCP_Pin = 4;int SHCP_Pin = 6;int DS_Pin = 5; unsigned char LED_Data1[8] = { 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};unsigned char LED_Data2[8] = { 0x01, 0x02, 0x04, 0x08,
0x10, 0x20, 0x40, 0x80};void HC595_Write(unsigned char data1, unsigned char data2);void setup (){
pinMode(STCP_Pin,OUTPUT);
pinMode(SHCP_Pin,OUTPUT);
pinMode(DS_Pin,OUTPUT); }void loop(){
while(1)
{
for(int i=0; i<8; i++)
{
HC595_Write(0x00, LED_Data1[i]);
delay(1000);
}
for(int i=0; i<8; i++)
{
HC595_Write( LED_Data2[i], 0x00);
delay(1000);
}
}}void HC595_Write(unsigned char data1, unsigned char data2){
// 第一个8位
digitalWrite(STCP_Pin, LOW);
for(int i=0; i<8; i++)
{
if(data1&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
data1 <<=1;
}
// 第二个8位
for(int i=0; i<8; i++)
{
if(data2&0x80){ digitalWrite(DS_Pin, HIGH);}
else { digitalWrite(DS_Pin, LOW); }
digitalWrite(SHCP_Pin, LOW);
digitalWrite(SHCP_Pin, HIGH);
data2 <<=1;
}
digitalWrite(STCP_Pin, HIGH); }最终的流水灯实验效果
上一篇:(7)趣味单片机新玩法-认识不一样的数码管
下一篇:(5)趣味单片机新玩法-74HC595手工分解实验
- 热门资源推荐
- 热门放大器推荐
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用
- 格创东智SEMICON CHINA 2026圆满收官,章鱼智脑与全场景智能体群定义工业智能决策新高度
- 当变压器进入封装:TI IsoShield如何改写隔离电源边界
- 2026年1月座舱域控迎新一轮洗牌,华为、小米上位,比亚迪电子承压
- SK Signet推出400kW一体式超快速电动汽车充电器
- 智元机器人第1万台人形机器人A3量产下线,全球市场份额领先
- 雷诺和RMC BFM推出人工智能个性化车载收音机
- Diodes推出符合汽车级标准的100V PowerDI®8080-5封装MOSFET
- 保时捷申请线控换挡系统专利 兼具自动变速箱和手动变速箱功能
- 汽车以太网的11大误区
- 如何将自动驾驶大模型庞大的能力压缩到车端?



MOSFET和GaN FET应用手册
CLC5612IMX

120-316-03L-P31






京公网安备 11010802033920号