- #include <stdio.h>
- #include <reg52.h>
- #include <intrins.h>
-
- #define uchar unsigned char
- #define uint unsigned int
- sbit CD=P3^0;
- sbit RESET=P3^3;
- sbit W=P3^2;
- sbit R=P3^1; //定義各控制口
-
- void delay(void); //聲明延遲函數
- void state01(void); //聲明S0S1狀態檢查函數
- void state3(void); //聲明S3狀態檢查函數
- void writed1d2(uchar,uchar); //聲明參數寫入函數
- void writecom(uchar); //聲明指令寫入函數
- void writedat(uchar); //聲明數據寫入函數
- void writedatauto(void); //聲明數據自動寫函數
- void charshow(void); //聲明字型顯示函數
- void charflash(void); //聲明字型閃爍控制函數(PT:死循環)
- void writebyte(void); //聲明寫入一個字符函數
- void readycharshow(void); //聲明字型寫入準備函數
- void clear(void); //聲明清屏函數(全屏寫空格)
- void blank(void); //聲明寫空格函數
-
- void delay(void)
- {
- uchar data i;
- uint data j;
- for(i=0;i<100;i++)
- for(j=0;j<300;j++);
- }
-
- void state01(void)
- {
- uchar idata i;
- P1=0xff;
- do
- {
- R=0;
- i=P1;
- R=1;
- }
- while((i&0x03)!=0x03);
- }
-
- void state3(void)
- {
- uchar idata i;
- P1=0xff;
- do
- {
- R=0;
- i=P1;
- R=1;
- }
- while((i&0x08)!=0x08);
- }
-
- void writed1d2(uchar d1,uchar d2)
- {
- state01();
- CD=0;
- P1=d1;
- W=0;
- W=1;
- CD=1;
- /////////////////////////////
- state01();
- CD=0;
- P1=d2;
- W=0;
- W=1;
- CD=1;
- }
-
- void writecom(uchar com)
- {
- state01();
- CD=1;
- P1=com;
- W=0;
- W=1;
- }
-
- void writedat(uchar dat)
- {
- state01();
- CD=0;
- P1=dat;
- W=0;
- W=1;
- CD=1;
- }
-
- void writedatauto(void)
- {
- uchar data n;
- writecom(0xb0); //數據自動寫開
-
- for(n=0;n<30;n++) //數據自動寫段,文字屬性
- {
- state3();
- writedat(0x27);
- }
-
- writecom(0xb2); //數據自動寫關
- }
-
- void clear(void)
- {
- uint data n;
- writed1d2(0x00,0x00); //地址指針
- writecom(0x24);
- writecom(0xb0); //數據自動寫開
-
- for(n=0;n<10000;n++) //數據自動寫段,文字屬性
- {
- state3();
- writedat(0x00);
- }
-
- writecom(0xb2); //數據自動寫關
- }
-
- void charflash(void)
- {
- while(1) //字型閃爍控制(死循環)
- {
- state01();
- writecom(0x98);
- delay();
- state01();
- writecom(0x90);
- delay();
- };
- }
-
- void writebyte(void)
- {
- state01(); //寫一個字符,文字屬性
- writedat(0x28);
- state01();
- writecom(0xc0);
- }
- //////////////////////////
- void readycharshow(void) //靜態顯示可調用
- {
- uchar idata number;
- number=30; //寫入字型圖象數
- state01();
- writed1d2((number=(number<<1)),0x00); //圖象區寬度 240的LCD橫向字節數為30個
- writecom(0x43);
- }
- //////////////////////
- void blank(void)
- {
- uchar idata i;
- for(i=0;i<16;i++)
- {
- state01();
- writedat(0x00);
- state01();
- writecom(0xc0);
- }
- }
- //////////////////////
- void main(void)
- {
-
- uchar idata i,a,b; //可隨意支配參數
- P3=0xff; //P3控制口置位
- RESET=0; //LCD上電復位
- delay();
- RESET=1;
- delay();
- /*
- writed1d2(0x00,0x00); //光標設置
- writecom(0x21);
- writecom(0x93);
- writecom(0xa7);
- */
- writed1d2(0x00,0x00); //地址指針
- writecom(0x24);
-
- writed1d2(0x00,0x00); //文字首地址
- writecom(0x40);
-
- writed1d2(0x1e,0x00); //文字區寬度 注意進制換算 C中0x1e=匯編中30
- writecom(0x41);
-
- writed1d2(0x00,0x00); //圖象首地址
- writecom(0x42);
-
- // writed1d2(0x1e,0x00); //圖象區寬度 240的LCD橫向字節數為30個
- // writecom(0x43); //(后面有設置)
-
- writecom(0x98); //文字開/關 圖象開/關
-
- writecom(0x80); //啟用內部文字 (邏輯選擇)
-
- // writebyte();
-
-
- /*清全屏幕,注意文字、圖形參數不同,文字圖形都有時以圖形為準,參數可取大些*/
- clear();
- writed1d2(0x00,0x00); //地址指針
- writecom(0x24);
- /* */
-
- // readycharshow();
-
- while(1)
- {
- charshow();
-
- writed1d2(0x00,0x00); //地址指針
- writecom(0x24);
- };
- while(1)
- {
- ;
- }
- }
-
-
- void charshow(void)
- {
- uchar data i,j,k;
-
- uchar code word[16][32]={
-
- /*-- 文字: 昆 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x20,0x40,0x20,0x40,
- 0x20,0x44,0x3E,0x4C,0x20,0x70,0x20,0x40,0x26,0x42,0x38,0x42,0x20,0x3E,0x00,0x00,
-
- /*-- 文字: 山 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x21,0x04,0x21,0x04,0x21,0x04,
- 0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x21,0x04,0x7F,0xFC,0x20,0x04,0x00,0x00,
-
- /*-- 文字: 市 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x02,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x1F,0xF8,0x11,0x08,0x11,0x08,
- 0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x08,0x11,0x28,0x11,0x10,0x01,0x00,0x01,0x00,
-
- /*-- 文字: 創 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x08,0x02,0x08,0x02,0x14,0x12,0x13,0x12,0x21,0xD2,0x40,0x92,0xBF,0x12,0x21,0x12,
- 0x21,0x12,0x25,0x12,0x22,0x12,0x20,0x82,0x20,0x82,0x20,0x8A,0x1F,0x84,0x00,0x00,
-
- /*-- 文字: 新 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x10,0x00,0x08,0x0E,0x7F,0x70,0x22,0x40,0x14,0x40,0xFF,0x7E,0x08,0x48,0x08,0x48,
- 0xFF,0x48,0x08,0x48,0x2C,0x48,0x2A,0x88,0x4A,0x88,0x89,0x08,0x2A,0x08,0x10,0x08,
-
- /*-- 文字: 科 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x06,0x08,0x78,0x88,0x08,0x48,0x08,0x48,0xFE,0x08,0x18,0x88,0x1C,0x48,0x2A,0x48,
- 0x28,0x0E,0x48,0x78,0x8B,0x88,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
-
- /*-- 文字: 技 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x10,0x20,0x10,0x20,0x10,0x20,0xFD,0xFE,0x10,0x20,0x14,0x20,0x19,0xFC,0x31,0x08,
- 0xD0,0x88,0x10,0x90,0x10,0x60,0x10,0x60,0x10,0x90,0x11,0x0E,0x56,0x04,0x20,0x00,
-
- /*-- 文字: 檢 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x10,0x40,0x10,0x40,0x10,0xA0,0xFD,0x10,0x12,0x0E,0x38,0x00,0x35,0xF8,0x50,0x00,
- 0x50,0x88,0x92,0x4C,0x11,0x48,0x11,0x50,0x10,0x20,0x17,0xFE,0x10,0x00,0x00,0x00,
-
- /*-- 文字: 測 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
- 0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
-
- /*-- 文字: 儀 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x08,0x80,0x08,0x40,0x10,0x68,0x12,0x48,0x22,0x08,0x62,0x10,0xA1,0x10,0x21,0x10,
- 0x20,0xA0,0x20,0xA0,0x20,0x40,0x20,0xA0,0x21,0x10,0x22,0x0E,0x2C,0x04,0x20,0x00,
-
- /*-- 文字: 器 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x3E,0x7C,0x22,0x44,0x22,0x44,0x3E,0x7C,0x01,0x10,0x01,0x08,0xFF,0xFC,0x06,0xC0,
- 0x18,0x30,0xE0,0x0E,0x3E,0xFC,0x22,0x88,0x22,0x88,0x22,0x88,0x3E,0xF8,0x00,0x00,
-
- /*-- 文字: 有 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x01,0x00,0x01,0x00,0x7F,0xFE,0x02,0x00,0x04,0x00,0x0F,0xF0,0x18,0x10,0x28,0x10,
- 0x4F,0xF0,0x88,0x10,0x08,0x10,0x0F,0xF0,0x08,0x10,0x08,0x90,0x08,0x70,0x08,0x20,
-
- /*-- 文字: 限 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0xFB,0xF8,0x92,0x08,0x93,0xF8,0xA2,0x08,0xA2,0x08,0x93,0xF8,0x8A,0x80,
- 0x8A,0x48,0xAA,0x50,0x92,0x20,0x82,0x20,0x82,0x10,0x82,0x8E,0x83,0x04,0x82,0x00,
-
- /*-- 文字: 公 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0x04,0x40,0x06,0x40,0x04,0x40,0x08,0x20,0x08,0x10,0x10,0x18,0x22,0x0E,
- 0x43,0x04,0x02,0x00,0x04,0x20,0x08,0x10,0x11,0xF8,0x3F,0x18,0x10,0x10,0x00,0x00,
-
- /*-- 文字: 司 --*/
- /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
- 0x00,0x00,0x3F,0xFC,0x00,0x04,0x00,0x04,0x7F,0xE4,0x00,0x04,0x00,0x04,0x3F,0xC4,
- 0x20,0x44,0x20,0x44,0x3F,0xC4,0x20,0x44,0x20,0x04,0x00,0x14,0x00,0x08,0x00,0x00,};
-
-
-
- for(j=0;j<31;j++,j++)
- {
- blank();
- for(i=0;i<15;i++)
- {
-
- writedat(word[j]);
-
- writecom(0xc0);
-
- writedat(word[j+1]);
-
- writecom(0xc0);
- }
- }
-
- delay();
- for(k=0;k<61;k++)
- {
- writed1d2(k,0x00); //圖象首地址
- writecom(0x42);
- delay();
- }
-
-
- }
|