导航:首页 > 操作系统 > 单片机串并转换

单片机串并转换

发布时间:2022-08-11 17:32:40

‘壹’ 如何用单片机将并行信号转为串行信号

这个好办,你用P0或P1,P2端口接收并行数据,然后再用P3^0和P3^1发送即可


并行通信采用8线制通信,即二进制传输模式,每一个数据位都占用一个IO口


但因其速度快而被大家经常使用,串口为三线制,发送与接收和信号地三根


单片机内部已经集成了串口通信模块 ,可以使用 SBUF 进行数据的发送与接收


转换的方法其实很简单,利用任何一个P口,P3端口除外


把P口的8个子端口分别对应并行的8个端口即可,然后用P口的总称作为变量使用


SBUF=P1 假设你使用P1口,就这么简单

‘贰’ 如何将单片机中字符串转unicode码

用MultiByteToWideChar和WideCharToMultiByte可以做到编码的转换。MultiByteToWideChar是一个windowsAPI函数,该函数映射一个字符串到一个宽字符(unicode)的字符串。函数原型:intMultiByteToWideChar(UINTCodePage,DWORDdwFlags,LPCSTRlpMultiByteStr,intcchMultiByte,LPWSTRlpWideCharStr,intcchWideChar);参数:CodePage:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI字符集;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号字符集(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。dwFlags:一组位标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。你可以指定下面是标记常量的组合,含义如下:MB_PRECOMPOSED:通常使用预作字符——就是说,由一个基本字符和一个非空字符组成的字符只有一个单一的字符值。这是缺省的转换选择。不能与MB_COMPOSITE值一起使用。MB_COMPOSITE:通常使用组合字符——就是说,由一个基本字符和一个非空字符组成的字符分别有不同的字符值。不能与MB_PRECOMPOSED值一起使用。MB_ERR_INVALID_CHARS:如果函数遇到无效的输入字符,它将运行失败,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。MB_USEGLYPHCHARS:使用象形文字替代控制字符。组合字符由一个基础字符和一个非空字符构成,每一个都有不同的字符值。每个预作字符都有单一的字符值给基础/非空字符的组成。在字符è中,e就是基础字符,而重音符标记就是非空字符。函数的缺省动作是转换成预作的形式。如果预作的形式不存在,函数将尝试转换成组合形式。标记MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而标记MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS则不管其它标记如何都可以设置。lpMultiByteStr:指向将被转换字符串的字符。cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。lpWideCharStr:指向接收被转换字符串的缓冲区。cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字符个数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。返回值:如果函数运行成功,并且cchWideChar不为零,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;如果函数运行成功,并且cchWideChar为零,返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。如果函数运行失败,返回值为零。若想获得错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。WideCharToMultiByte,该函数映射一个unicode字符串到一个多字节字符串。函数原型:intWideCharToMultiByte(UINTCodePage,//指定执行转换的代码页DWORDdwFlags,//允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符LPCWSTRlpWideCharStr,//指定要转换为宽字节字符串的缓冲区intcchWideChar,//指定由参数lpWideCharStr指向的缓冲区的字符个数LPSTRlpMultiByteStr,//指向接收被转换字符串的缓冲区intcchMultiByte,//指定由参数lpMultiByteStr指向的缓冲区最大值LPCSTRlpDefaultChar,//遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符LPBOOLpfUsedDefaultChar//至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE);参数:CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值:CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线程ANSI代码页;CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换返回值:如果函数运行成功,并且cchMultiByte不为零,返回值是由lpMultiByteStr指向的缓冲区中写入的字节数;如果函数运行成功,并且cchMultiByte为零,返回值是接收到待转换字符串的缓冲区所必需的字节数。如果函数运行失败,返回值为零。若想获得错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。注意:指针lpMultiByteStr和lpWideCharStr必须不一样。如果一样,函数将失败,GetLastError将返回ERROR_INVALID_PARAMETER的值。WindowsCE:不支持参数CodePage中的CP_UTF7和CP_UTF8的值,以及参数dwFlags中的WC_NO_BEST_FIT_CHARS值。

‘叁’ c51单片机串并口转换程序

1 系统的组成和工作原理
多功能温度控制系统的结构如图1所示,系统由六部分组成:控制核心部分、温度数据采集部分、加热装置控制部分、液晶显示部分、按键输入部分和报警提示部 分。单片机启动温度采集电路完成温度的一次转换,然后读出转换后的数字量并转化成当前的温度呈现在显示模块中,并将当前的温度与通过按键输入电路设定的保 持恒温度数进行比较,以实现温度的控制。还可以通过按键设置温度的上下限值以实现超温或低温报警提示功能。本系统的设计目标要对温度的控制精度达到 0.1℃。

1.1 报警电路
报警电路采用蜂鸣器作为发声装置,当温度高于设定的上限值或低于下限值,给蜂鸣器送周期为1s,占空比为50%的方波,报警的时间可以持续1分钟或等待按 键解除报警,这由软件控制实现。

1.2 按键电路
采用2×3的小键盘,键盘的识别可以采用两种方法:行扫描法和行反转法。两种方法都要注意消除按键的抖动。文中采用行扫描法并做成子程序,出口参数为按键 的键值。定义键K1设置TH,K2设置TL,K3调高TH或TL,K4调低TH或TL,K5对TH或TL的数值进行确认。
1.3 温度检测电路
温度检测电路采用智能温度传感器DSl8820,它与单片机相连只需要3线,减少了外部的硬件电路。DSl8820主要性能特点如下:
(1)测温的范围为-55~125℃,最大分辨率可以达到0.0625℃;
(2)电源电压范围为3.0~5.5V;
(3)供电模式:寄生供电和外部供电;
(4)封装形式有两种:3脚的TO-92封装和8脚的SOIC封装;
(5)可编程的温度转换分辨率,分辨率为9~12位(包括1位符号位),由配置寄存器决定具体位数,配置寄存器的格式如表1所示。

其中RlR0是用来设定分辨率的,分辨率的定义如表2所示。

由表2可以看出,分辨率设定得越高,温度转换所需要的时间就越长,因此应根据实际应用的需要来选择合适的分辨率。本文中选取12位分辨率,每隔1秒检测一 次温度。12位分辨率的温度数据值格式如下:

当S=0表示测得的温度为正值,当S=l表示测得的温度为负值。
1.3.1 DSl8820的存储器结构
DSl8820的存储器有高速暂存RAM和非易失性电擦写EEPROM。高速暂存RAM的内容从低字节到高字节9个字节依次为:温度LSB、温度MSB、 高温限值字节TH、低温限值字节TL、配置寄存器、保留、保留、保留,最后一个字节是前8个字节的CRC码。EEPROM用来存储TH和TL。
1.3.2 温度数据的处理方法
从DSl8820读出的两个字节的二进制值温度必须先转换成十进制数值,然后才能将其ASCII码送往LCDl602显示。12位的分辨率,温度是以 0.0625步进的,由于两个字节的温度采用补码表示,所以先判断读出温度的最高位是0还是1,即判断是正温还是负温,然后对其求补码转化成正温,之后将 高字节的低4位和低字节的高4位组成一个字节,这个字节的二进制值不断除以10得出的余数即为温度值的个、十、百位值。若读出的温度数值是负数,显示处理 时,在温度数的前面人为显示负号即可。对小数部分的温度只需将低字节的低4位乘以0.0625,然后对乘积取其小数点后的一位数即可。

1.3.3 DSl8820的控制步骤
(1)首先对DSl8820进行复位。由单片机将数据线DQ拉至低电平480-960 μs,然后将DQ拉高15-60 μs,以便单片机检测到DSl8820送来的低电平响应。然后检测DQ,若DQ仍然为高电平,则复位操作失败,可采用循环的方式再次对其进行复位;若DQ 为低电平,则复位操作成功。
(2)DSl8820的ROM操作命令。DSl8820复位后,主机可以发器件ROM的操作命令如读ROM[33H]、匹配ROM[55H]、跳过 ROM[0CCH],报警搜索[4EH]等。在单点总线的情况下,可发跳过ROM[0CCH]操作命令,以节省时间。另外,文中有报警的功能,温度转换后 还需要发报警搜索命令,该命令会将最近一次测得的温度值T与高速RAM中的TH或TL作比较,若T>TH或T<TL,则该器件内的报警标志位 置位,并对主机发出的报警搜索命令作出响应。
(3)DSl8820的存储器操作命令。如启动温度转换命令[44H],写入命令[4EH](写入该命令后,紧接着要写入报警上限TH,报警下限TL及配 置寄存器字节),读暂存器RAM的内容命令[0BEH](读取将从第一个字节开始一直到第9个字节结束,如仅需要部分字节,主机可以在合适的时刻发复位命 令来终止读取)及复制命令[48H](把暂存器RAM的第2、3、4字节转存到DSl8820的EEROM中)等。
(4)DSl8820的ROM或RAM操作的总线读写时序。对于读时序,首先将DQ拉低并延时1-15μs以内(延时时间不能太长),然后将DQ拉高并延 时几个μs后再读取DQ的值,读完一位后需要延时45 μs以上才能读取下一位;对于写时序,先将DQ拉低10-15μs,接着向总线写入数据并延时50μs以上,最后将DQ拉高1μs以上再进行下一位的写 入。
1.4 液晶显示模块
采用的是长沙太阳人电子有限公司生产的SMCl602A。
1.4.1 主要技术参数
芯片的工作电压4.5~5.5V,能显示两行,每行显示16个字符,字符的大小为2.95×4.35mm。
1.4.2 接口信号说明
除电压、背光引脚及8个I/O引脚外,主要的控制引脚还有数据/命令选择RS引脚,该引脚为高电平时表示I/O引脚出现的是数据,该引脚为低电平时表示 I/O引脚出现的是命令;读/写选择引脚及使能引脚E(该引脚为高电平时对SMCl602A的操作才有效)。
1.4.3 指令说明
(1)初始化设置
a.显示模式设置。指令码:00111000b,用于设置16×2显示,5×7点阵。
b.显示开/关及光标设置。二进制指令码:00000DCB中D位用来控制显示开或关,C位用来控制显示光标,B位控制光标是否闪烁。二进制指令 码:000001NS中N位控制读写一个数据后地址指针和光标加或减1,S位控制字符的移动。
c.数据指针设置。指令码:80H+地址码(0-27H,40H-67H)用于设置数据指针。
(2)其他设置。如指令码01H:显示清屏且数据指针清零。
1.4.4 LCDl602的初始化步骤
(1)延时15ms,写指令38H(不检测忙信号);
(2)延时5ms,写指令38H(不检测忙信号),上述过程执行两遍,后面的过程每次写指令、读/写数据之前均需要检测忙信号;
(3)写指令38H:显示模式设置;
(4)写指令08H:关闭显示;
(5)写指令0lH:清屏且数据指针清零;
(6)写指令06H:字符不移动,光标和指针加1;
(7)写指令0FH:显示开,光标闪烁。
1.5 恒温保持控制模块
选用6V固态继电器作为开关器件,通过控制其断与通的时序从而控制加热器件的工作时长,以实现样品的恒温保持功能。

2 系统硬件电路的设计
该系统的主要电路原理图如图2所示。系统中使用USB口提供5V电源的电路;使用RS232串口通过P3.0和P3.1烧写程序的电路;以及使用继电器控 制的恒温保持电路等在原理图中并未画出。

3 系统的软件设计
系统总的流程图如图3所示。系统程序主要有主程序和LCDl602初始化子程序及读写时序子程序、DSl8820复位及读写时序子程序、键盘扫描子程序、 温度数据处理子程序等构成。

4 程序的编辑及调试
编程语言可以采用汇编语言,也可以采用C51语言。本文采用汇编语言,使用Keil C软件新建一个工程,然后新建一个文件输入源程序并保存成.asm格式,并将该源文件添加到刚刚新建的工程,随后编译链接后生成十六进制文件 (.HEX),最后使用烧写软件stc-isp-v3.9l通过RS232串口将十六进制文件烧写进单片机的Flash中运行程序即可。

5 结论
本文设计的多功能温度控制器体积小、功耗低、可靠性高,实验表明,对温度的控制精度达到了0.1℃的设计目标。

‘肆’ 单片机实现并行输入转串行输出

74hc595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在sck的上升沿输入,在rck的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(si),和一个串行输出(q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能
oe时(为低电平),存储寄存器的数据输出到总线。
qb--|1
16|--vcc
qc--|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,
0x66,0xb6,0xbe,0xe0,
//4,5,6,7,
0xfe,0xe6,0xee,0x3e,
//8,9,a,b,
0x9c,0x7a,0x9e,0x8e};//c,d,e,f
//#####################################################
//名称:wr595()向595发送一个字节的数据
//功能:向595发送一个字节的数据(先发低位)
//#####################################################
void
wr595(uchar
wrdat)
{
uchar
i;
sclk=0;
st=0;
for(i=8;i>0;i--)//循环八次,写一个字节
{
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=0;i<4;i++)
//循环4次写4个数据
{
wr595(led_7seg[i]);
//传送显示数据
port_led=~wx;
//送位选信号
wx<<=1;
//位选信号左移,准备显示下一个数字
delay(50);
//延时,(决定亮度,和闪烁)
}
}
//##########################################################
//主函数
//##########################################################
main(void)
{
while(1)
{
wr7leds();
//向74hc595发送数据并显示
}
}

‘伍’ 求51单片机字符串转换程序,C语言哦~~

char*
D2C
(char*
Str_in)
{
char
l;//长度
char
i,j;
char
Str_out[32];//
输出最多32字节,或者设为其他数字
char*
ss=Str_in;
char
cc=Str_out;
for(l=0;l++;*(ss++));//
检查字符串长度
l=l/2;//
输出的字符串长度
ss=Str_in;
for(i=0;i
'0'))
{
j=*ss-'0';
}
else
if((*ss)<='F')&&(*ss>'A'))
{
j=*ss-'A';
j=j+10;
}
else
if((*ss)<='f')&&(*ss>'a'))
{
j=*ss-'a';
j=j+10;
}
else
{
break;//
非法字符
}
ss++;
*cc=j;
*cc<<=4;
if((*ss)<='9')&&(*ss>'0'))
{
j=*ss-'0';
}
else
if((*ss)<='F')&&(*ss>'A'))
{
j=*ss-'A';
j=j+10;
}
else
if((*ss)<='f')&&(*ss>'a'))
{
j=*ss-'a';
j=j+10;
}
else
{
break;//
非法字符
}
ss++;
*cc=*cc+j;
cc++;
}
*cc=0;
return
Str_out;
}

