|
- /*8位總線驅(qū)動(dòng)LCD1602*/
- #include<reg52.h>
- #defineuchar unsigned char
- #defineuint unsigned int
- #include<intrins.h>//延時(shí)時(shí)鐘周期時(shí)用到
- sbitweixuan=P2^7; //將兩個(gè)鎖存器關(guān)閉,防止數(shù)碼管顯示亂碼
- sbitduanxuan=P2^6;
- //sbitLCD_RW=P2^7; //檢查忙位
- sbitLCD_RS=P3^5;
- sbitLCD_EN=P3^4;
- ucharcode table[]="123456789ABCDEFG";
- ucharcode table1[]="123456789ABCDEFG";
- voiddelayxms(uint xms) //延時(shí)X毫秒
- {
- uinti,j;
- for(i=0;i<xms;i++)
- for(j=0;j<114;j++);
- }
- /* voidread_LCD_busy() //檢查忙函數(shù)
- {
- LCD_RS=0;
- LCD_RW=1;
- IO7=1; //I/O口寫1
- LCD_EN=1;
- while(IO7); //等待液晶寫完
- LCD_EN=0;
- } */
- voiddelayxus(uint xus) //延時(shí)X微秒
- {
- uchari;
- for(i=0;i<xus;i++)
- {
- _nop_();
- }
- }
- voidwrite_LCD_CD(uchar cd,uchar CD) //cd=0寫指令,cd=1寫數(shù)據(jù)
- {
- //read_LCD_busy();//檢查忙函數(shù)
- delayxus(20);//最低延時(shí)(一定要在開頭有個(gè)延時(shí))
- LCD_RS=cd;
- P0=CD;
- LCD_EN=1;
- LCD_EN=0;
- }
- voidLCD_init() //initialization,液晶初始化
- {
- write_LCD_CD(0,0x38); //顯示模式設(shè)置(16*2顯示,5*7點(diǎn)陣,4位數(shù)據(jù)接口)
- write_LCD_CD(0,0x06); // 寫一個(gè)字符后地址指針加1
- write_LCD_CD(0,0x0c); //設(shè)置開顯示,不顯示光標(biāo)
- write_LCD_CD(0,0x01); //顯示清屏,數(shù)據(jù)指針清0(清屏需要一定時(shí)間)
- delayxus(80);//清屏?xí)r間
- }
- voidmain()
- {
- uchari;
- duanxuan=0;
- weixuan=0;
- LCD_EN=0;
- LCD_init();
- write_LCD_CD(0,0x80);//數(shù)據(jù)地址指針,第一行
- do
- {
- write_LCD_CD(1,table[ i]); //寫數(shù)據(jù),data是編譯器關(guān)鍵詞
- i++;
- }
- while(table[ i]!='\0');
- i=0;
- write_LCD_CD(0,0x80+0x40);//數(shù)據(jù)地址指針,第二行
- do
- {
- write_LCD_CD(1,table1[ i]); //寫數(shù)據(jù),data是編譯器關(guān)鍵詞
- i++;
- }
- while(table1[ i]!='\0'); //因?yàn)閠able是字符串
- delayxms(2000);
- //write_LCD_CD(0,0x01); //顯示清屏,數(shù)據(jù)指針清0
- //delayxus(80);
- write_LCD_CD(0,0x0f);
- write_LCD_CD(0,0x01);
- write_LCD_CD(0,0x80);
- while(1);
- }
復(fù)制代碼
|
|