導航:首頁 > 操作系統 > 單片機串並轉換

單片機串並轉換

發布時間: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、根據以上的分析,模塊化的編寫程序,逐步完成。

閱讀全文

與單片機串並轉換相關的資料

熱點內容
魔獸重載命令 瀏覽:417
自動戰斗命令 瀏覽:187
備案時雲伺服器怎麼填寫 瀏覽:982
http代理伺服器是什麼 瀏覽:550
貴州選課伺服器密碼忘了怎麼找回 瀏覽:601
為什麼安卓手機剛買的就卡 瀏覽:241
push是什麼安卓系統應用 瀏覽:571
scan2pdf 瀏覽:404
有關程序員小說 瀏覽:49
linux文件統計命令 瀏覽:355
mac轉碼解壓 瀏覽:879
如何檢測開啟samba伺服器 瀏覽:674
雙系統關閉win10加密 瀏覽:42
歡樂頌2程序員 瀏覽:227
有python基礎學java會不會快一些 瀏覽:508
二級計算機有python嗎 瀏覽:776
pythoncp27 瀏覽:273
解壓球里的液體出來了可以粘嗎 瀏覽:452
w5500單片機 瀏覽:114
雲伺服器廠商為什麼一直虧損 瀏覽:690