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

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

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

開(kāi)場(chǎng)白:

前面章節(jié)講的內(nèi)容全部都是用自構(gòu)字庫(kù)的,相當(dāng)于使用液晶屏的圖像模式。其實(shí)這個(gè)款12864液晶屏的驅(qū)動(dòng)芯片是st7920,它內(nèi)部是自帶16x16字庫(kù)的,可以顯示16x16的漢字或者8x16的字符。這一節(jié)開(kāi)始就跟大家講講這方面的內(nèi)容。要教會(huì)大家四個(gè)知識(shí)點(diǎn):

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

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

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

第四個(gè):12864整屏有4行8列,一共32個(gè)坐標(biāo)點(diǎn),每個(gè)坐標(biāo)點(diǎn)可以顯示一個(gè)16x16的漢字,但是在顯示8x16字符時(shí)候,必須一次顯示2個(gè)字符籌夠16x16的點(diǎn)陣。例如,只想達(dá)到顯示一個(gè)字符的時(shí)候,應(yīng)該在另外一個(gè)空位置上顯示空字符來(lái)填充。

具體內(nèi)容,請(qǐng)看源代碼講解。

(1)硬件平臺(tái):基于朱兆祺51單片機(jī)學(xué)習(xí)板。

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

開(kāi)機(jī)上電后,液晶屏第一行調(diào)用直接漢字書(shū)寫(xiě)方式的數(shù)組來(lái)顯示(饅頭V5)的內(nèi)容。第四行調(diào)用機(jī)內(nèi)碼和ASCII碼的數(shù)組來(lái)顯示(饅頭V5)的內(nèi)容。

(3)源代碼講解如下:

#include "REG52.H"

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

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

sbit LCDCLK_dr = P3^2; //串行時(shí)鐘線

sbit LCDRST_dr = P3^4; //復(fù)位線

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

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

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

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

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

void display_clear(void); // 清屏。4行8列的坐標(biāo)點(diǎn)全部顯示2個(gè)空字符相當(dāng)于清屏了。

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); //延時(shí)

/* 注釋一:內(nèi)部字庫(kù)的真實(shí)坐標(biāo)體系的本質(zhì)。

* 當(dāng)我們用內(nèi)部字庫(kù)的時(shí)候,它的坐標(biāo)體系跟前面講的自造字庫(kù)坐標(biāo)不一樣,不再是256x32的液晶屏。

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

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

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

* 用深究具體含義,液晶驅(qū)動(dòng)芯片ST7920的手冊(cè)上有提到。

*/

code unsigned char ucAddrTable[]= //調(diào)用內(nèi)部字庫(kù)時(shí),液晶屏的坐標(biāo)體系,位置編碼,是驅(qū)動(dòng)內(nèi)容,讀者可以不用深究它的含義。

{

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,

};

/* 注釋二:在使用內(nèi)部字庫(kù)時(shí),C51編譯器暗地里干了啥?

* 如果使用液晶屏內(nèi)部自帶字庫(kù),以下編程的時(shí)候只要在源代碼里直接寫(xiě)入所需要的漢字或者字符,

* 就可以自動(dòng)調(diào)用相對(duì)應(yīng)的字庫(kù)了。但是細(xì)心的網(wǎng)友一定會(huì)問(wèn),為什么在源代碼上直接寫(xiě)入某個(gè)漢字

* 就可以調(diào)用到這個(gè)漢字的字庫(kù)?其實(shí),表面上我們寫(xiě)下具體的某個(gè)漢字或者字符,但是C51編譯器

* 會(huì)自動(dòng)對(duì)數(shù)組內(nèi)的漢字翻譯成 機(jī)內(nèi)碼(2字節(jié)),會(huì)自動(dòng)對(duì)數(shù)組內(nèi)的字符翻譯成 ASCII碼(1字節(jié))。

* 本節(jié)程序會(huì)做這個(gè)實(shí)驗(yàn)來(lái)驗(yàn)證它。以下兩種書(shū)寫(xiě)方式不一樣,但本質(zhì)是一樣的。

*/

