www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 消費(fèi)電子 > 消費(fèi)電子
[導(dǎo)讀]1.項(xiàng)目介紹不管是LED數(shù)碼管,還是段碼式LCD液晶顯示屏,在顯示上都是由各個(gè)段位組合顯示成我們想要的字符的。本項(xiàng)目中采用的是4位段碼式LCD顯示屏,每一位由A~G共7個(gè)段位組

1.項(xiàng)目介紹

不管是LED數(shù)碼管,還是段碼式LCD液晶顯示屏,在顯示上都是由各個(gè)段位組合顯示成我們想要的字符的。本項(xiàng)目中采用的是4位段碼式LCD顯示屏,每一位由A~G共7個(gè)段位組成,另外還有P1~P4共4個(gè)點(diǎn)段位。為了實(shí)現(xiàn)在顯示程序上的可移植性和通用性,本項(xiàng)目通過數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)形式結(jié)合驅(qū)動(dòng)LCD顯示芯片內(nèi)部RAM的操作方法,給出一種既適合LED數(shù)碼管,也適合段碼式LCD液晶顯示屏的程序設(shè)計(jì)方法。

2.開發(fā)環(huán)境

軟件開發(fā)環(huán)境:Keil MDK 5.25,HC32005_SDK

硬件設(shè)計(jì)軟件:立創(chuàng)EDA

3.硬件設(shè)計(jì)

3.1.原理圖設(shè)計(jì)

硬件設(shè)計(jì)上使用了華大的Cortex-M0+內(nèi)核的HC32F005C6PA作為主控芯片,整個(gè)系統(tǒng)電壓工作在3.3V~5V之間,簡單的電源設(shè)計(jì)和復(fù)位電路,使用內(nèi)部24MHz晶振,通用的SWD在線調(diào)試和下載接口,在硬件外圍電路上省了不少的空間。4個(gè)用戶自定義按鍵、2個(gè)串口全部引出,一個(gè)連接SP232芯片進(jìn)行RS-232通訊,另一個(gè)直接引出TTL作調(diào)試監(jiān)控用、還有一個(gè)4位的LCD段碼式液晶屏,使用TM1621驅(qū)動(dòng)芯片,作為顯示接口。

3.2.PCB設(shè)計(jì)

 

 

 

 

3.3.焊接調(diào)試

 

 

 

 

 

 

 

 

3.4.華大MCU初次使用,調(diào)試體會(huì)

 

[!--empirenews.page--]

 

 

 

所有的芯片,我都喜歡從新建工程開始研究,華大的MCU也不例外,官方也給出了MCU開發(fā)工具用戶手冊,可以對照手冊一步一步的新建工程。但是讓我困惑的第一件事是我調(diào)用delay函數(shù)進(jìn)行GPIO口翻轉(zhuǎn)的實(shí)驗(yàn)與官網(wǎng)給的DEMO例程實(shí)際的效果不一樣,很明顯是我的代碼有問題,GPIO口通過示波器測出來的速度明顯快相當(dāng)多,因?yàn)榈谝淮斡?,真是無從下手,一步步的從startup_hc32f005.s文件分析起,后來看到system_hc32f005.c,發(fā)現(xiàn)KEIL創(chuàng)建自動(dòng)生成的這兩個(gè)文件和官方的DEMO例程不一樣,也是因?yàn)閟ystem_hc32f005.c文件中的一些初始化和調(diào)用導(dǎo)致了我芯片啟動(dòng)后時(shí)鐘配置不正確,導(dǎo)致了GPIO口翻轉(zhuǎn)過快的問題。后面也是因?yàn)檫@邊的兩個(gè)文件其它部分的不一致導(dǎo)致了串口異常的問題,所以個(gè)人建議是:如果你要自建工程,還是用官方DEMO中的startup_hc32f005.s、system_hc32f005.c和system_hc32f005.h這3個(gè)文件覆蓋KEIL自動(dòng)生成的這幾個(gè)文件。第2個(gè)需要注意的地方就是如果你要使用定時(shí)器、串口功能模塊之前,一定要開啟相應(yīng)模塊對應(yīng)的時(shí)鐘,這個(gè)大家都清楚;但別忘了,華大的MCU還需要配置PCLK等一些初始化操作,具體一可以參考代碼board.c文件中的BSP_InitSysClock函數(shù)。第3個(gè)就是串口模式的選擇和波特率的設(shè)定,這個(gè)跟其它的MCU,比如說ST之類的,有點(diǎn)不太一樣,具體一可以把這一塊的用戶手冊看一下,有助于加深理解,我也是想當(dāng)然跳了不少坑……

當(dāng)然華大半導(dǎo)體作為國產(chǎn)芯片,個(gè)人感覺還是不錯(cuò)的,通過這一個(gè)項(xiàng)目的前期調(diào)試,耐下心來,一兩天就能上手了;性價(jià)比也是相當(dāng)?shù)母撸档猛扑]!

4.程序設(shè)計(jì)

4.1.TM1621驅(qū)動(dòng)設(shè)計(jì)

