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

當前位置:首頁 > 單片機 > 單片機
[導讀]從業(yè)近十年!手把手教你單片機程序框架 第80講開場白:前面章節(jié)講的內容全部都是用自構字庫的,相當于使用液晶屏的圖像模式。其實這個款12864液晶屏的驅動芯片是st7920,它內部是自帶16x16字庫的,可以顯示16x16的漢字

從業(yè)近十年!手把手教你單片機程序框架 第80講

開場白:

前面章節(jié)講的內容全部都是用自構字庫的,相當于使用液晶屏的圖像模式。其實這個款12864液晶屏的驅動芯片是st7920,它內部是自帶16x16字庫的,可以顯示16x16的漢字或者8x16的字符。這一節(jié)開始就跟大家講講這方面的內容。要教會大家四個知識點:

第一個:內部字庫的真實坐標體系的本質。當我們用內部字庫的時候,它的坐標體系跟前面講的自造字庫坐標不一樣,不再是256x32的液晶屏。它還原成為128x64的液晶屏,橫坐標x軸坐標沒辦法精確到每個點,只能以16個點(2個字節(jié))為一個單位,因此128個點的x軸坐標范圍是0至8。而y軸的坐標也是以16個點(2個字節(jié))為一個單位,因此64個點的x軸坐標范圍是0至3。把12864液晶屏分成4行8列,每個數(shù)代表一個坐標點。

第二個:在使用內部字庫時,C51編譯器暗地里干了啥?如果使用液晶屏內部自帶字庫,編程的時候只要在源代碼里直接寫入所需要的漢字或者字符,就可以自動調用相對應的字庫了。但是細心的網(wǎng)友一定會問,為什么在源代碼上直接寫入某個漢字就可以調用到這個漢字的字庫?其實,表面上我們寫下具體的某個漢字或者字符,但是C51編譯器會自動對數(shù)組內的漢字翻譯成 機內碼(2字節(jié)),會自動對數(shù)組內的字符翻譯成 ASCII碼(1字節(jié))。

第三個:12864的控制芯片st7920內部有兩套驅動顯示指令方式,一種是前面章節(jié)講的自構字庫模式,也是圖像模式。另外一種就是本節(jié)講的用內部字庫模式。在切換模式的時候,發(fā)送命令字0x0c表示用內部字庫模式,發(fā)送命令字0x36表示用自構字庫模式。

第四個:12864整屏有4行8列,一共32個坐標點,每個坐標點可以顯示一個16x16的漢字,但是在顯示8x16字符時候,必須一次顯示2個字符籌夠16x16的點陣。例如,只想達到顯示一個字符的時候,應該在另外一個空位置上顯示空字符來填充。

具體內容,請看源代碼講解。

(1)硬件平臺:基于朱兆祺51單片機學習板。

(2)實現(xiàn)功能:

開機上電后,液晶屏第一行調用直接漢字書寫方式的數(shù)組來顯示(饅頭V5)的內容。第四行調用機內碼和ASCII碼的數(shù)組來顯示(饅頭V5)的內容。

(3)源代碼講解如下:

#include "REG52.H"

sbit LCDCS_dr = P1^6; //片選線

sbit LCDSID_dr = P1^7; //串行數(shù)據(jù)線

sbit LCDCLK_dr = P3^2; //串行時鐘線

sbit LCDRST_dr = P3^4; //復位線

void SendByteToLcd(unsigned char ucData); //發(fā)送一個字節(jié)數(shù)據(jù)到液晶模塊

void SPIWrite(unsigned char ucWData, unsigned char ucWRS); //模擬SPI發(fā)送一個字節(jié)的命令或者數(shù)據(jù)給液晶模塊的底層驅動

void WriteCommand(unsigned char ucCommand); //發(fā)送一個字節(jié)的命令給液晶模塊

void LCDWriteData(unsigned char ucData); //發(fā)送一個字節(jié)的數(shù)據(jù)給液晶模塊

void LCDInit(void); //初始化 函數(shù)內部包括液晶模塊的復位

void display_clear(void); // 清屏。4行8列的坐標點全部顯示2個空字符相當于清屏了。

void display_hz1616(unsigned int x,unsigned int y,const unsigned char *ucArray);

void display_double_zf816(unsigned int x,unsigned int y,const unsigned char *ucArray1,const unsigned char *ucArray2);

void delay_short(unsigned int uiDelayshort); //延時