code unsigned char Hz1616_man[]="饅"; //對(duì)于數(shù)組內(nèi)的漢字,編譯會(huì)自動(dòng)翻譯成 機(jī)內(nèi)碼(2字節(jié))

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

{

0xC2,

0xF8,

};

code unsigned char Hz1616_tou[]="頭"; //對(duì)于數(shù)組內(nèi)的漢字,編譯會(huì)自動(dòng)翻譯成 機(jī)內(nèi)碼(2字節(jié))

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

{

0xCD,

0xB7,

};

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

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

{

0x56,

};

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

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

{

0x35,

};

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

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

{

0x20,

};

void main()

{

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

/* 注釋三:

* 12864的控制芯片st7920內(nèi)部有兩套驅(qū)動(dòng)顯示指令方式,一種是前面章節(jié)講的自構(gòu)字庫(kù)模式,也是圖像模式。

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

* 命令字0x36表示用自構(gòu)字庫(kù)模式。

*/

WriteCommand(0x0C); //命令字0x0c表示用內(nèi)部字庫(kù)模式。命令字0x36表示用自構(gòu)字庫(kù)模式。

display_clear(); // 清屏。4行8列的坐標(biāo)點(diǎn)全部顯示2個(gè)空字符相當(dāng)于清屏了。

display_hz1616(0,0,Hz1616_man); //第一行,調(diào)用直接漢字書(shū)寫(xiě)方式的數(shù)組來(lái)顯示(饅頭V5),

display_hz1616(1,0,Hz1616_tou);

display_double_zf816(2,0,Zf816_V,Zf816_5);

display_hz1616(0,3,JN1616_man); //第四行,調(diào)用機(jī)內(nèi)碼和ASCII碼的數(shù)組來(lái)顯示(饅頭V5),

display_hz1616(1,3,JN1616_tou);

display_double_zf816(2,3,ASCII816_V,Zf816_5);

while(1)

{

;

}

}