TM1621芯片內(nèi)部帶有靜態(tài)顯示內(nèi)存(RAM),RAM以32*4位格式存儲(chǔ)所顯示的數(shù)據(jù)。RAM的數(shù)據(jù)直接映像到LCD驅(qū)動(dòng)器,也就是說可以通過修改RAM的數(shù)據(jù)內(nèi)容,來修改液晶屏顯示的內(nèi)容。對應(yīng)的COM和SEG所對應(yīng)的RAM映像圖可以參考TM1621的數(shù)據(jù)手冊。對于TM1621我們有4個(gè)基礎(chǔ)的主要函數(shù),分別如下所述:

4.1.1.void TM1621_Write(uint16_t value, uint8_t length),這是TM1621最底層的函數(shù), 是將value這個(gè)數(shù)據(jù)的高length個(gè)bit位寫入到TM1621芯片內(nèi)部,例如:

TM1621_Write(0x8020/*0b 1000 0000 0010 0000*/, 0x0C); // SYS_EN,將0x8020這個(gè)數(shù)值的高12位寫入到TM1621芯片

4.1.2.void TM1621_UpdateRAM(void),更新TM1621顯示RAM,將全局?jǐn)?shù)組暫存儲(chǔ)的RAM數(shù)據(jù)統(tǒng)一一次性的更新到TM1621芯片內(nèi),使用的是TM1621的WRITE命令,命令概述詳見TM1621數(shù)據(jù)手冊。

4.1.3.void TM1621_ModifyRAM(uint8_t index, uint8_t bit, uint8_t flag),修改TM1621顯示RAM,根據(jù)數(shù)據(jù)結(jié)構(gòu)及算法確認(rèn)修改的TM1621顯示RAM的下標(biāo)和位下標(biāo),flag是置位和清除的操作標(biāo)志。統(tǒng)一修改完成后,需要調(diào)用TM1621_UpdateRAM函數(shù)更新TM1621的顯示RAM,更新液晶屏顯示。

4.1.4.void TM1621_Init(void),TM1621芯片初始化配置操作,詳見程序設(shè)計(jì)說明。

4.2.顯示設(shè)計(jì)

4.2.1.定義顯示字符和段位的映射表,如下代碼給出了38個(gè)常用的顯示字符:

typedef struct

{

char ch; /*字符索引*/

uint8_t segment[8]; /*字符對應(yīng)的段編碼*/

} DIGITRON_STRUCT;

const DIGITRON_STRUCT DIGITRON_TABLE[38] =

{

{' ', {0, 0, 0, 0, 0, 0, 0, 0}},

{'0', {1, 1, 1, 1, 1, 1, 0, 0}},

{'1', {0, 1, 1, 0, 0, 0, 0, 0}},

{'2', {1, 1, 0, 1, 1, 0, 1, 0}},

{'3', {1, 1, 1, 1, 0, 0, 1, 0}},

{'4', {0, 1, 1, 0, 0, 1, 1, 0}},

{'5', {1, 0, 1, 1, 0, 1, 1, 0}},

{'6', {1, 0, 1, 1, 1, 1, 1, 0}},

{'7', {1, 1, 1, 0, 0, 0, 0, 0}},

{'8', {1, 1, 1, 1, 1, 1, 1, 0}},

{'9', {1, 1, 1, 1, 0, 1, 1, 0}},

{'A', {1, 1, 1, 0, 1, 1, 1, 0}},

{'b', {0, 0, 1, 1, 1, 1, 1, 0}},

{'c', {0, 0, 0, 1, 1, 0, 1, 0}},

{'C', {1, 0, 0, 1, 1, 1, 0, 0}},

{'d', {0, 1, 1, 1, 1, 0, 1, 0}},

{'E', {1, 0, 0, 1, 1, 1, 1, 0}},

{'F', {1, 0, 0, 0, 1, 1, 1, 0}},

{'g', {1, 1, 1, 1, 0, 1, 1, 0}},

{'H', {0, 1, 1, 0, 1, 1, 1, 0}},

{'h', {0, 0, 1, 0, 1, 1, 1, 0}},

{'i', {0, 0, 1, 0, 0, 0, 0, 0}},

{'I', {0, 0, 0, 0, 1, 1, 0, 0}},

{'J', {0, 1, 1, 1, 1, 0, 0, 0}},

{'l', {0, 0, 0, 0, 1, 1, 0, 0}},

{'L', {0, 0, 0, 1, 1, 1, 0, 0}},

{'n', {0, 0, 1, 0, 1, 0, 1, 0}},

{'o', {0, 0, 1, 1, 1, 0, 1, 0}},

{'O', {1, 1, 1, 1, 1, 1, 0, 0}},

{'P', {1, 1, 0, 0, 1, 1, 1, 0}},

{'q', {1, 1, 1, 0, 0, 1, 1, 0}},

{'r', {0, 0, 0, 0, 1, 0, 1, 0}},

{'S', {1, 0, 1, 1, 0, 1, 1, 0}},

{'t', {0, 0, 0, 1, 1, 1, 1, 0}},

{'u', {0, 0, 1, 1, 1, 0, 0, 0}},

{'U', {0, 1, 1, 1, 1, 1, 0, 0}},

{'y', {0, 1, 1, 1, 0, 1, 1, 0}},

{'-', {0, 0, 0, 0, 0, 0, 1, 0}},

};