‘陆’ 单片机串口通信原理

异步通信
固定波特率下传送0,1信号
就是在规定的时间间隔内传送0.1数据

‘柒’ 单片机串并转换

1、0-F,是16个键值,可以采用键盘阵列完成,占用 8 个 IO 口。
2、LED的显示,LED 是七段的(ABCDEFG),占用 7 个 IO 口。
3、输入数字转换为二进制,占用 4 个 IO 口。
4、根据以上的分析,模块化的编写程序,逐步完成。

阅读全文

与单片机串并转换相关的资料

热点内容
吃东西素材声控讲故事解压 浏览:906
安卓如何知道app启动 浏览:339
主流网站编程语言 浏览:228
安卓511系统还能下什么软件 浏览:240
pdf格式如何转换jpg 浏览:201
javaascii字母 浏览:489
国外免费加密软件 浏览:957
韩国下女在线免费观看 浏览:977
esp8266编程指南 浏览:782
隔壁的姐妹们2韩国中字 浏览:20
退伍特种兵受总裁攻 浏览:387
和程序员聊天真累吗 浏览:194
被挡访客查看加密相册什么意思 浏览:861
javaio删除文件 浏览:76
女配重生不再纠缠男主 浏览:197
毒液2哪个平台能看 浏览:856
唐县解压手续费 浏览:7
爱情电影网伦理片 浏览:903
生成hostkey算法 浏览:621
重生香港买股票起家 浏览:623