/* 注釋四:在一個(gè)坐標(biāo)點(diǎn)顯示1個(gè)內(nèi)部字庫(kù)漢字的函數(shù)

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

* 第3個(gè)參數(shù)*ucArray是漢字機(jī)內(nèi)碼,是有2個(gè)字節(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]);

}

/* 注釋五:在一個(gè)坐標(biāo)點(diǎn)顯示2個(gè)內(nèi)部字庫(kù)字符的函數(shù)

* 注意,由于一個(gè)坐標(biāo)點(diǎn)是16x16點(diǎn)陣,而一個(gè)字符是8x16點(diǎn)陣的,所以務(wù)必要顯示2個(gè)字符籌夠1個(gè)坐標(biāo)點(diǎn)。

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

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

* 第4個(gè)參數(shù)*ucArray2是右邊第2個(gè)字符ASCII碼,是有1個(gè)字節(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列的坐標(biāo)點(diǎn)全部顯示2個(gè)空字符相當(dāng)于清屏了。

{

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本質(zhì)是一樣的,只是書(shū)寫(xiě)方式不一樣。

}

}

}

void SendByteToLcd(unsigned char ucData) //發(fā)送一個(gè)字節(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ā)送一個(gè)字節(jié)的命令或者數(shù)據(jù)給液晶模塊的底層驅(qū)動(dòng)

{

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

SendByteToLcd( ucWData & 0xf0 );

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

}

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

{

LCDCS_dr = 0;

LCDCS_dr = 1;

SPIWrite(ucCommand, 0);

delay_short(90);

}

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

{

LCDCS_dr = 0;

LCDCS_dr = 1;

SPIWrite(ucData, 1);

}

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

{

LCDRST_dr = 1; //復(fù)位

LCDRST_dr = 0;

LCDRST_dr = 1;

}

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

{

unsigned int i;

for(i=0;i

{

;

}

}

總結(jié)陳詞:

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

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

7月29日消息,LG Display已將其在美國(guó)的70項(xiàng)LCD液晶顯示器相關(guān)專利轉(zhuǎn)讓給三星顯示,值得注意的是,三星顯示已于三年前退出LCD業(yè)務(wù)。

關(guān)鍵字: LCD 三星

HT16K24操作電壓為2.4V~5.5V,內(nèi)建I2C通信接口,提供三種LCD顯示與按鍵模式:24SEG × 4COM + 24 KEY;22SEG × 6COM + 22 KEY;20SEG × 8COM + 20 K...

關(guān)鍵字: LCD MCU 蜂鳴器

離線GPS工具:跟蹤、保存和查找具有距離和方位的航路點(diǎn)——沒(méi)有網(wǎng)絡(luò),沒(méi)有云,您的數(shù)據(jù),您的規(guī)則。

關(guān)鍵字: GPS設(shè)備 LCD 微控制器 Arduino Uno

在技術(shù)上,LCD和OLED各有其獨(dú)特之處。液晶電視通過(guò)控制液態(tài)晶體實(shí)現(xiàn)圖像顯示,其原理是在兩片玻璃基板中夾入液態(tài)晶體,通過(guò)細(xì)小的電線控制水晶分子的方向。而OLED憑借自發(fā)光二極管帶來(lái)更優(yōu)的視角與色彩表現(xiàn),其RGB色彩信號(hào)...

關(guān)鍵字: OLED LCD

雙鎖系統(tǒng),通過(guò)鍵盤(pán)輸入密碼開(kāi)門(mén),客人來(lái)了用短信開(kāi)門(mén)

關(guān)鍵字: LCD 雙鎖系統(tǒng) L293D 變壓器

在汽車顯示系統(tǒng)領(lǐng)域,TFT LCD顯示屏目前是車載顯示面板的主流選擇。與此同時(shí),OLED和micro-LED顯示屏也逐漸吸引了市場(chǎng)的廣泛關(guān)注。為了適應(yīng)不同的顯示技術(shù),我們需要開(kāi)發(fā)相應(yīng)的電源技術(shù)。TFT LCD顯示屏通常使...

關(guān)鍵字: LCD OLED micro-LED

如今,汽車行業(yè)對(duì)先進(jìn)顯示屏的需求空前高漲,亟需能夠?qū)崿F(xiàn)更大尺寸、更高亮度、曲面設(shè)計(jì)、更高分辨率和更高對(duì)比度的解決方案。與此同時(shí),各類新型車載顯示屏也日益受到青睞。目前,TFT LCD是汽車平板顯示技術(shù)的主流選擇。OLED...

關(guān)鍵字: LCD OLED micro-LED

大家好,歡迎回來(lái)。在這個(gè)項(xiàng)目中,我們將學(xué)習(xí)如何使用鍵盤(pán)和LCD顯示制作一個(gè)安全的基于Arduino的門(mén)鎖。你可以用它來(lái)保護(hù)你的辦公室、房間或家里的保險(xiǎn)箱。要鎖門(mén)和開(kāi)鎖,你需要在安全系統(tǒng)中輸入密碼。這確保了只有經(jīng)過(guò)授權(quán)的人...

關(guān)鍵字: 鍵盤(pán) LCD Arduino 電子門(mén)鎖

April 1, 2025 ---- 樂(lè)金顯示廣州LCD 8.5代線今日(4月1日)正式交割至TCL華星光電,并改名為t11。至此,TCL華星光電將擁有2條6代、4條8.5代、1條8.6代和2條10.5代LCD產(chǎn)線。Tr...

關(guān)鍵字: 電視 PID面板 LCD

將您的樹(shù)莓派Pico變成帶有觸摸屏界面的USB-HID設(shè)備!在這個(gè)項(xiàng)目中,我們將在Arduino IDE中設(shè)置編程環(huán)境,為3.5”P(pán)ico Touch LCD屏蔽配置庫(kù),測(cè)試基本功能,創(chuàng)建簡(jiǎn)單的按鈕(用于復(fù)制和粘貼),顯...

關(guān)鍵字: 樹(shù)莓派 觸摸屏 LCD Windows
關(guān)閉