日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 硬件介紹:硬件部分只需字符型輸入輸出設(shè)備:scanf從輸入字符型設(shè)備讀取字符,printf輸出到字符型輸出設(shè)備。在這里,我選用的字符型輸入設(shè)備是超級終端,通過串口與單片機(jī)連接,輸入字符;輸出設(shè)備是超

硬件介紹:

硬件部分只需字符型輸入輸出設(shè)備:scanf從輸入字符型設(shè)備讀取字符,printf輸出到字符型輸出設(shè)備。在這里,我選用的字符型輸入設(shè)備是超級終端,通過串口與單片機(jī)連接,輸入字符;輸出設(shè)備是超級終端和12864的液晶。scanf從串口讀入字符,printf輸出字符到串口和液晶。


有關(guān)串口的預(yù)提信息參考:MSP430程序庫<二>UART異步串口。


有關(guān)液晶的具體信息參考:MSP430程序庫<三>12864液晶程序庫。


scanf還可以從按鍵讀取信息,可以參考移置方法自行移置。


程序?qū)崿F(xiàn):

printf

單片機(jī)在調(diào)用printf時(shí),printf是負(fù)責(zé)將數(shù)據(jù)解析成ASCII碼流,通過調(diào)用putchar函數(shù)依次將字符發(fā)出。如果在putchar內(nèi)編寫從串口發(fā)送一字節(jié)數(shù)據(jù),則printf的結(jié)果將從單片機(jī)串口發(fā)送出;如果putchar是向液晶寫字符,讓液晶顯示一個(gè)字符,則printf的結(jié)果將顯示在液晶上。本程序?qū)崿F(xiàn)putchar同時(shí)向串口和液晶同時(shí)發(fā)送一個(gè)字符(液晶是顯示一個(gè)字符)。


putchar函數(shù)如下:


int putchar(int ch)

{

putchar2Com(ch);

putchar2Lcd(ch);

return (ch);

}

程序先向串口發(fā)送一個(gè)字符,然后像向晶發(fā)送字符。


其中:putchar2Com,向串口發(fā)送一個(gè)字符,代碼如下:


int putchar2Com(int ch)

{

if (ch == 'n') // 'n'(回車)擴(kuò)展成 'n''r' (回車+換行)

{

UartWriteChar('r') ; //0x0d 換行

}

UartWriteChar(ch); //從串口發(fā)出數(shù)據(jù)

return (ch);

}

代碼僅僅調(diào)用向串口寫字符的函數(shù)UartWriteChar(ch)(詳見Uart.c,在<二>中有介紹),當(dāng)要輸出換行時(shí),需先輸出’n’將光標(biāo)移至本行首位置,還需要’r’(換行)才能將光標(biāo)置于下一行起始位置,即將’n’擴(kuò)展為’r’,’n’兩個(gè)字節(jié)依次發(fā)出。


purchar2Lcd函數(shù)比較復(fù)雜,因?yàn)槲宜褂玫?2864液晶是中文字庫的液晶,每行8個(gè)地址,可以顯示8個(gè)中文字符或16個(gè)英文字符,而putchar只發(fā)出一個(gè)字節(jié),需要判斷每個(gè)地址的前半字還是后半字(因?yàn)槊總€(gè)字可以顯示中文,如果中文的兩個(gè)字節(jié)在相鄰的兩個(gè)地址上,將不會(huì)顯示,或是顯示亂碼)。


上代碼:


int putchar2Lcd(int ch)