/* 注釋一:內部字庫的真實坐標體系的本質。

* 當我們用內部字庫的時候,它的坐標體系跟前面講的自造字庫坐標不一樣,不再是256x32的液晶屏。

* 它還原成為128x64的液晶屏,橫坐標x軸坐標沒辦法精確到每個點,只能以16個點(2個字節(jié))為一個單位,

* 因此128個點的x軸坐標范圍是0至8。而y軸的坐標也是以16個點(2個字節(jié))為一個單位,因此64個點的x軸

* 坐標范圍是0至3。以下是坐標地址的位置編碼。把12864液晶屏分成4行8列,每個數(shù)代表一個坐標點,

* 用深究具體含義,液晶驅動芯片ST7920的手冊上有提到。

*/

code unsigned char ucAddrTable[]= //調用內部字庫時,液晶屏的坐標體系,位置編碼,是驅動內容,讀者可以不用深究它的含義。

{

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,

};

/* 注釋二:在使用內部字庫時,C51編譯器暗地里干了啥?

* 如果使用液晶屏內部自帶字庫,以下編程的時候只要在源代碼里直接寫入所需要的漢字或者字符,

* 就可以自動調用相對應的字庫了。但是細心的網(wǎng)友一定會問,為什么在源代碼上直接寫入某個漢字

* 就可以調用到這個漢字的字庫?其實,表面上我們寫下具體的某個漢字或者字符,但是C51編譯器

* 會自動對數(shù)組內的漢字翻譯成 機內碼(2字節(jié)),會自動對數(shù)組內的字符翻譯成 ASCII碼(1字節(jié))。

* 本節(jié)程序會做這個實驗來驗證它。以下兩種書寫方式不一樣,但本質是一樣的。

*/

code unsigned char Hz1616_man[]="饅"; //對于數(shù)組內的漢字,編譯會自動翻譯成 機內碼(2字節(jié))

code unsigned char JN1616_man[]= //機內碼 饅 網(wǎng)上有很多把漢字或者字符轉換成相關編碼的工具軟件

{

0xC2,

0xF8,

};

code unsigned char Hz1616_tou[]="頭"; //對于數(shù)組內的漢字,編譯會自動翻譯成 機內碼(2字節(jié))

code unsigned char JN1616_tou[]= //機內碼 頭 網(wǎng)上有很多把漢字或者字符轉換成相關編碼的工具軟件

{

0xCD,

0xB7,

};

code unsigned char Zf816_V[]="V"; //對于數(shù)組內的字符,編譯會自動翻譯成 ASCII碼(1字節(jié))

code unsigned char ASCII816_V[]= //ASCII碼 V 網(wǎng)上有很多把漢字或者字符轉換成相關編碼的工具軟件

{

0x56,

};

code unsigned char Zf816_5[]="5"; //對于數(shù)組內的字符,編譯會自動翻譯成 ASCII碼(1字節(jié))

code unsigned char ASCII816_5[]= //ASCII碼 5 網(wǎng)上有很多把漢字或者字符轉換成相關編碼的工具軟件

{

0x35,

};

code unsigned char Zf816_nc[]=" "; //對于數(shù)組內的字符,編譯會自動翻譯成 ASCII碼(1字節(jié))

code unsigned char ASCII816_nc[]= //ASCII碼 空字符 網(wǎng)上有很多把漢字或者字符轉換成相關編碼的工具軟件

{

0x20,

};

void main()

{

LCDInit(); //初始化12864 內部包含液晶模塊的復位

/* 注釋三:

* 12864的控制芯片st7920內部有兩套驅動顯示指令方式,一種是前面章節(jié)講的自構字庫模式,也是圖像模式。

* 另外一種就是本節(jié)講的用內部字庫模式。以下是切換模式的命令,命令字0x0c表示用內部字庫模式。

* 命令字0x36表示用自構字庫模式。

*/

WriteCommand(0x0C); //命令字0x0c表示用內部字庫模式。命令字0x36表示用自構字庫模式。

display_clear(); // 清屏。4行8列的坐標點全部顯示2個空字符相當于清屏了。

display_hz1616(0,0,Hz1616_man); //第一行,調用直接漢字書寫方式的數(shù)組來顯示(饅頭V5),

display_hz1616(1,0,Hz1616_tou);

display_double_zf816(2,0,Zf816_V,Zf816_5);

display_hz1616(0,3,JN1616_man); //第四行,調用機內碼和ASCII碼的數(shù)組來顯示(饅頭V5),

display_hz1616(1,3,JN1616_tou);

display_double_zf816(2,3,ASCII816_V,Zf816_5);

while(1)

{

;

}

}

