|
按K2按鈕不會(huì)顯示,
- #include <REGX51.H>
- #include <stdio.h>
- #define u16 unsigned int
- #define u8 unsigned char
- #define DbPins P0 // 宏定義將P0口用DbPins表示
- sbit E = P2^7;
- sbit RS = P2^6;
- sbit RW = P2^5;
- sbit K1 = P3^1; // 四個(gè)獨(dú)立按鍵
- sbit K2 = P3^0;
- sbit K3 = P3^2;
- sbit K4 = P3^3;
- sbit led1 = P2^0; //左轉(zhuǎn)向燈
- sbit led2 = P2^2; //右轉(zhuǎn)向燈
- u16 sign; // 用于判斷有無按鍵被按下 ,0表示有按鍵按下,1表示沒有按鍵按下
- u8 string1_K4[]="left_light_shan";
- u8 string2_K4[]="shan 10 xia";
- u8 string1_K3[]="right_light_shan";
- u8 string2_K3[]="shan 10 xia";
- u8 string3[]="IT class 2 huang yuxing";
- u16 Key_value; //用于接收鍵值的全局變量
- u8 string1[]="IT class 2"; //定義要顯示的字符
- u8 string2[]="huang yuxing";
- void delay(u16 ms)
- {
- u16 a,b;
- for(;ms>0 ; ms--)
- {
- for(b=199;b>0;b--)
- {
- for(a=1;a>0;a--) ;
- }
- }
- }
- // 寫入命令函數(shù)
- void LcdWriter(u8 com)
- {
- E = 0; //使能信號(hào),1時(shí)讀取信息,下降沿時(shí)執(zhí)行指令
- RS = 0; //低電平表示輸入指令,高電平表示輸入數(shù)據(jù)
- RW = 0; //高電平向lcd讀取信息,低電平向lcd輸入指令或數(shù)據(jù)
- DbPins = com; //寫入命令
- delay(1); // 延時(shí) 保持?jǐn)?shù)據(jù)穩(wěn)定性
- E = 1; //寫入時(shí)序
- delay(5); //保持時(shí)間
- E = 0; //下降沿執(zhí)行指令
- }
- // 輸出函數(shù)
- void LcdPrint(u8 date)
- {
- E = 0; // 使能清零
- RS = 1; // 選擇寫入數(shù)據(jù)
- RW = 0; //選擇寫入
- DbPins = date; // 寫入數(shù)據(jù)
- delay(1); // 延時(shí)1ms
- E = 1; // 讀取信息
- delay(5); //保持時(shí)間
- E = 0; // 下降沿執(zhí)行指令
- }
- // 初始化函數(shù)
- void Lcdinit()
- {
- LcdWriter(0x38); //開顯示,數(shù)據(jù)總線為8位顯示兩行,每個(gè)字符為5*7的點(diǎn)陣,
- LcdWriter(0x0c); // 開顯示,不顯示光標(biāo)
- LcdWriter(0x06); // 寫一個(gè)指針加1,向右移動(dòng)
- LcdWriter(0x01); // 清屏
- LcdWriter(0x80); // 設(shè)置數(shù)據(jù)指針起點(diǎn)
- }
- void out_put1()
- {
-
- u16 i,j,len1,len2;
- Lcdinit();
- len1 = sizeof(string1)-1; // 計(jì)算字符串長度
- len2 = sizeof(string2)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2[i]);
- }
- LcdWriter(0x07); // 寫一個(gè)指針加1,向右移動(dòng)
- j=50;
- while(j--)
- for(i=0;i<len1;i++)
- {
- LcdPrint(string3[i]);
- delay(250);
- }
- }
- void out_put()
- {
- u16 i,len1,len2;
- Lcdinit(); //初始化
-
- len1 = sizeof(string1)-1; // 計(jì)算字符串長度
- len2 = sizeof(string2)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2[i]);
- }
- while(1);
- }
- // 輸出按下K4輸出的
- void out_put_K4()
- {
-
- u16 i,len1,len2;
- Lcdinit();
- len1 = sizeof(string1_K4)-1; // 計(jì)算字符串長度
- len2 = sizeof(string2_K4)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1_K4[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2_K4[i]);
- }
- }
- // 輸出按下K3輸出的
- void out_put_K3()
- {
-
- u16 i,len1,len2;
- Lcdinit();
- len1 = sizeof(string1_K3)-1; // 計(jì)算字符串長度
- len2 = sizeof(string2_K3)-1;
- for(i=0;i<len1;i++)
- {
- LcdPrint(string1_K3[i]);
- }
-
- LcdWriter(0x40+0x80);
- for(i=0;i<len2;i++)
- {
- LcdPrint(string2_K3[i]);
- }
- }
- // 模擬獨(dú)立按鍵按鈕按下
- void K4_but()
- {
- u16 a= 0;
- if (K4==0) //K4按下
- {
- delay(50); //消抖
- if(K4 == 0)
- {
- Key_value = 16;
- }
-
- while((a>50) && (K4 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K4();
- }
- a= 0;
- if (K3==0) //K3按下
- {
- delay(50); //消抖
- if(K3 == 0)
- {
- Key_value = 17;
- }
-
- while((a>50) && (K3 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K3();
- }
- a = 0;
- if (K2==0) //K2按下
- {
- delay(50); //消抖
- if(K2 == 0)
- {
- Key_value = 18;
-
- }
-
- while((a>50) && (K2 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put_K2();
- }
- a = 0;
- if (K1==0) //K1按下
- {
- delay(50); //消抖
- if(K1 == 0)
- {
- Key_value = 19;
- }
-
- while((a>50) && (K1 != 0))
- {
- a++;
- }
- sign = 0; // 已有按鍵被按下
- out_put();
- }
- }
- void main()
- {
- u16 i;
- sign = 1; // 無按鍵被按下
- Lcdinit(); //初始化
- K1 = 1;
- K2 = 1;
- K3 = 1;
- K4 = 1;
- do{
- while(sign)
- {
- K4_but();
- }
- if(Key_value == 16) // 如果k4 按下D1亮
- {
- for(i = 0;i < 10;i++)
- {led1 = 0;
- delay(100);
- led1 = ~led1;
- delay(100);}
- sign = 1;// 按一次,輸入一個(gè)字符
- }
- else if(Key_value == 17) //如果K3按下D3,亮
- {
- for(i = 0;i < 10;i++)
- {led2 = 0;
- delay(100);
- led2 = ~led2;
- delay(100);}
- sign = 1;// 按一次,輸入一個(gè)字符
- }
- else if(Key_value == 18)
- {
-
- out_put();
- sign = 1;
- }
- else
- {
- out_put1();
- sign = 1;
- }
- }
- while(1);
- }
復(fù)制代碼
按按鈕k1也不會(huì)進(jìn)入我想要的界面
|
|