嵌入式开发:LCD12864无字库仿真与程序
生活随笔
收集整理的這篇文章主要介紹了
嵌入式开发:LCD12864无字库仿真与程序
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
聲明:這篇博文是2016年做畢業(yè)設(shè)計(jì)時(shí)所寫,已經(jīng)算是“年代久遠(yuǎn)”了,我已經(jīng)無力提供任何支持。內(nèi)容比較簡(jiǎn)單,所有資料都在文章中,希望對(duì)各位有所幫助。
文章目錄
一、硬件部分
1.1 整體電路
1.2 原件列表
二、軟件部分
2.1 程序架構(gòu)
2.2 主程序
2.3 LCD12864驅(qū)動(dòng)程序
2.4 字庫文件
三、仿真結(jié)果
一、硬件部分
1.1 整體電路
1.2 原件列表
二、軟件部分
2.1 程序架構(gòu)
?
2.2 主程序
void main() {lcd_init(); ? ? ? ? // 初始化lcd_clear(0); ? ? ? ? // 清屏lcd_set_line(0); ? ? ? // 設(shè)置起始行為0display(1, 2, 2 * 16, jiao); ? // 交display(1, 2, 3 * 16, liu); // 流display(2, 2, 4 * 16, shi); ? // 使display(2, 2, 5 * 16, yong); ? ?// 用while (1); }?
2.3 LCD12864驅(qū)動(dòng)程序
#include <lcd.h> #include <intrins.h>#define lcd_databus P2 ? ? ? ? // LCD的8位數(shù)據(jù)總線/************** 判忙函數(shù) **************/ void lcd_r_busy() {P2 = 0x00;RS = 0;RW = 1;EN = 1;while (P2 & 0x80); // 最高位DB7==1,則busyEN = 0; }/************* LCD寫命令函數(shù) *************/ void lcd_w_cmd(uchar value) {lcd_r_busy(); ? ? ? ?// 每次讀寫操作前都要忙判斷RS = 0;RW = 0;lcd_databus = value;EN = 1; ? ? ? ? ? ? ?// 下降沿鎖存寫入的數(shù)據(jù)/命令_nop_();_nop_();EN = 0; }/************* LCD寫數(shù)據(jù) **************/ void lcd_w_data(uchar value) {lcd_r_busy();RS = 1;RW = 0;lcd_databus = value;EN = 1; ? ? ? ? ? ? ? ?// 下降沿鎖存寫入的數(shù)據(jù)/命令_nop_();_nop_();EN = 0; }/***************頁設(shè)置:顯示在哪一頁******************/ /*************共8頁,一頁是8行像素點(diǎn)*****************/ void lcd_set_page(uchar page) {page = 0xb8 | page; ? ? // 頁的首地址為0xb8:page或上0xb8=選擇page頁lcd_w_cmd(page); }/************行設(shè)置:起始在哪一行********************/ /**********每頁共8行,一般從0行開始******************/ void lcd_set_line(uchar sline) {sline = 0xc0 | sline; ? // 起始行地址為0xc0:sline或上0xc0=選擇行l(wèi)cd_w_cmd(sline); }/*************起始列設(shè)置+像素點(diǎn)選擇********************/? /***********每半片共64列,列值不得大于63***************/ void lcd_set_column(uchar column) {column = 0x3f & column; ? // 與上列的最大值63:0x3f ?可得所選列值<63column = 0x40 | column; ? // 得列的首地址lcd_w_cmd(column); }/*************設(shè)置顯示的開關(guān)********************/? /**********0為關(guān)閉顯示;1為 開啟顯示************/ void lcd_on_off(uchar set) {set = 0x3e | set; ? ? ? ?// =0011 111x----0x3e為關(guān)閉顯示;0x3f為開啟顯示lcd_w_cmd(set); }/*************選擇左右半屏顯示********************/? /********0-全屏顯示;1-左;2-右********************/? /************cs片選端低電平有效********************/? void lcd_cs(uchar sel) {switch (sel){case 0:CS1 = 0; CS2 = 0; break; ? ? // 全屏顯示case 1:CS1 = 0; CS2 = 1; break; ? ? // 左顯示case 2:CS1 = 1; CS2 = 0; break; ? ? // 右顯示default:break;} }/*************清屏:選擇半屏********************/ /********0-清全屏;1-清左;2-清右***************/? void lcd_clear(uchar sel) {uchar i, j;lcd_cs(sel);for (i = 0; i < 8; i++){lcd_set_page(i);lcd_set_column(0);for (j = 0; j < 64; j++){lcd_w_data(0x00); ? // 每列全部寫0,列地址指針自動(dòng)+1}} }/****************LCD的初始化********************/ void lcd_init() {lcd_r_busy();lcd_cs(0);lcd_on_off(0); ? // 關(guān)顯示lcd_cs(0);lcd_on_off(1); ? // 開顯示lcd_cs(0);lcd_clear(0); ? // 清全屏lcd_set_line(0); ? ?// 起始行設(shè)為0 }/****************16*16像素的漢字顯示程序********************/ void display(uchar cs, uchar page, uchar column, uchar* p) {uchar i;lcd_cs(cs);lcd_set_page(page); ? ? ? ? ? ? // 要在本頁寫上半個(gè)漢字8*16lcd_set_column(column); ? ? ? ? // 選擇起始列for (i = 0; i < 16; i++){lcd_w_data(p[i]); ? ? ? ? ? // 按列輸入上半個(gè)漢字的編碼8*16}lcd_set_page(page + 1); ? ? ? ? // 要在下一頁寫下半個(gè)漢字8*16lcd_set_column(column); ? ? ? ? // 選擇起始列for (i = 0; i < 16; i++){lcd_w_data(p[i + 16]); ? ? ?// 按列輸入下半個(gè)漢字的編碼8*16 } }2.4 字庫文件
#ifndef _ZIKU_H_ #define _ZIKU_H_// 交 const uchar code jiao[] = { 0x08,0x08,0x88,0x68,0x08,0x08,0x09,0x0E,0x08,0x08,0x88,0x28,0x48,0x88,0x08,0x00,0x80,0x81,0x40,0x40,0x21,0x22,0x14,0x08,0x14,0x22,0x41,0x40,0x80,0x81,0x80,0x00, };// 流 const uchar code liu[] = { 0x10,0x60,0x02,0x8C,0x00,0x44,0x64,0x54,0x4D,0x46,0x44,0x54,0x64,0xC4,0x04,0x00,0x04,0x04,0x7E,0x01,0x80,0x40,0x3E,0x00,0x00,0xFE,0x00,0x00,0x7E,0x80,0xE0,0x00, };// 使 const uchar code shi[] = { 0x80,0x60,0xF8,0x07,0x04,0xE4,0x24,0x24,0x24,0xFF,0x24,0x24,0x24,0xE4,0x04,0x00,0x00,0x00,0xFF,0x00,0x80,0x81,0x45,0x29,0x11,0x2F,0x41,0x41,0x81,0x81,0x80,0x00, };// 用 const uchar code yong[] = { 0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00, };#endif三、仿真結(jié)果
?
總結(jié)
以上是生活随笔為你收集整理的嵌入式开发:LCD12864无字库仿真与程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于单片机的智能插座控制系统设计
- 下一篇: X265代码学习1-X265源码下载编译