{

char addr,dat;

if (ch == 'n') // 'n'(回車),換行

{

ChangeNextRow();

}

else

{

addr = LcdReadAddr();

if(ch < 0x80)

{

LcdWriteData(ch);

}

else

{

LcdWriteData(0x20); //寫入一個(gè)空字符,根據(jù)地址判斷是否為前半字

if(addr == LcdReadAddr()) //前半字 從新寫入ch字符

{

LcdWriteComm(addr);

LcdWriteData(ch);

}

else

{

LcdWriteComm(addr);

dat = LcdReadData();

if(dat < 0x80) //前一個(gè)字符是英文字符

{

LcdWriteData(0x20); //空格

}

LcdWriteData(ch);

}

}

}

if((addr != LcdReadAddr()) && //寫入的是行最后位的后半字則換行

(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

{

ChangeNextRow();

}

return (ch);

}

這個(gè)函數(shù)首先判斷換行;然后處理其他一般字符,如果是英文字符,不用考慮前后半字,只需正常寫入液晶即可;如果是中文字符,在判斷是否是前半字,前半字則直接寫入,后半字則判斷之前寫入的前半字是否是中文,是則直接寫入,不是則把英文字符移入后半字,然后寫入;最后判斷是否到行尾,是則換行。


程序更新為:更新日期:20110821 18:51

目的是修復(fù)原來,行尾前半字為英文,再輸入中文會(huì)顯示亂碼。

int putchar2Lcd(int ch)

{

char addr,dat;

char changeRowFlag = 0;

if (ch == 'n') // 'n'(回車),換行

{

ChangeNextRow();

changeRowFlag = 1;

}

else if (ch == 'b') // 'b' (退格)

{

BackSpace();

}

else

{

addr = LcdReadAddr();

if(ch < 0x80)

{

LcdWriteData(ch);

}

else

{

LcdWriteData(0x20); //寫入一個(gè)空字符,根據(jù)地址判斷是否為前半字

if(addr == LcdReadAddr()) //前半字 從新寫入ch字符

{

LcdWriteComm(addr);

LcdWriteData(ch);

}

else

{

LcdWriteComm(addr);

dat = LcdReadData();

if(dat < 0x80) //前一個(gè)字符是英文字符

{

LcdWriteData(0x20); //空格

}

if((addr != LcdReadAddr()) && //寫入的是行最后位的后半字則換行

(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

{

ChangeNextRow();

changeRowFlag = 1;

}

LcdWriteData(ch);

}

}

}

if((addr != LcdReadAddr()) && //寫入的是行最后位的后半字則換行,且未換過行

(changeRowFlag == 0) &&

(addr==0x87 || addr==0x97 || addr==0x8F || addr==0x9F))

{

ChangeNextRow();

}

return (ch);

}

前后半字判斷方法如下:讀液晶地址,向液晶寫入一個(gè)空格,再讀地址,兩地址相同則是前半字,不同則是后半字。讀地址函數(shù)在Lcd12864.c中,新加入函數(shù),代碼如下:


char LcdReadAddr()

{

char ch;

WaitForEnable();

CLR_RS;

SET_RW;

DATA_DIR_IN;

SET_EN;

_NOP();

ch = DATA_IN; //讀數(shù)據(jù)

CLR_EN;

DATA_DIR_OUT;

return (ch|0x80);

}

這個(gè)是讀地址,ch|0x80是因?yàn)閷懭胍壕У刂肥孜粦?yīng)為1.。


液晶中新加入兩個(gè)函數(shù),一個(gè)是上邊的讀地址,另外一個(gè)是讀數(shù)據(jù);作用是讀取液晶當(dāng)前地址處的數(shù)據(jù),從而判斷之前半字是否是中文。代碼如下:


char LcdReadData()

{

char ch;

WaitForEnable();

SET_RS;

SET_RW;

DATA_DIR_IN;

SET_EN;

_NOP();

ch = DATA_IN; //讀數(shù)據(jù)

CLR_EN;

DATA_DIR_OUT;

return ch;

}

另外 putchar還調(diào)用了換行——ChangeNextRow函數(shù),完成液晶輸出換至下一行。


代碼如下:


void ChangeNextRow()

{

char addr;

addr = LcdReadAddr(); //當(dāng)前地址

if(addr <= 0x88)

{

LcdWriteComm(0x90);

}

else if(addr <= 0x90)

{

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