本帖最后由 hongniu 于 2015-6-23 18:46 編輯
今天對軟件做了調整使能顯示全屏圖像,如下圖示:
11月19日晚于天津四項目部宿舍
原始圖片

轉換黑白后:

液晶顯示器顯示:

源程序:
- #include<reg51.h>
- #define uint unsigned int;
- #define uchar unsigned char;
- sbit rs=P1^0;//并行模式下為指令數(shù)據(jù)選擇信H/L=指令/數(shù)據(jù)
- sbit rw=P1^1;//并行的讀寫信號H/L=讀/寫
- sbit e=P1^2; //并行下的使能信號
- sbit reset=P1^5;
- uchar x,y;
- uchar datetabal;
- uchar d1,d2;//數(shù)據(jù)緩沖
- uchar k=0,h=0;
- unsigned int i,j;
- uchar code tab[]={/*-- 調入了一幅圖像:C:\Users\lenovo\Desktop\是.bmp --*/
- /*-- 寬度x高度=128x64 --*/
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x07,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xFF,
- 0x4F,0xFF,0xFF,0xFE,0x00,0x61,0xCF,0xFF,0xF9,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xFF,
- 0x47,0xFF,0xFF,0xF0,0x00,0x40,0xC7,0xFF,0xF8,0xFF,0xC3,0x80,0x70,0x7F,0xFF,0xFF,
- 0x47,0xFF,0xFF,0x3E,0x3C,0x04,0x47,0xFF,0xF8,0xFF,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x44,0x01,0xE1,0x60,0x60,0x04,0x47,0xE1,0xC0,0xFF,0xFF,0xF7,0xBF,0xFF,0xFF,0xFF,
- 0x44,0x00,0xC0,0xC0,0x40,0x18,0x47,0xC0,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x44,0x44,0x60,0x44,0x40,0x30,0xC7,0xC6,0x08,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,
- 0x44,0x44,0x60,0x44,0x40,0x61,0xC7,0xC7,0x88,0xFF,0xFF,0x3E,0x3F,0xFF,0xFF,0xFF,
- 0x44,0x44,0x40,0x44,0x46,0x43,0xC7,0xC7,0x88,0xFF,0xFF,0x9D,0x1F,0xFF,0xFF,0xFF,
- 0x44,0x44,0x44,0x04,0x04,0x47,0xC7,0xC4,0x88,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,
- 0x44,0x44,0x60,0x00,0x00,0x00,0xC0,0x60,0x40,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x66,0x66,0x70,0x60,0x00,0x00,0x60,0x30,0xE0,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0x8C,0x7F,0xC3,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0x80,0x7F,0xF3,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xB0,0xFE,0x7B,0xFF,0xFF,0xFF,0xFF,0xF0,0x80,0x1B,0xFF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xBF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF8,0xB0,0x20,0x13,0xEF,0xFF,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0x7E,0xFF,0xFF,0xFF,0xFF,0x00,0xFB,0x80,0x03,0xE0,0x1F,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x50,0xE0,0x07,0xE8,0x07,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x78,0x7E,0xC0,0x03,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x1F,0xEE,0xC0,0x01,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x07,0xFC,0xC0,0x00,0xFF,
- 0x7F,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x80,0x00,0x02,0x03,0xFD,0x80,0x20,0x7F,
- 0x7F,0xFF,0xFF,0xF7,0xE1,0xCF,0xFF,0xFF,0x00,0x00,0x01,0x00,0xF9,0x80,0x20,0x3F,
- 0x7F,0xFF,0xFF,0xFF,0xE0,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x00,0xF9,0x00,0x20,0x3F,
- 0x7F,0xFF,0xFE,0xDE,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x00,0xF9,0xFF,0x00,0x20,0x3F,
- 0x7F,0xFF,0xFC,0x0F,0x00,0x00,0x3F,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
- 0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x03,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
- 0x7F,0xFF,0xFF,0xFF,0xA3,0xE0,0x03,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1B,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x30,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x11,
- 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x18,0x00,0x03,0xFF,0xFF,0xFC,0x7F,0xE0,0x01,
- 0x7F,0xFF,0xC3,0xFF,0xC7,0xFF,0xFE,0x0E,0x00,0x03,0xFF,0xFC,0x00,0x7F,0xE0,0x00,
- 0x7F,0xF8,0x03,0xFF,0xC3,0xFF,0xFE,0x06,0x00,0x03,0xFF,0x1E,0x78,0x7F,0xE0,0x01,
- 0x7F,0xC0,0x03,0xFF,0xF8,0x07,0xFE,0x07,0x00,0x03,0xFF,0x8E,0x60,0xFF,0xE0,0x07,
- 0x7F,0x00,0x03,0xFB,0x00,0x07,0xFC,0x01,0x00,0x03,0xFF,0xC6,0x01,0xFF,0xEE,0x0F,
- 0x7F,0x00,0x03,0xF3,0x88,0x7F,0xFC,0x00,0x00,0x0B,0xF0,0x06,0x13,0xFF,0xFF,0xFF,
- 0x7F,0x00,0x03,0xF9,0xF1,0xE7,0xFC,0x03,0xE0,0x01,0xF0,0x7E,0x73,0x1F,0x0F,0xFF,
- 0x7E,0x00,0x7F,0xFF,0xC0,0x07,0xF7,0x83,0xFF,0x7C,0x7C,0xFE,0x70,0x1F,0x5B,0xFF,
- 0x7E,0x01,0xFF,0xFB,0xC0,0x03,0xF7,0xD2,0x7E,0xF1,0x7C,0xFE,0x00,0xFC,0xEF,0xFF,
- 0x7C,0x03,0xFF,0xF3,0xF3,0xE3,0xF3,0x40,0xFE,0x88,0xFC,0xFF,0x09,0xFF,0xFF,0xFF,
- 0x78,0x03,0xFE,0xF3,0xF2,0x0F,0xE0,0xE0,0x7F,0xE3,0x7C,0xF8,0x39,0xF9,0xF3,0xFF,
- 0x60,0x03,0xFD,0xF3,0xF2,0x47,0xE1,0xF8,0x7C,0x83,0xDC,0x00,0x38,0xF9,0xE3,0xFF,
- 0x60,0x03,0xD9,0xFF,0xF8,0x47,0xE1,0xF8,0xFE,0x43,0xFC,0x0F,0x38,0xF3,0xE0,0x7F,
- 0x40,0xD9,0xE3,0xFE,0x79,0x07,0xC1,0xF0,0xFE,0x05,0xFF,0xFF,0x30,0x73,0xE7,0xFF,
- 0x00,0xF2,0x01,0xFE,0x71,0x27,0x80,0xE0,0x7F,0x2C,0xFF,0xFF,0x07,0x03,0xE1,0xFF,
- 0x00,0x50,0x03,0xFC,0x72,0x27,0x00,0x00,0x3F,0xF8,0xFF,0xFF,0x0F,0x83,0xE1,0xFF,
- 0x01,0x00,0x03,0xFC,0xF2,0x27,0x80,0x00,0x02,0x00,0x7F,0xFF,0xFF,0xFF,0xE3,0xFF,
- 0x40,0x00,0x03,0xF1,0xF7,0x30,0x00,0x00,0x10,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x40,0x00,0x03,0xF3,0xFF,0xF8,0x20,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x60,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x70,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x02,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x78,0x00,0x03,0xFF,0xFF,0xFF,0xA0,0x00,0x02,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x7C,0x00,0x17,0xFF,0xFF,0xFE,0x80,0x00,0x06,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x04,0x00,0x1F,0xFE,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x04,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- };
- void delay40ms(void) //誤差 -0.000000000009us
- {
- unsigned char ad,bd,cd;
- for(cd=11;cd>0;cd--)
- for(bd=124;bd>0;bd--)
- for(ad=12;ad>0;ad--);
- }
- void delay4_6ms()//
- {
- unsigned char av,bv;
- for(bv=12;bv>0;bv--)
- for(av=175;av>0;av--);
- }
- void delay(void)
- {
- ;;;
- }
- void writedate(unsigned char a)//寫數(shù)據(jù)
- {
-
-
-
- delay4_6ms();
- rs=1;
- delay();
- rw=0;
- delay();
- e=1;
- delay();
- P0=a;
-
-
-
- delay();
- e=0;
- delay();
-
-
- }
- void writectrl(unsigned char ds)//寫指令
- {
- rs=0;
- delay();
- rw=0;
- delay();
- e=1;
- delay();
- P0=ds;
- delay();
- e=0;
- delay();
-
- }
- void main()
- {
- reset=0;
- delay();
- reset=1;
- delay40ms();
- writectrl(0x3f);//開擴充指令操作數(shù)據(jù)位選擇8位
- delay4_6ms();
-
- writectrl(0x3e);//寫指令擴充指令操作,8位數(shù)據(jù),繪圖開關關
- delay4_6ms();
- // writectrl(0x80);//寫指令設置 垂直 列地址 Y軸為 “0”
- //delay4_6ms();
- //writectrl(0x80);//寫指令設置 水平 行地址 X軸 “0”
- //delay4_6ms();
- //writedate(0xffff); //數(shù)據(jù)寫入FffFH
- //delay4_6ms();
- x=0;
- y=0; //記得初始化啊
- i=0;
- j=0;
- for( h=0;h<32;h++ )
- {
- x=0;
- for (k=0;k<8;k++)
- {
-
-
- writectrl((0x80+y));//寫指令設置 垂直 列地址 Y軸為 “0”
- delay4_6ms();
- writectrl((0x80+x));//寫指令設置 水平 行地址 X軸 “0”
- delay4_6ms();
- writedate(tab[i]); //數(shù)據(jù)寫入FFH
- i++; // i是用來當指針用的 其實這里也可以換成指針,我喜歡這樣所以。。。
- writedate(tab[i]); //數(shù)據(jù)寫入FFH
- delay4_6ms();
- i++; //
-
- x++;//
-
- }
- y++; //只有行掃了8個字,才可以加以,因為8個字節(jié)正好是一行,這就是下一列的呵呵
-
-
-
-
- }
- //;***********以上是上半屏(Y=0-1F,X=0-07)以下是下扳平Y=8-0F X=0-1F********************************
- x=0;y=0;//這里XY清零是因為下半屏是從88H開始的,而上半屏是從80H開始的其實這里就是用到了上邊的,只是改了個水平坐標值,垂直坐標還是從0-31
- for( h=0;h<32;h++ )
- {
- x=0;
- for (k=0;k<8;k++)
- {
-
-
- writectrl((0x80+y));//:/寫指令設置 垂直 列地址 Y軸為 “0”
- delay4_6ms();
- writectrl((0x88+x));//寫指令設置 水平 行地址 X軸 “0”
- delay4_6ms();
- writedate(tab[i]); //數(shù)據(jù)寫入FFH
- i++;
- writedate(tab[i]); //數(shù)據(jù)寫入FFH
-
- delay4_6ms();
- i++;
- x++;
-
- }
- y++;
-
-
-
-
- }
-
-
-
- while(1); //*******************************************************
- //12864到今晚我也成功了,呵呵,我是這樣的:把12864分成兩部分,上半部分12832,下半部分12832
- //然后用掃描的辦法從第一行開始掃描,知道32行,在執(zhí)行下半部分掃描程序,第33行開始,掃描32行道64至
- //這里還要說一個事:關于12864畫圖,你看那大海,水很多,但是它是由一滴滴水組成的,所以要想在12864屏幕上顯示一幅圖像,你就要
- //從一個點開始,第一步我讓第一行的第一列顯示一個點,怎么實現(xiàn)呢?我開始很是不明白,看了一天的手冊,一下午的實驗,終于總結出
- //1:向7920的寫入3F和3E指令,使液晶工作在擴展指令狀態(tài),8位數(shù)據(jù),繪圖開關開2:設定繪圖RAM地址,先寫入列(Y軸)再寫入行(X軸)
- //然后再一口氣寫入16位的數(shù)據(jù),也可以寫8位,但要寫2次,我是采取后者,然后這十六是什么呢?---即這樣的排列D15-D0,讓第一個點就寫入8000H
- //那么,現(xiàn)在就是在第一行第一列顯示一個點!呵呵,會寫一個點,你就一定會寫一幅圖像了,為什么呢,你只要讓單片機這樣重復的寫512個字就是有一幅
- //12864的圖像了,這其實說白了就是點陣啊----------
-
- //呵呵,2010年11月17日 與天津開發(fā)區(qū)第四項目部宿舍,操今天給分包隊干了一天的活,很郁悶,但是有單片機真的讓我開心起來
- //
- //
- //
- //
- //
- //
- //
- ///
- //***************************************************8
- }
復制代碼
|