/* 注釋四:在一個坐標點顯示1個內部字庫漢字的函數(shù)

* 第1,2個參數(shù)x,y是坐標體系。x的范圍是0至8,y的范圍是0至3.

* 第3個參數(shù)*ucArray是漢字機內碼,是有2個字節(jié)的數(shù)組。

*/

void display_hz1616(unsigned int x,unsigned int y,const unsigned char *ucArray)

{

WriteCommand(0x30); //基本指令集

WriteCommand(ucAddrTable[8*y+x]); //起始位置

LCDWriteData(ucArray[0]);

LCDWriteData(ucArray[1]);

}

/* 注釋五:在一個坐標點顯示2個內部字庫字符的函數(shù)

* 注意,由于一個坐標點是16x16點陣,而一個字符是8x16點陣的,所以務必要顯示2個字符籌夠1個坐標點。

* 第1,2個參數(shù)x,y是坐標體系。x的范圍是0至8,y的范圍是0至3.

* 第3個參數(shù)*ucArray1是左邊第1個字符ASCII碼,是有1個字節(jié)的數(shù)組。

* 第4個參數(shù)*ucArray2是右邊第2個字符ASCII碼,是有1個字節(jié)的數(shù)組。

*/

void display_double_zf816(unsigned int x,unsigned int y,const unsigned char *ucArray1,const unsigned char *ucArray2)

{

WriteCommand(0x30); //基本指令集

WriteCommand(ucAddrTable[8*y+x]); //起始位置

LCDWriteData(ucArray1[0]);

LCDWriteData(ucArray2[0]);

}

void display_clear(void) // 清屏。4行8列的坐標點全部顯示2個空字符相當于清屏了。

{

unsigned int i,j;

for(i=0;i<4;i++)

{

for(j=0;j<8;j++)

{

display_double_zf816(j,i,Zf816_nc,ASCII816_nc); //Zf816_nc與ASCII816_nc本質是一樣的,只是書寫方式不一樣。

}

}

}

void SendByteToLcd(unsigned char ucData) //發(fā)送一個字節(jié)數(shù)據(jù)到液晶模塊

{

unsigned char i;

for ( i = 0; i < 8; i++ )

{

if ( (ucData << i) & 0x80 )

{

LCDSID_dr = 1;

}

else

{

LCDSID_dr = 0;

}

LCDCLK_dr = 0;

LCDCLK_dr = 1;

}

}

void SPIWrite(unsigned char ucWData, unsigned char ucWRS) //模擬SPI發(fā)送一個字節(jié)的命令或者數(shù)據(jù)給液晶模塊的底層驅動

{

SendByteToLcd( 0xf8 + (ucWRS << 1) );

SendByteToLcd( ucWData & 0xf0 );

SendByteToLcd( (ucWData << 4) & 0xf0);

}

void WriteCommand(unsigned char ucCommand) //發(fā)送一個字節(jié)的命令給液晶模塊

{

LCDCS_dr = 0;

LCDCS_dr = 1;

SPIWrite(ucCommand, 0);

delay_short(90);

}

void LCDWriteData(unsigned char ucData) //發(fā)送一個字節(jié)的數(shù)據(jù)給液晶模塊

{

LCDCS_dr = 0;

LCDCS_dr = 1;

SPIWrite(ucData, 1);

}

void LCDInit(void) //初始化 函數(shù)內部包括液晶模塊的復位

{

LCDRST_dr = 1; //復位

LCDRST_dr = 0;

LCDRST_dr = 1;

}

void delay_short(unsigned int uiDelayShort) //延時函數(shù)

{

unsigned int i;

for(i=0;i

{

;

}

}

總結陳詞:

通過本節(jié)的實驗,我們發(fā)現(xiàn)漢字的識別本質是機內碼,字符的識別本質是ASCII碼。不管是機內碼還是ASCII碼,這些都是16進制的數(shù)字,也就是我們手機平時接收和發(fā)送的信息本質都是這些數(shù)字編碼,但是機內碼是2個字節(jié),ASCII碼是1個字節(jié),如果在一串隨機的信息中,同時包含漢字和字符兩種數(shù)字信息,我們的程序又該如何能篩選和識別它們,會不會把機內碼和ASCII碼搞混亂了?不會的。其實這兩種編碼都是有規(guī)律可以篩選識別的,欲知詳情,請聽下回分解-----液晶屏顯示串口發(fā)送過來的任意漢字和字符。

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