电脑com口进入的串行数据怎么转化成并行数据的

电脑com口进入的串行数据怎么转化成并行数据的,第1张

串行数据(位流)转换为并行数据(字节)是由串口硬件电路完成的。转搜禅换过程大致为:

1)串口开始按位接收,存入位移寄存器世携尘。

2)当位移寄存器接收到一个字节(8位)后,再将位移寄存器的字节值(这时,数据已经成为并行数据了),移动到接收缓隐掘冲寄存器。

至此,完成了串行到并行的转换。

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCK的上升沿输入,在RCK的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(SI),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总线。

QB--|1 16|--VccQC--|2 15|--QA

QD--|3 14|--SI

QE--|4 13|--/G

QF--|5 12|--RCK

QG--|6 11|--SCK

QH--|7 10|--/SCLR

GND-|8 9|--QH'

74595的数据端:

QA--QH: 八位并行输出端,可以直接控制数码管的8个段。

QH': 级联输出端。我将它接下一个595的SI端。

SI: 串行数据输入端。

74595的控制端说明:

/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。

SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)

RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。

/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

74595的主要优点是具有冲迟山数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。

应用如下:

以下是用C语言编写的,采用动态扫描方式显示0123这四个数字,此程序是经过模拟仿真的。

//#################################################################

//程序名称:8位数码管显示程序

//程序功能:让8位数码管显示display_7leds[8]中的内容

//程序说明:使用时改变display_7leds[8]中的内容,调用wr7leds()函数即可

//#################################################################

#include <reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

//#############管脚定义#######################

#define PORT_LED P0 //LED位选信号输入管脚

sbit sclk=P2^0//595移位时钟信号输入端

sbit st=P2^1//595锁存信号输入端

sbit da=P2^2//595数据信号输入端

//#############################################

//共阴极数码管显示代码:7 6 5 4 3 2 1 0

// a b c d e f

uchar code LED_7SEG[16]={0xfc,0x60,0xda,0xf2,//0,1,2,3,<br>0x66,0xb6,0xbe,0xe0, //4,5,6,7,<br>0xfe,0xe6,0xee,0x3e, //8,9,A,b,<br>0x9c,0x7a,0x9e,0x8E}//C,d,E,F

//#####################################################

//名称:wr595()向595发送一个字节的数据

//功能:向595发旦野送一个字节的数据(先发低位)

//#####################################################

void wr595(uchar wrdat)

{

uchar i

sclk=0

st=0

for(i=8i>0i--)//循环八次,写一散中个字节

{

da=wrdat&0x01//发送BIT0 位

wrdat>>=1//要发送的数据右移,准备发送下一位

sclk=0//移位时钟上升沿

_nop_()

_nop_()

sclk=1

_nop_()

_nop_()

sclk=0

}

st=0//上升沿将数据送到输出锁存器

_nop_()

_nop_()

st=1

_nop_()

_nop_()

st=0

}

//##########################################################

// 延时函数

//##########################################################

void delay(uint del)

{

while(del--)

{

}

}

//##########################################################

//名称:wr7leds()8个led显示数字函数

//功能:向595发送一个字节的数据,然后发送位选信号

//##########################################################

void wr7leds(void)

{

uchar i,wx

wx=0x01//位选信号初始化

for(i=0i<4i++) //循环4次写4个数据

{

wr595(LED_7SEG[i])//传送显示数据

PORT_LED=~wx//送位选信号

wx<<=1//位选信号左移,准备显示下一个数字

delay(50)//延时,(决定亮度,和闪烁)

}

}

//##########################################################

//主函数

//##########################################################

main(void)

{

while(1)

{

wr7leds()//向74HC595发送数据并显示

}

}

#include "stdafx.h"

#include<stdio.h>

#include<math.h>

#include <蠢袜或time.h>

#include <omp.h>

#include<iostream>

using namespace std

//设置全局数组——牛顿 科特斯公式系数表

double C[6][7]={{1.0/2,1.0/2},{1.0/6,4.0/6,1.0/6},{1.0/8,3.0/8,3.0/8,1.0/8},{7.0/90,16.0/45,2.0/15,16.0/45,7.0/90},{19.0/288,25.0/96,25.0/144,25.0/144,25.0/96,19.0/188},{41.0/840,9.0/35,9.0/280,34.0/好贺105,9.0/280,9.0/35,41.0/840}}

int _tmain(int argc, _TCHAR* argv[])

{

double a=0.0,b=0.0,Cotes=0.0,begin ,end

int n=0

cout<<"请分别输入积分段的下限和上限:"<<endl

cin>>a>>b

cout<<"请输入您想设置的分段数(节点数-1):"<<endl

cin>>n

//检测输入

while(!(n>=1&&n<=6))

{

cout<<"分段数最多为6,请重新输入"<<endl

cin>>n

}

begin=(double)clock() /*计算开始时间的函数*/

omp_set_num_threads(2)

#pragma omp parallel for reduction(+:Cotes)

for(int j=0j<=nj++) //计算科特斯公式的值

Cotes=Cotes+C[n-1][j]*log((j*(b-a)/n)+a)//函数f(x)为f(x)=ln x 这里可以改成想要带伍的函数

Cotes=(b-a)*Cotes

cout<<"牛顿—柯特斯公式计算积分的结果是"<<Cotes<<endl

end=(double)clock() //牛顿—柯特斯公式积分计算的结束时间

printf("\n牛顿—柯特斯公式计算积分所需要的时间是:%f秒\n",(end-begin)/ (double)CLOCKS_PER_SEC)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12508662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存