c语言595驱动数码管,使用74hc595驱动一位数码管
本帖最后由 darknight 于 2018-7-20 22:42 编辑
74hc595是一种常用的I/O拓展芯片,今天我尝试用一个74hc595来驱动一个一位七段数码管,效果还行
功能:数码管循环显示0~4,每个数字停留一秒因为这次数码管没有用到DP,所以数码管的DP引脚悬空
shiftOut() 功能为软件模拟SPI串行输出
主要代码如下:
[mw_shl_code=c,true]/*
* darknight
* 使用74HC595扩展I/O,控制数码管
*(shiftOut串行输出的使用)
*
*74hc595与arduino的引脚连接表
*74hc595 Arduino
*ST_CP 8
*SH_CP 12
*DS 11
*MR VCC
*OE GND
*VCC VCC
*GND GND
*
*74hc595与数码管引脚连接表
*74hc595 数码管
*Q0 A
*Q1 B
*Q2 C
*Q3 D
*Q4 E
*Q5 F
*Q6 G
*Q7 DP(这个用不到)
*/
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
void setup() {
// put your setup code here, to run once:
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
for(int j=0;j<5;j++)
{
digitalWrite(latchPin, LOW);
//将latchPin的电平拉低
display(j);
//shiftOut(dataPin, clockPin, LSBFIRST, 159); 显示0
//用shiftOut() 函数将将8位串行数据发送到595的缓存器中
digitalWrite(latchPin, HIGH);
//latchPin产生一个上升沿
//缓存器中的的数据将以并行的方式输出到8个端口上
delay(1000);
}
}
void display(int i )
{
switch(i)
{
case 0:shiftOut(dataPin, clockPin, LSBFIRST, 0x02);break;//显示0
case 1:shiftOut(dataPin, clockPin, LSBFIRST, 0x9f);break;//显示1
case 2:shiftOut(dataPin, clockPin, LSBFIRST, 0x25);break;//显示2
case 3:shiftOut(dataPin, clockPin, LSBFIRST, 0x0d);break;//显示3
case 4:shiftOut(dataPin, clockPin, LSBFIRST, 0x99);break;//显示4
default:shiftOut(dataPin, clockPin, LSBFIRST, 0x02);//显示0
}
}[/mw_shl_code]
74hc595.jpg
(10.73 KB, 下载次数: 29)
2018-7-20 21:53 上传


74hc595引脚图

数码管.png
(16.5 KB, 下载次数: 32)
2018-7-20 21:56 上传


一位数码管引脚图

SMGand74HC595.png
(329.65 KB, 下载次数: 49)
2018-7-20 21:58 上传


连接图

实际连接图和效果.jpg
(916.86 KB, 下载次数: 201)
2018-7-20 22:17 上传


实际效果图


2018-7-20 22:39 上传
点击文件名下载附件
945 Bytes, 下载次数: 56
ino文件
更多推荐



所有评论(0)