4.2.2.定義段位的組成關(guān)系,如下給出了顯示一位字符所需要的一個(gè)段組合,這些定義可以參照段碼式LCD液晶屏的PIN引腳關(guān)系定義:

const char DISPLAY_DIGIT_TABLE[4][7][3] =

{

{"1A", "1B", "1C", "1D", "1E", "1F", "1G"},

{"2A", "2B", "2C", "2D", "2E", "2F", "2G"},

{"3A", "3B", "3C", "3D", "3E", "3F", "3G"},

{"4A", "4B", "4C", "4D", "4E", "4F", "4G"},

};

const char DISPLAY_POINT_TABLE[4][3] =

{

"P1", "P2", "P3", "P4"

};

直白了說,就是我要在第一位上顯示一個(gè)‘8’這個(gè)字符,那這個(gè)字符肯定是由"1A", "1B", "1C", "1D", "1E", "1F", "1G"這7個(gè)段位組合顯示而成的。

4.2.3.定義段碼式LCD液晶屏PIN引腳關(guān)系與TM1621驅(qū)動(dòng)芯片顯示RAM的對應(yīng)關(guān)系表,如下代碼所示:

const char LCD_CS_TABLE[4][32][3] =

{

{"1F","1A","2F","2A","3F","3A","4F","4A"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},

{"1G","1B","2G","2B","3G","3B","4G","4B"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},

{"1E","1C","2E","2C","3E","3C","4E","4C"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},

{"P1","1D","P2","2D","P3","3D","P4","4D"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "},

};

這個(gè)數(shù)組的每一行對應(yīng)著一個(gè)COM,每一列對應(yīng)著一個(gè)SEG,這樣一個(gè)數(shù)據(jù)就直接映射成TM1621顯示RAM中的每一個(gè)BIT位;但需要注意的是,這個(gè)數(shù)據(jù)是需要根據(jù)原理圖的COM和SEG引腳的設(shè)計(jì)而定的;本項(xiàng)目在硬件設(shè)計(jì)上段碼式LCD液晶的COM0~COM3分別對應(yīng)的也是TM1621驅(qū)動(dòng)芯片的COM0~COM3,所以在行的對應(yīng)關(guān)系上與段碼式LCD液晶屏PIN引腳關(guān)系保持一致,如果順序不一致,那在數(shù)組的行順序要也要做相應(yīng)的對應(yīng)排序;SEG段的數(shù)組對應(yīng)關(guān)系設(shè)計(jì)和COM段的思想是一樣的。

4.2.4.void DISPLAY_SearchCS(const char *str, uint8_t *com, uint8_t *seg),這是最關(guān)鍵的一個(gè)函數(shù),結(jié)合硬件電路設(shè)計(jì),查找某個(gè)顯示字符對應(yīng)的每一個(gè)段編碼在TM1621顯示RAM的下標(biāo)和位下標(biāo)。

4.2.5.void DISPLAY_Digit(uint8_t index, char ch, uint8_t blink, uint8_t flag),這是位顯示函數(shù),index是位下標(biāo),ch是需要顯示字符,blink是閃爍標(biāo)志,flag是刷新標(biāo)志;通過這個(gè)函數(shù),我們可以調(diào)用DISPLAY_Digit(0, '8', 0, 1);在第一個(gè)位置上顯一個(gè)不閃爍的8字。

5.程序移植性和通用性

在相同硬件驅(qū)動(dòng)的情況下,對應(yīng)不同設(shè)計(jì)的段碼式LCD,我們只需要根據(jù)段碼式LCD液晶屏PIN引腳關(guān)系,再結(jié)合硬件原理圖電路設(shè)計(jì),修改LCD_CS_TABLE數(shù)組即可實(shí)現(xiàn)如上顯示功能。

有人說,我驅(qū)動(dòng)LED數(shù)碼寫沒有用驅(qū)動(dòng)芯片,那怎么辦呢?只是用了一個(gè)74HC595,或者是單片機(jī)引腳直接控制的,怎么辦呢?對于這種情況,我們的數(shù)據(jù)結(jié)構(gòu)和程序設(shè)計(jì)思想是一樣的,我們可以定義一個(gè)顯示緩存,在顯示的時(shí)候,將這個(gè)顯示緩存通過定時(shí)器的方式不斷的進(jìn)行刷新到LED數(shù)碼管,進(jìn)行顯示;當(dāng)然這邊不需要TM1621驅(qū)動(dòng)程序了,應(yīng)該替換成驅(qū)動(dòng)數(shù)碼管顯示的驅(qū)動(dòng)程序。

本站聲明: 本文章由作者或相關(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)閉