-
2020-12-28 22:52:15
在74HC595等串口转并口芯片接线的时候,我们会遇到两个问题:
74HC595
有时候按次序接线较困难。比如上图,我的我这样接线是方便,但是一些图形显示的库就不能直接用了,因为这些库需要按固定次序连线,当然,我们可以改造数码管字库数据,但太麻烦了。
我的74HC595某引脚连接的电路坏了,或者我只想使用部分引脚。比如我焊接的8个LED有3个坏了,我想在LED顺序点亮的时候只点亮5个。或者我只想用4个LED,传数据的时候,我只传0~15即可。
我写了两个函数来解决这些问题。这两个函数均是可变长参数,感觉还比较好用。
shiftOutQPins 这个函数可以用来解决问题2。用法和shirtOut相同,后面多了几个参数,表示你要使用的针脚。数字对应使用的Q引脚号。引脚使用的次序是按MSBFIRST和LSBFIRST来的,和输入的次序无关。
如果要们要使用Q7,Q5,Q3,Q2,前几个参数和shiftOut类似,后面加上4,7,5,3,2。4表示参数的个数。
shiftOutQPinsOrder 可以用来解决问题1和2。和shiftOutQPin不同的是,是按次序使用制定的引脚的,所以少了bitOrder参数。
shiftOutQPinsOrder(dataPin, clockPin, val, 8, 7, 6, 5, 4, 3, 2, 1, 0);
等同于shiftOut(dataPin, clockPin, MSBFIRST, val);
shiftOutQPinsOrder(dataPin, clockPin, val, 8, 0, 1, 2, 3, 4, 5, 6, 7);
等同于shiftOut(dataPin, clockPin, LSBFIRST, val);
上图应该用shiftOutQPinsOrder(dataPin, clockPin, val, 8, 6, 7, 1, 2, 3, 5, 4, 0);
这两个函数本质是对shiftOut的封装,能用shiftOut的情况皆可用这两个封装。
// 只使用74HC595等芯片部分引脚输出数据
//
// 和系统shiftOut函数参数对比
// shiftOutQPins(dataPin, clockPin, bitOrder, value, count, pins...);
// shiftOut(dataPin, clockPin, bitOrder, val);
// dataPin, clockPin, bitOrder:用法与shiftOut函数相同
// value:使用的针脚能表示的数值,如果用到n个针脚,数值最大应为2^n-1,若超过范围,只截取后面n位的数据
// count:要使用的QPin个数
// pins:使用的QPin针脚,次序可任意
//
// 使用范例
// DS,SH_CP分别接在Arduino 11,12引脚,使用Q6, Q4, Q2, Q1, Q0五个引脚,使 Q6 与 Q2 输出高电平:
// shiftOutQPins(11, 12, MSBFIRST, B10100, 5, 6, 4, 2, 1, 0);
void shiftOutQPins(uint8_t dataPin, uint8_t clockPin, uint8_t order, uint8_t value, int count, ...) {
int8_t pins[8] = { -1, -1, -1, -1, -1, -1, -1, -1};
if (count <= 0) return;
if (count > 8) count = 8;
int8_t pin;
va_list ap;
va_start(ap, count);
uint8_t index = 0;
for (uint8_t i = 0; i < count; i++) {
pin = va_arg(ap, int);
if (pin < 0 || pin > 7) continue;
pins[index] = pin;
index++;
}
va_end(ap);
qsort(pins, index, sizeof(int8_t), &ascending);
if (order == LSBFIRST) {
shiftOutQPinsOrder(dataPin, clockPin, value, 8, pins[0], pins[1], pins[2],
pins[3], pins[4], pins[5], pins[6], pins[7]);
} else {
shiftOutQPinsOrder(dataPin, clockPin, value, 8, pins[7], pins[6], pins[5],
pins[4], pins[3], pins[2], pins[1], pins[0]);
}
}
// 使74HC595等芯片按指定的引脚次序输出数据,可只使用部分引脚
//
// void shiftOutQPinsOrder(uint8_t dataPin, uint8_t clockPin, uint8_t value, int count, pins...)
// dataPin, clockPin:用法与shiftOut函数相同
// value:使用的针脚能表示的数值,如果用到n个针脚,数值最大应为2^n-1,若超过范围,只截取后面n位的数据
// count:要使用的QPin个数
// pins:使用的QPin针脚,有次序
//
// shiftOutQPinsOrder(dataPin, clockPin, val, 8, 7, 6, 5, 4, 3, 2, 1, 0);
// 等同于shiftOut(dataPin, clockPin, MSBFIRST, val);
//
// shiftOutQPinsOrder(dataPin, clockPin, val, 8, 0, 1, 2, 3, 4, 5, 6, 7);
// 等同于shiftOut(dataPin, clockPin, LSBFIRST, val);
//
// 使用范例(1)
// DS,SH_CP分别接在Arduino 11,12引脚,要按照Q7, Q6, Q2, Q1, Q0,Q3, Q5, Q4次序输出:
// shiftOutQPinsOrder(11, 12, B11111111, 8, 7, 6, 2, 1, 0, 3, 5, 4);
// 使用范例(2)
// DS,SH_CP分别接在Arduino 11,12引脚,使用Q6, Q4, Q2, Q1, Q0五个引脚,使 Q6 与 Q2 输出高电平:
// shiftOutQPinsOrder(11, 12, B10100, 5, 6, 4, 2, 1, 0);
void shiftOutQPinsOrder(uint8_t dataPin, uint8_t clockPin, uint8_t value, int count, ...) {
int8_t pins[8] = { -1, -1, -1, -1, -1, -1, -1, -1};
if (count <= 0) return;
if (count > 8) count = 8;
int8_t pin;
va_list ap;
va_start(ap, count);
uint8_t index = 0;
for (uint8_t i = 0; i < count; i++) {
pin = va_arg(ap, int);
if (pin < 0 || pin > 7) continue;
pins[index] = pin;
index++;
}
va_end(ap);
// 7, 4, 6, 1, 2 // 引脚数组pins(忽略未使用的引脚)
// 1, 2, 4, 6, 7 // 排序后数组pinsOrdered
// 4, 2, 3, 0, 1 // 7,4,6,1,2在pinsOrdered中的索引(position)
int8_t pinsOrdered[8];
memcpy(pinsOrdered, pins, sizeof(pins)); // 复制pins数据到pinsOrdered
qsort(pinsOrdered, index, sizeof(int8_t), &ascending);
uint8_t val = 0;
for (uint8_t i = 0; i < index; i++) {
uint8_t position = 0;
for (; position < index; position++) {
if (pins[i] == pinsOrdered[position]) break;
}
uint8_t bitValue = (!!(value & (1 << position))) << (index - 1 - i);
val += bitValue;
}
shiftOut(dataPin, clockPin, 1, val);
}
// 用于qsort函数,从小到大排列
int ascending(const void * a, const void * b) {
return *((int8_t *)a) - *((int8_t *)b);
}
更多相关内容 -
74HC595串口转并口芯片学习
2019-04-29 21:35:57STCP 上升沿输出到并行端口。 74595 的数据端: QA–QH: 八位并行输出端,可以直接控制数码管的 8 个段。 QH’: 级联输出端。我将它接下一个 595 的 SI 端。 SI: 串行数据输入端 74HC595 是具有 8 位移位寄存器和一...
当 MR 为高电平,OE 为低电平时,数据在 SHCP 上升沿进入移位寄存器,在
STCP 上升沿输出到并行端口。
74595 的数据端:
QA–QH: 八位并行输出端,可以直接控制数码管的 8 个段。
QH’: 级联输出端。我将它接下一个 595 的 SI 端。
SI: 串行数据输入端
74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。 移位寄存
器和存储器是分别的时钟。数据在 SCHcp 的上升沿输入,在 STcp 的上升沿进入
的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早
一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),
和一个异步的低电平复位,存储寄存器有一个并行 8 位的,具备三态的总线输
出,当使能 OE 时(为低电平),存储寄存器的数据输出到总线。74595 的控制端说明:
/SCLR(10 脚): 低点平时将移位寄存器的数据清零。通常我将它接 Vcc。
SCK(11 脚):上升沿时数据寄存器的数据移位。QA–>QB–>QC–>…–>QH;下
降沿移位寄存器数据不变。(脉冲宽度:5V 时,大于几十纳秒就行了。)
RCK(12 脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄
存器数据不变。通常我将 RCK 置为低点平,当移位结束后,在 RCK 端产生一
个正脉冲(5V 时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
/G(13 脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引
脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
下面的代码实现一个流水灯的效果
#include <reg51.h>
#include “intrins.h”
typedef unsigned int u16;
typedef unsigned char u8;sbit sck=P3^6;//移位寄存器时钟信号
sbit rck=P3^5;//存储寄存器时钟信号
sbit ser=P3^4;//串行输入
void Delay10ms() //@12.000MHz
{
unsigned char i, j;i = 117; j = 184; do { while (--j); } while (--i);
}
void delay(u8 i)
{
while(i–);
}
void Hc595(u8 sdata)
{
int i;
for(i=0;i<8;i++)
{
sck=1;
ser=sdata>>7;//取最高位
sdata<<=1;//将次高位移到最高位
sck=0;//先给一个下降沿
nop();
nop();
sck=1;//再给一个上升沿,让595移位一次} rck=0; _nop_(); _nop_(); rck=1;
}
void main()
{
u8 i;
i=1;
while(1)
{
Hc595(i);
i=crol(i,1);//循环左移一位
Delay10ms();
}}
-
ch352 pci转并口串口卡驱动(WinChipHead) 官方版
2020-07-12 09:03:36ch352pci转并口串口卡驱动是一款专门用户进行pci卡安装的驱动程序,不仅可以成功实现pci口转串口,还可可以保证能够有不俗的性能表现。有需要的朋友欢迎前来下载体验!ch352pci转并口串口卡驱动介绍现在新型号的主板... -
单片机与DSP中的串口与并口的51单片机在线编程
2020-12-09 06:01:33利用串口与并口实现51内核单片机的在线编程来源:单片机及嵌入式系统应用 作者:浙江大学 张懿摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现... -
74hc165并行口转串口芯片学习
2019-04-28 15:31:388 位移位寄存器(并行输入,互补串行输出) **时序图:**移位输出的顺序是从H->A输出到QH端口 #include <reg51.h> #include “intrins.h” typedef unsigned int u16; typedef unsigned char u8; #define...8 位移位寄存器(并行输入,互补串行输出)
**时序图:**移位输出的顺序是从H->A输出到QH端口
#include <reg51.h>
#include “intrins.h”
typedef unsigned int u16;
typedef unsigned char u8;
#define LED P0
sbit zs=P1^6;//74HC165置数移位
sbit ioclk=P3^6;//74HC165时钟控制
sbit odata=P1^7;//74HC165输出
sbit p20=P2^0;
u8 Read74hc165()//读出74hc165的数据
{
u8 i74data;
u8 i;//
zs=0;///低电平置数
nop();//延迟一个时钟周期
zs=1;///高电平移位
nop();//延迟一个时钟周期
i74data=0;
if(p20==0)
{
nop();//调试用
}
for(i=0;i<8;i++)
{
i74data=i74data<<1;//idata左移一位
ioclk=0;//下降沿,之前是高电平
nop();//下降沿做一件事,上升沿做一件事
i74data|=odata;
ioclk=1;//上升沿,之前是低电平
nop();
}
return i74data;
}
void main()
{
u8 rdata;
while(1)
{
rdata=Read74hc165();
LED=~rdata;
}}
-
CH341中文资料 USB转串口并口芯片
2010-06-30 11:19:44CH341中文资料,USB转串口并口芯片不错的资料,有助于初学者 -
多串口并口芯片
2013-05-19 09:47:11多串口并口芯片 -
PCI转串口方案
2018-03-01 11:31:15PCI转串口或并口采用芯片CH35X -
电子连接系统上的串口和并口知识分享
2021-07-27 09:08:37原标题:电子连接系统上的串口和并口知识分享“电子连接系统上的串口和并口知识分享”由电蜂优选(Elecbee.cn)为您整理,采购连接器,上电蜂优选。如今对电子产品有个简单了解的都知道,电子产品上的电路板、PCB板上...原标题:电子连接系统上的串口和并口知识分享
“电子连接系统上的串口和并口知识分享”由电蜂优选(Elecbee.cn)为您整理,采购连接器,上电蜂优选。如今对电子产品有个简单了解的都知道,电子产品上的电路板、PCB板上都会有很多连接接口。就拿电脑主机主板上的接口来说,电脑主机主板上有VGA接口、DVI接口、HDMI接口、SATA接口、RJ45网络接口、多声道音频接口、USB鼠标键盘接口等。电蜂优选工程师主要来讲解接口的另一种叫法,什么是串口,什么是并口,串口与并口的区别;
一、串口介绍
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(SerialInterface)是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。
串口划分标准:
同步串行接口(英文:SynchronousSerialInterface,SSI)是一种常用的工业用通信接口。
异步串行是指UART(UniversalAsynchronousReceiver/Transmitter),通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。UART包含TTL电平的串口和RS232电平的串口。TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平,MDS2710、MDSSD4、EL805等是RS232接口,EL806有TTL接口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
二、并口介绍
并口一般指并行接口。并行接口,指采用并行传输方式来传输数据的接口标准。从最简单的一个并行数据寄存器或专用接口集成电路芯片如8255、6820等,一直至较复杂的SCSI或IDE并行接口,种类有数十种。
一个并行接口的接口特性可以从两个方面加以描述:
1.以并行方式传输的数据通道的宽度,也称接口传输的位数;
2.用于协调并行数据传输的额外接口控制线或称交互信号的特性。数据的宽度可以从1~128位或者更宽,最常用的是8位,可通过接口一次传送8个数据位。在计算机领域最常用的并行接口是通常所说的LPT接口。
并口的主要特点:
并行接口是指数据的各位同时进行传送,其特点是传输速度快,但当传输距离较远、位数又多时,就导致通信线路复杂且成本提高。
并口的分类在IEEE1284标准中定义了多种并行接口模式,常用的有以下三种:
1.SPP(StandardParallelPort) 标准并行接口;
2.EPP(EnhancedParallelPort) 增强并行接口;
3.ECP(ExtendedCapabiliTIesPort) 扩展功能并行接口。
这几种模式因硬件和编程方式的不同,传输速度可以从50KBits/秒到2MB/秒不等。一般用以从主机传输数据到打印机、绘图仪或其它数字化仪器的接口,是一种叫Centronics的36脚弹簧式接口(通常主机上是25针D型接口,打印机上是36针Centronics接口)。
三、串口与并口的区别
串口形容一下就是一条车道,而并口就是有8个车道同一时刻能传送8位(一个字节)数据。但是并不是说并口快,由于8位通道之间的互相干扰(串扰),传输时速度就受到了限制,传输容易出错。串口没有互相干扰。并口同时发送的数据量大,但要比串口慢。串口硬盘就是这样被人们重视的。
采购连接器,上电蜂优选。“电子连接系统上的串口和并口知识分享”由电蜂运营团队编辑整理,更多连接器内容我们会陆续更新。电蜂优选海量品牌同款连接器等您选,原厂直发,ISO认证!一样的品质,不一样的价格。一年质保,购物无忧。
本文来源:http://www.renhotec.cn/返回搜狐,查看更多
责任编辑:
-
8串口扩展芯片CH438驱动
2020-11-20 11:58:158串口扩展芯片CH438驱动,C语言。并口,地址线与数据线共用。主程序只要简单地调用几个函数即可,初始化,接收,发送 -
SP2328串口扩展专用芯片及其与单片机的接口电路
2020-12-10 07:19:02摘 要: 本文介绍一种新型的单片机串口扩展芯片的功能特性以及与单片机接口的应用。关键词: 单片机; 多串口通信 在设计由多个单片机组成的数据采集电路时,一般要用多个串口在各个单片机之间进行数据通信。为了解决... -
pci60806a芯片驱动(并口驱动/串口卡驱动) 官方版
2020-06-30 14:39:58PCI60806A芯片驱动是一款适用于电脑的智能驱动程序,主要为方便电脑用户安装之后更加方便电脑串口的链接,避免部分电脑存在的问题,...PCI60806A芯片驱动介绍:PCI60806A芯片驱动,电脑加串口卡和并口卡,欢迎下载体验 -
USB转串口CH340 USB转I并口打印机prote99SEl设计硬件原理图PCB工程文件.zip
2021-03-21 19:18:50USB转串口CH340 USB转I并口打印机prote99SEl设计硬件原理图PCB工程文件, 用途: 将并口打印机转换为USB打印机 元器件说明: PCB规格: 普通双面板,板厚1.6mm PCB尺寸: DB36连接器: 40mm * 20.5mm PRT_DB36.... -
USB转串口芯片 CH340 系列
2021-02-17 14:58:24USB转串口,推出时间最早,应用最广 SOP16 CH340C USB转串口,内置晶振,引脚兼容CH340G SOP16 CH340E USB转串口,内置晶振,超小封装 ... -
CH35芯片PCI转串口/并口驱动
2011-10-13 14:43:36CH35芯片PCI转串口/并口驱动,适用于XP和LINUX系统。 -
SPI接口的多芯片扩展8串口方案的实现
2022-02-14 10:25:20本文实现了通过多片WK2124扩展8路uart接口的方法。 -
一种串口拓展方式、使用CH438芯片做并口转八串口
2019-09-17 19:25:50最近在做一个智能垃圾桶的项目,小区用的那种不是家里面的那种哈,由于需要四个垃圾桶,所以挂载多个模组就是一个比较麻烦的事情,一般STM32的芯片最多就只有八个串口,所以选择拓展串口的方式来做。 主题 使用的是... -
通信协议标准及其转换芯片(串行接口正在取代并行接口)
2022-03-17 11:13:57记录嵌入式程序开发过程中遇到的各种通信协议标准,及其相互连接时的实用转换芯片。这里只讨论各协议之间**最显著的区别**,便于理解和应用。 -
以太网转串口方案总结
2020-01-14 09:31:57以太网转串口方案总结一、W5500以太网转SPI1.W5500简介2.W5500特点3.W5500以太网芯片内核4.典型应用二、CH9121以太网转UART1.CH9121简介2.CH9121特点3.典型应用三、W5100以太网转SPI1.W5100简介2.W5100特点3.典型... -
单片机与DSP中的利用串口与并口实现51内核单片机在线编程
2020-12-13 06:18:11摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。 ... -
单片机与DSP中的利用串口与并口实现51内核单片机的在线编程
2020-12-10 11:49:06摘要:详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。关键词:... -
利用串口与并口实现51内核单片机的在线编程
2020-08-15 06:11:58详细说明利用并口模拟I2C总线协议,实现Myson MTV230芯片的在线编程(ISP)过程,以及利用PC机的串口通信实现Winbond W78E516B的在线编程(ISP)过程;阐述PC机的串口与并口在单片机开发中的应用。 -
串口服务器芯片
2021-08-08 02:09:37串口服务器芯片 内容精选换一换北京时间1月3日,Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞,漏洞详情如下:漏洞名称:Intel处理器存在严重芯片级漏洞漏洞编号:CVE-2017-5753、CVE-2017-5715、CVE-... -
pci60806a芯片驱动(并口串口卡驱动)
2019-07-28 09:10:06PCI60806A芯片驱动:并口/串口卡驱动, PCI60806AJ是PCI转串并口卡,有PCI转并口(1P),PCI转串口(1S-4S),PCI转并/串(1P2S)等功能。 1台机器可接多块串口应用: 应用于针式,喷墨,激光等打印机 POS系统 = 自动... -
USB转串口,并口芯片CH341开发包
2010-01-16 19:52:54包含CH341的驱动,开发应用接口文件,及应用实例源程序 -
利用串口与并口实现51单片机在线编程
2010-03-20 14:22:35摘要:详细说明利用并口迷你I2C总线协议,实现Myson MTV230芯片的在线ISP过程,以及利用PC机的串口通信实现Windond W78E516B的在线编程ISP过程,阐述PC机的串口与串口与并口在单片机中的应用 -
USB转串口芯片:CH340
2017-06-26 10:01:52最新推荐:免晶振(CH340E/C/B)和超小体积(CH340E) ... CH340是一个USB 总线的转接芯片,实现USB转串口或者USB转打印口。 在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串 -
为开微串口扩展芯片WK2132-ISSG.pdf
2020-01-07 13:56:26串口扩展芯片,支持UART/IIC/SPI/并行总线接口,可扩展4路串口。硬件简单,电源种类单一。串口设计简单易操作。 -
串口屏还是并口屏好用?
2022-04-21 09:20:07串口屏还是并口屏好用?区别在哪里? -
LT268 全网最方便设计的TFT-LCD 串口屏芯片
2022-02-14 21:57:17全国设计最方便的串口屏方案