仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.9 KB, 下載次數: 83)
下載附件
2017-12-1 01:56 上傳
0.png (3.67 KB, 下載次數: 73)
下載附件
2017-12-1 01:56 上傳
單片機源程序如下:
- /***********************************************************************
- 內容:無字庫12864測試程序(縱向取模。字節倒序)
- ***********************************************************************/
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define Disp_On 0x3f //顯示命令
- #define Disp_Off 0x3e //關閉命令
- #define Col_Add 0x40 //起始列地址
- #define Page_Add 0xb8 //起始頁地址
- #define Start_Line 0xc0 //起始行地址
- #define Lcd_Bus P0 //MCU P0<---> LCM
- sbit RS = P2^0; //RS=1時為數據操作,RS=0時為命令操作
- sbit RW = P2^1; //RW=1時為讀選通,RW=0時為寫選通
- sbit E = P2^2; //E下降沿時,數據寫入驅動器,E為高電平時,數據被讀出
- sbit Mcs = P2^3; //Master chip E,右半屏-CS2
- sbit Scs = P2^4; //Slave chip E,左半屏-CS1
- sbit RST = P2^5; //液晶模塊復位控制管腳
- char code ce[] = {
- /*-- 文字: 測 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x08, 0x31, 0x86, 0x60, 0x00, 0xFE, 0x02, 0xF2, 0x02, 0xFE, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00,
- 0x04, 0xFC, 0x03, 0x00, 0x80, 0x47, 0x30, 0x0F, 0x10, 0x67, 0x00, 0x07, 0x40, 0x80, 0x7F, 0x00
- };
- char code shi[] = {
- /*-- 文字: 試 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- /*---------------------延時子程序----------------------------*/
- void delay(unsigned int t)
- {
- unsigned int i, j;
- for (i = 0;i < t;i++)
- for (j = 0;j < 10;j++)
- {
- ;
- }
- }
- /*--------------------讀忙碌子程序---------------------------*/
- void Read_busy()
- {
- P0 = 0x00;
- RS = 0;
- RW = 1;
- E = 1;
- while(P0&0x80);
- E = 0;
- }
- /*--------------------寫命令到LCD----------------------------*/
- void write_com(unsigned char cmdcode)
- {
- Read_busy(); //每次讀寫都要判斷是否忙碌
- RS = 0;
- RW = 0;
- Lcd_Bus = cmdcode;
- delay(0);
- E = 1;
- delay(0);
- E = 0;
- }
- /*-------------------寫數據到LCD----------------------------*/
- void write_data(unsigned char Dispdata)
- {
- Read_busy(); //每次讀寫都要判斷是否忙碌
- RS = 1;
- RW = 0;
- Lcd_Bus = Dispdata;
- delay(0);
- E = 1;
- delay(0);
- E = 0;
- }
- /*------------------顯示邊框-------------------------------*/
- void frame()
- {
- unsigned char i;
- Mcs = 0; //兩個屏幕
- Scs = 0;
- /*********************************************************************/
- write_com(Page_Add + 0); //上面橫線
- write_com(Col_Add + 0);
- for (i = 0;i < 64;i++) write_data(0x01);
- /*********************************************************************/
- write_com(Page_Add + 7); //下面橫線
- write_com(Col_Add + 0);
- for (i = 0;i < 64;i++) write_data(0x80);
- /*********************************************************************/
- for (i = 0;i < 8;i++)
- {
- Mcs = 0; //右半屏
- Scs = 1;
- write_com(Page_Add + i); //共8頁
- write_com(Col_Add + 63); //最后一列
- write_data(0xff); //ff表示每頁的8行全亮
-
- Mcs = 1; //左半屏與右半屏類似
- Scs = 0;
- write_com(Page_Add + i);
- write_com(Col_Add + 0);
- write_data(0xff);
- }
- }
- /*---------------------------清除內存--------------------------------*/
- void Clr_Scr()
- {
- unsigned char j, k;
- for (k=0;k<8;k++)
- {
- Mcs = 1;Scs = 0;delay(10); //左半屏清屏
- write_com(Page_Add + k);
- write_com(Col_Add + 0);
- for (j = 0;j < 64;j++) write_data(0x00);
- Mcs = 0;Scs = 1; delay(10); //右半屏清屏
- write_com(Page_Add + k);
- write_com(Col_Add + 0);
- for (j = 64;j < 128;j++) write_data(0x00);
- }
- }
- /*------------------顯示12864圖片---------------------------*/
- void Disp_Img(unsigned char code *img)
- {
- unsigned char j, k;
- for (k = 0;k < 8;k++) //共8頁
- {
- Mcs = 1;Scs = 0;delay(10); //左半屏數據
- write_com(Page_Add + k);
- write_com(Col_Add + 0);
- for (j = 0;j < 64;j++) write_data(img[k*128 + j]); //每半塊屏共64列
-
- Mcs = 0;Scs = 1; delay(10); //右半屏數據
- write_com(Page_Add + k);
- write_com(Col_Add + 0);
- for (j = 64;j < 128;j++) write_data(img[k*128 + j]);
- }
- }
- /*-------------------------顯示橫---------------------------*/
- void Disp_H_Line()
- {
- unsigned char i, j;
- Mcs = 0;
- Scs = 0;
- write_com(Disp_On); //顯示開
- write_com(Page_Add); //頁地址
- write_com(Start_Line); //開始行
- write_com(Col_Add); //列地址
- for (j = 0;j < 8;j++) //共8頁,所以循環8次
- {
- write_com(Page_Add + j);
- write_com(Col_Add + 0); //第一列開始
- write_com(Start_Line+0); //第一行開始
- for (i = 0;i < 64;i++)write_data(0x55); //每半屏幕共64列
- }
- }
- /*------------------------顯示列-----------------------------*/
- void Disp_V_Line()
- {
- unsigned char i, j;
- write_com(Disp_On); //顯示開
- write_com(Page_Add); //頁地址
-
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
LCD12864測試程序.rar
(75.98 KB, 下載次數: 36)
2017-11-30 09:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|