LCD2004 LCD1602顯示自定義漢字詳解
1.1 打開(kāi)取字模軟件
1.2 新建圖像8×8
1.3 描繪自定義漢字,只用后5×8點(diǎn)陣(因?yàn)長(zhǎng)CD2004/LCD1602每個(gè)顯示單元為5×8點(diǎn)陣)
1.5 取模方式C51格式
- 復(fù)制字模代碼,給每一個(gè)自定義圖漢字/圖標(biāo)定義一個(gè)數(shù)組
1.6 LCD2004共可顯示80個(gè)字符(LCD1602共可顯示32個(gè)字符,原理相同,程序通用)
1.7 只需根據(jù)不同的硬件注意PIN口的定義就能正確顯示
// .c 文件 // - #include<reg51.h>
- #include<intrins.h> // _nop_();
- #include"lcd.h"
- //#include"temp.h"
- //#include"ds1302.h"
- //#include"i2c.h"
-
-
- sbit K1=P3^0; //數(shù)據(jù)-
- sbit K2=P3^1; //數(shù)據(jù)+
- sbit K3=P3^2; //設(shè)置
-
-
-
- sbit BZ=P1^5; //蜂鳴器
-
- uchar Set[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-
- uchar sheng[]={0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00}; //“生”字字模
- uchar ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; //“日”字字模
- uchar kuai[]={0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00}; //“快”字字模
- uchar le[]={0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00}; //“樂(lè)”字字模
-
-
-
-
- void IntConfiguration();
-
- uchar SetState=0,SetPlace=10;
- uchar SetState2=0,SetPlace2=10;
-
- void Delay10ms(void); //誤差 0us
- void Delayms(unsigned char c);
- void Delay(uint y);
-
-
- /*******************************************************************************
- * 函數(shù)名 : main
- * 函數(shù)功能 : 主函數(shù)
- * 輸入 : 無(wú)
- * 輸出 : 無(wú)
- *******************************************************************************/
- void main()
- {
- uint i;
- uint count=0;
-
- LcdInit();
-
- IntConfiguration();
-
- K3=1;
-
- Delay10ms();
- Delay(1);
- Delayms(1);
-
-
-
- for(i=0;i<8;i++) //1 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //2 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+1);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //3 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //4 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+3);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //5 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //6 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+5);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //7 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //8 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+7);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //9 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //10 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+9);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //11 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //12 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //13 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //14 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+13);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //15 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //16 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //17 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //18 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+17);
- LcdWriteData(0x01);
-
-
- for(i=0;i<8;i++) //19 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //20 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x80+19);
- LcdWriteData(0x03);
-
-
-
- for(i=0;i<8;i++) //21 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //22 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //23 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //24 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //25 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //26 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //27 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //28 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //29 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //30 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //31 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //32 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //33 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //34 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //35 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //36 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //37 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //38 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //39 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //40 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xc0+19);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //41 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //42 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //43 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //44 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //45 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //46 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //47 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //48 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //49 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //50 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //51 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //52 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //53 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //54 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //55 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //56 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //57 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //58 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //59 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //60 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0x94+19);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //61 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //62 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+1);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //63 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+2);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //64 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+3);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //65 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+4);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //66 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+5);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //67 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+6);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //68 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+7);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //69 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+8);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //70 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+9);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //71 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+10);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //72 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+11);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //73 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+12);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //74 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+13);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //75 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+14);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //76 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+15);
- LcdWriteData(0x03);
-
-
-
-
- for(i=0;i<8;i++) //77 顯示’生‘
- {
- LcdWriteCom(0x40+i);
- LcdWriteData(sheng[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+16);
- LcdWriteData(0x00);
-
- for(i=0;i<8;i++) //78 顯示‘日’
- {
- LcdWriteCom(0x48+i);
- LcdWriteData(ri[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+17);
- LcdWriteData(0x01);
-
- for(i=0;i<8;i++) //79 顯示‘快’
- {
- LcdWriteCom(0x50+i);
- LcdWriteData(kuai[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+18);
- LcdWriteData(0x02);
-
- for(i=0;i<8;i++) //80 顯示‘樂(lè)’
- {
- LcdWriteCom(0x58+i);
- LcdWriteData(le[i]);
- //Delay(100);
- }
- LcdWriteCom(0xd4+19);
- LcdWriteData(0x03);
-
-
-
- while(1)
- {
- while(SetState==1)
- {
- LCDWrite_String(0, 0, 12, "Frequency Modulation");
- }
-
-
- while(SetState==2)
- {
- LCDWrite_String(0, 0, 12, "ANTENNA IS CONNETED?");
- }
- }
- }
-
-
-
-
- /*******************************************************************************
- * 函數(shù)名 : IntConfiguration()
- * 函數(shù)功能 : 配置外部中斷0
- * 輸入 : 無(wú)
- * 輸出 : 無(wú)
- *******************************************************************************/
- void IntConfiguration()
- {
- //設(shè)置INT0
- IT0=1;//跳變沿出發(fā)方式(下降沿)
- EX0=1;//打開(kāi)INT0的中斷允許。
-
- EA=1;//打開(kāi)總中斷
- }
-
- /*******************************************************************************
- * 函數(shù)名 : Int0()
- * 函數(shù)功能 : 外部中斷0 中斷函數(shù)
- * 輸入 : 無(wú)
- * 輸出 : 無(wú)
- *******************************************************************************/
- void Int0() interrupt 0
- {
- Delay10ms();
- if(K3==0)
- {
- SetState++;
- //SetPlace=0;
- while(SetState==3)
- SetState=0;
- }
- }
-
-
- /*******************************************************************************
- * 函數(shù)名 : Delay10ms
- * 函數(shù)功能 : 延時(shí)函數(shù),延時(shí)10ms
- * 輸入 : 無(wú)
- * 輸出 : 無(wú)
- *******************************************************************************/
- void Delay10ms(void) //誤差 0us
- {
- unsigned char a,b,c;
- for(c=1;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
-
- void Delayms(unsigned char c) //誤差 0us
- {
- unsigned char a,b;
- for( ;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
-
- void Delay(uint y)
- {
- unsigned int x;
- for(y;y>0;y--)
- for(x=65;x>0;x--);
- }
復(fù)制代碼
// lcd.c 文件 // - #include"lcd.h"
- /*******************************************************************************
- * 函 數(shù) 名 : Lcd1602_Delay1ms
- * 函數(shù)功能 : 延時(shí)函數(shù),延時(shí)1ms
- * 輸 入 : c
- * 輸 出 : 無(wú)
- * 說(shuō) 名 : 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。
- *******************************************************************************/
- void Lcd1602_Delay1ms(uint c) //誤差 0us
- {
- uchar a,b;
- for (; c>0; c--)
- {
- for (b=55;b>0;b--)
- {
- for(a=1;a>0;a--);
- }
- }
- }
-
- /*******************************************************************************
- * 函 數(shù) 名 : void LCDWrite_String(uchar x, uchar y, uchar *s)
- * 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字符串
- * 輸 入 : x,y,*s
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void LCDWrite_String(uchar x, uchar y, uchar z, uchar *s) //x 0~15 , y 0,1,2,3
- {
- LCD_set_xy(x,y,z);
- while(*s)
- {
- LcdWriteData(*s);
- s++;
- }
- }
-
- /*******************************************************************************
- * 函 數(shù) 名 : void LCD_set_xy(uchar x, uchar y,uchar z)
- * 函數(shù)功能 : 指定向LCD寫(xiě)入字符串的位置
- * 輸 入 : x,y,z //x:橫坐標(biāo) y:縱坐標(biāo) z:字符串長(zhǎng)度
- * 輸 出 : 無(wú)
- *******************************************************************************/
- void LCD_set_xy(uchar x,uchar y,uchar z)
- {
- uchar i;
- if(y==0)
- {
- LcdWriteCom(0x80+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0x80+x);
- }
- if(y==1)
- {
- LcdWriteCom(0xc0+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0xc0+x);
- }
- if(y==2)
- {
- LcdWriteCom(0x94+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0x94+x);
- }
- if(y==3)
- {
- LcdWriteCom(0xd4+x);
- for(i=0;i<z;i++)
- {
- LcdWriteData(' ');
- }
- LcdWriteCom(0xd4+x);
- }
- }
-
- /*******************************************************************************
- * 函 數(shù) 名 : LcdWriteCom
- * 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的命令
- * 輸 入 : com
- * 輸 出 : 無(wú)
- *******************************************************************************/
- #ifndef LCD1602_4PINS //當(dāng)沒(méi)有定義這個(gè)LCD1602_4PINS時(shí)
- void LcdWriteCom(uchar com) //寫(xiě)入命令
- {
- LCD1602_E = 0; //使能
- LCD1602_RS = 0; //選擇發(fā)送命令
- LCD1602_RW = 0; //選擇寫(xiě)入
-
- LCD1602_DATAPINS = com; //放入命令
- Lcd1602_Delay1ms(1); //等待數(shù)據(jù)穩(wěn)定
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5); //保持時(shí)間
- LCD1602_E = 0;
- }
- #else
- void LcdWriteCom(uchar com) //寫(xiě)入命令
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 0; //選擇寫(xiě)入命令
- LCD1602_RW = 0; //選擇寫(xiě)入
-
- LCD1602_DATAPINS = com; //由于4位的接線(xiàn)是接到P0口的高四位,所以傳送高四位不用改
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
-
- // Lcd1602_Delay1ms(1);
- LCD1602_DATAPINS = com << 4; //發(fā)送低四位
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 數(shù) 名 : LcdWriteData
- * 函數(shù)功能 : 向LCD寫(xiě)入一個(gè)字節(jié)的數(shù)據(jù)
- * 輸 入 : dat
- * 輸 出 : 無(wú)
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù)
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //選擇輸入數(shù)據(jù)
- LCD1602_RW = 0; //選擇寫(xiě)入
-
- LCD1602_DATAPINS = dat; //寫(xiě)入數(shù)據(jù)
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5); //保持時(shí)間
- LCD1602_E = 0;
- }
- #else
- void LcdWriteData(uchar dat) //寫(xiě)入數(shù)據(jù)
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //選擇寫(xiě)入數(shù)據(jù)
- LCD1602_RW = 0; //選擇寫(xiě)入
-
- LCD1602_DATAPINS = dat; //由于4位的接線(xiàn)是接到P0口的高四位,所以傳送高四位不用改
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
-
- LCD1602_DATAPINS = dat << 4; //寫(xiě)入低四位
- Lcd1602_Delay1ms(1);
-
- LCD1602_E = 1; //寫(xiě)入時(shí)序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 數(shù) 名 : LcdInit()
- * 函數(shù)功能 : 初始化LCD屏
- * 輸 入 : 無(wú)
- * 輸 出 : 無(wú)
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x38); //開(kāi)顯示
- LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo)
- LcdWriteCom(0x06); //寫(xiě)一個(gè)指針加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)
- }
- #else
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x32); //將8位總線(xiàn)轉(zhuǎn)為4位總線(xiàn)
- LcdWriteCom(0x28); //在四位線(xiàn)下的初始化
- LcdWriteCom(0x0c); //開(kāi)顯示不顯示光標(biāo)
- LcdWriteCom(0x06); //寫(xiě)一個(gè)指針加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //設(shè)置數(shù)據(jù)指針起點(diǎn)
- }
- #endif
復(fù)制代碼
// LCD.h 文件 // - #ifndef __LCD_H_
- #define __LCD_H_
- /**********************************
- 當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r(shí)候定義,
- 使用8位取消這個(gè)定義
- **********************************/
- #define LCD1602_4PINS
- /**********************************
- 包含頭文件
- **********************************/
- #include<reg51.h>
- //---重定義關(guān)鍵詞---//
- #ifndef uchar
- #define uchar unsigned char
- #endif
- #ifndef uint
- #define uint unsigned int
- #endif
- /**********************************
- PIN口定義
- **********************************/
- #define LCD1602_DATAPINS P0
- sbit LCD1602_E=P2^7;
- sbit LCD1602_RW=P2^5;
- sbit LCD1602_RS=P2^6;
- /**********************************
- 函數(shù)聲明
- **********************************/
- /*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/
- void Lcd1602_Delay1ms(uint c); //誤差 0us
- /*LCD1602寫(xiě)入8位命令子函數(shù)*/
- void LcdWriteCom(uchar com);
- /*LCD1602寫(xiě)入8位數(shù)據(jù)子函數(shù)*/
- void LcdWriteData(uchar dat) ;
- /*LCD1602初始化子程序*/
- void LcdInit();
- /*LCD1602寫(xiě)入字符串*/
- void LCDWrite_String(uchar x, uchar y,uchar z, uchar *s);
- /*設(shè)置LCD1602寫(xiě)入字符串的位置*/
- void LCD_set_xy(uchar x, uchar y, uchar z);
-
- #endif
復(fù)制代碼
4.注意!!!
|